diff --git a/source/RobotAPI/applications/BusInspectionUnitObserver/BusInspectionUnitObserverApp.h b/source/RobotAPI/applications/BusInspectionUnitObserver/BusInspectionUnitObserverApp.h
deleted file mode 100644
index 697580f922cef8db5fd403947b799358036deb4d..0000000000000000000000000000000000000000
--- a/source/RobotAPI/applications/BusInspectionUnitObserver/BusInspectionUnitObserverApp.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * This file is part of ArmarX.
- *
- * Copyright (C) 2012-2016, High Performance Humanoid Technologies (H2T), Karlsruhe Institute of Technology (KIT), all rights reserved.
- *
- * ArmarX is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * 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 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::applications
- * @author     Peter Kaiser (peter dot kaiser at kit dot edu)
- * @date       2015
- * @copyright  http://www.gnu.org/licenses/gpl-2.0.txt
- *             GNU General Public License
- */
-
-#include <ArmarXCore/core/application/Application.h>
-#include <RobotAPI/components/units/BusInspectionUnitObserver.h>
-
-namespace armarx
-{
-    class BusInspectionUnitObserverApp :
-        virtual public armarx::Application
-    {
-        void setup(const ManagedIceObjectRegistryInterfacePtr& registry, Ice::PropertiesPtr properties)
-        {
-            registry->addObject(Component::create<BusInspectionUnitObserver>(properties));
-        }
-    };
-}
-
-
-
diff --git a/source/RobotAPI/applications/BusInspectionUnitObserver/CMakeLists.txt b/source/RobotAPI/applications/BusInspectionUnitObserver/CMakeLists.txt
index a59095c00f71bd4b9d7aceb87821a96809f8fd65..36d65f09800e2ee10984d91f237b0033f1b1473b 100644
--- a/source/RobotAPI/applications/BusInspectionUnitObserver/CMakeLists.txt
+++ b/source/RobotAPI/applications/BusInspectionUnitObserver/CMakeLists.txt
@@ -11,6 +11,6 @@ endif()
 
 set(COMPONENT_LIBS RobotAPIUnits)
 
-set(EXE_SOURCE main.cpp BusInspectionUnitObserverApp.h)
+set(EXE_SOURCE main.cpp)
 
 armarx_add_component_executable("${EXE_SOURCE}")
diff --git a/source/RobotAPI/applications/BusInspectionUnitObserver/main.cpp b/source/RobotAPI/applications/BusInspectionUnitObserver/main.cpp
index 30b071b5857276dedd957f574586397fd41ed41f..82f4b846f3b09b526193f61b3a9a331c0da62de1 100644
--- a/source/RobotAPI/applications/BusInspectionUnitObserver/main.cpp
+++ b/source/RobotAPI/applications/BusInspectionUnitObserver/main.cpp
@@ -22,12 +22,13 @@
  *             GNU General Public License
  */
 
-#include "BusInspectionUnitObserverApp.h"
+#include <RobotAPI/components/units/BusInspectionUnitObserver.h>
+
+#include <ArmarXCore/core/application/Application.h>
+#include <ArmarXCore/core/Component.h>
+#include <ArmarXCore/core/logging/Logging.h>
 
 int main(int argc, char* argv[])
 {
-    armarx::ApplicationPtr app = armarx::Application::createInstance<armarx::BusInspectionUnitObserverApp>();
-    app->setName("BusInspectionUnitObserver");
-
-    return app->main(argc, argv);
+    return armarx::runSimpleComponentApp<armarx::BusInspectionUnitObserver>(argc, argv, "BusInspectionUnitObserver");
 }
diff --git a/source/RobotAPI/applications/ForceTorqueObserver/CMakeLists.txt b/source/RobotAPI/applications/ForceTorqueObserver/CMakeLists.txt
index db0ee2c94123469297b2469e01b58714fc665634..2b27a6d0039ab4aa255bdbdc8935ea6d88d3f483 100644
--- a/source/RobotAPI/applications/ForceTorqueObserver/CMakeLists.txt
+++ b/source/RobotAPI/applications/ForceTorqueObserver/CMakeLists.txt
@@ -11,6 +11,6 @@ endif()
 
 set(COMPONENT_LIBS RobotAPIUnits)
 
-set(EXE_SOURCE main.cpp ForceTorqueObserverApp.h)
+set(EXE_SOURCE main.cpp)
 
 armarx_add_component_executable("${EXE_SOURCE}")
diff --git a/source/RobotAPI/applications/ForceTorqueObserver/ForceTorqueObserverApp.h b/source/RobotAPI/applications/ForceTorqueObserver/ForceTorqueObserverApp.h
deleted file mode 100644
index 32d5ae9e6d9bdaf97ad74a3b0b4730fc5ffbecef..0000000000000000000000000000000000000000
--- a/source/RobotAPI/applications/ForceTorqueObserver/ForceTorqueObserverApp.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * This file is part of ArmarX.
- *
- * Copyright (C) 2012-2016, High Performance Humanoid Technologies (H2T), Karlsruhe Institute of Technology (KIT), all rights reserved.
- *
- * ArmarX is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * 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 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    ArmarXCore::applications
- * @author     Kai Welke (weöle dot at kit dot edu)
- * @date       2012
- * @copyright  http://www.gnu.org/licenses/gpl-2.0.txt
- *             GNU General Public License
- */
-
-
-#include <ArmarXCore/core/application/Application.h>
-#include <RobotAPI/components/units/ForceTorqueObserver.h>
-
-namespace armarx
-{
-    class ForceTorqueObserverApp :
-        virtual public armarx::Application
-    {
-        void setup(const ManagedIceObjectRegistryInterfacePtr& registry, Ice::PropertiesPtr properties)
-        {
-            registry->addObject(Component::create<ForceTorqueObserver>(properties));
-        }
-    };
-}
-
-
-
diff --git a/source/RobotAPI/applications/ForceTorqueObserver/main.cpp b/source/RobotAPI/applications/ForceTorqueObserver/main.cpp
index a878d500dcf8dd8e3cae76c1693bc5227088c35e..5bde42c5f96cebcaaedb5b307a47148a0d640b17 100644
--- a/source/RobotAPI/applications/ForceTorqueObserver/main.cpp
+++ b/source/RobotAPI/applications/ForceTorqueObserver/main.cpp
@@ -22,13 +22,13 @@
  *             GNU General Public License
  */
 
-#include "ForceTorqueObserverApp.h"
+#include <RobotAPI/components/units/ForceTorqueObserver.h>
+
+#include <ArmarXCore/core/application/Application.h>
+#include <ArmarXCore/core/Component.h>
 #include <ArmarXCore/core/logging/Logging.h>
 
 int main(int argc, char* argv[])
 {
-    armarx::ApplicationPtr app = armarx::Application::createInstance<armarx::ForceTorqueObserverApp>();
-    app->setName("ForceTorqueObserver");
-
-    return app->main(argc, argv);
+    return armarx::runSimpleComponentApp<armarx::ForceTorqueObserver>(argc, argv, "ForceTorqueObserver");
 }
diff --git a/source/RobotAPI/applications/ForceTorqueUnitSimulation/CMakeLists.txt b/source/RobotAPI/applications/ForceTorqueUnitSimulation/CMakeLists.txt
index 93f53429d6846ba5a4870205063eeb0956c54310..e7da9acf454e51c4be4534e376003ca85c9b3fc2 100644
--- a/source/RobotAPI/applications/ForceTorqueUnitSimulation/CMakeLists.txt
+++ b/source/RobotAPI/applications/ForceTorqueUnitSimulation/CMakeLists.txt
@@ -10,6 +10,6 @@ endif()
 
 set(COMPONENT_LIBS RobotAPIUnits)
 
-set(SOURCES main.cpp ForceTorqueUnitSimulationApp.h)
+set(SOURCES main.cpp)
 
 armarx_add_component_executable("${SOURCES}")
diff --git a/source/RobotAPI/applications/ForceTorqueUnitSimulation/ForceTorqueUnitSimulationApp.h b/source/RobotAPI/applications/ForceTorqueUnitSimulation/ForceTorqueUnitSimulationApp.h
deleted file mode 100644
index 586593eb40731b39593866b106e2d4ec193d4a2f..0000000000000000000000000000000000000000
--- a/source/RobotAPI/applications/ForceTorqueUnitSimulation/ForceTorqueUnitSimulationApp.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * This file is part of ArmarX.
- *
- * Copyright (C) 2012-2016, High Performance Humanoid Technologies (H2T), Karlsruhe Institute of Technology (KIT), all rights reserved.
- *
- * ArmarX is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * 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 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::applications
- * @author     Peter Kaiser
- * @date       2014
- * @copyright  http://www.gnu.org/licenses/gpl-2.0.txt
- *             GNU General Public License
- */
-
-
-#include <ArmarXCore/core/application/Application.h>
-#include <RobotAPI/components/units/ForceTorqueUnitSimulation.h>
-
-namespace armarx
-{
-    /**
-     * Application for testing the armarx::ForceTorqueUnitSimulation
-     */
-    class ForceTorqueUnitSimulationApp :
-        virtual public armarx::Application
-    {
-        /**
-         * @see armarx::Application::setup()
-         */
-        void setup(const ManagedIceObjectRegistryInterfacePtr& registry, Ice::PropertiesPtr properties)
-        {
-            registry->addObject(Component::create<ForceTorqueUnitSimulation>(properties));
-        }
-    };
-}
diff --git a/source/RobotAPI/applications/ForceTorqueUnitSimulation/main.cpp b/source/RobotAPI/applications/ForceTorqueUnitSimulation/main.cpp
index 52d4c4e5420eb882844d0197c3888d33f01d3bc0..26a126b4be868544684291042b31c0d31ee3a4d7 100644
--- a/source/RobotAPI/applications/ForceTorqueUnitSimulation/main.cpp
+++ b/source/RobotAPI/applications/ForceTorqueUnitSimulation/main.cpp
@@ -22,12 +22,13 @@
  *             GNU General Public License
  */
 
-#include "ForceTorqueUnitSimulationApp.h"
+#include <RobotAPI/components/units/ForceTorqueUnitSimulation.h>
+
+#include <ArmarXCore/core/application/Application.h>
+#include <ArmarXCore/core/Component.h>
+#include <ArmarXCore/core/logging/Logging.h>
 
 int main(int argc, char* argv[])
 {
-    armarx::ApplicationPtr app = armarx::Application::createInstance<armarx::ForceTorqueUnitSimulationApp>();
-    app->setName("ForceTorqueUnitSimulation");
-
-    return app->main(argc, argv);
+    return armarx::runSimpleComponentApp<armarx::ForceTorqueUnitSimulation>(argc, argv, "ForceTorqueUnitSimulation");
 }
diff --git a/source/RobotAPI/applications/HandUnitSimulation/HandUnitSimulationApp.h b/source/RobotAPI/applications/HandUnitSimulation/HandUnitSimulationApp.h
deleted file mode 100644
index e39aa0e71b62e4e4f4994632c4fb8e50c9ddfd28..0000000000000000000000000000000000000000
--- a/source/RobotAPI/applications/HandUnitSimulation/HandUnitSimulationApp.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * This file is part of ArmarX.
- *
- * Copyright (C) 2012-2016, High Performance Humanoid Technologies (H2T), Karlsruhe Institute of Technology (KIT), all rights reserved.
- *
- * ArmarX is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * 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 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::HandUnitSimulation
- * @author     David Schiebener ( schiebener at kit dot edu )
- * @date       2014
- * @copyright  http://www.gnu.org/licenses/gpl-2.0.txt
- *             GNU General Public License
- */
-
-#ifndef _ARMARX_APPLICATION_RobotAPI_HandUnitSimulation_H
-#define _ARMARX_APPLICATION_RobotAPI_HandUnitSimulation_H
-
-
-#include <RobotAPI/components/units/HandUnitSimulation.h>
-
-#include <ArmarXCore/core/application/Application.h>
-
-namespace armarx
-{
-    /**
-     * @class HandUnitSimulationApp
-     * @brief A brief description
-     *
-     * Detailed Description
-     */
-    class HandUnitSimulationApp :
-        virtual public armarx::Application
-    {
-        /**
-         * @see armarx::Application::setup()
-         */
-        void setup(const ManagedIceObjectRegistryInterfacePtr& registry,
-                   Ice::PropertiesPtr properties)
-        {
-            registry->addObject(Component::create<HandUnitSimulation>(properties));
-        }
-    };
-}
-
-#endif
diff --git a/source/RobotAPI/applications/HandUnitSimulation/main.cpp b/source/RobotAPI/applications/HandUnitSimulation/main.cpp
index 0097fbef9588144e71bcd25a727fdfd2feb28fff..32bd1b8d3894b856d4cfb3218805f8755d34f606 100644
--- a/source/RobotAPI/applications/HandUnitSimulation/main.cpp
+++ b/source/RobotAPI/applications/HandUnitSimulation/main.cpp
@@ -22,13 +22,13 @@
  *             GNU General Public License
  */
 
-#include "HandUnitSimulationApp.h"
+#include <RobotAPI/components/units/HandUnitSimulation.h>
+
+#include <ArmarXCore/core/application/Application.h>
+#include <ArmarXCore/core/Component.h>
 #include <ArmarXCore/core/logging/Logging.h>
 
 int main(int argc, char* argv[])
 {
-    armarx::ApplicationPtr app = armarx::Application::createInstance < armarx::HandUnitSimulationApp > ();
-    app->setName("HandUnitSimulation");
-
-    return app->main(argc, argv);
+    return armarx::runSimpleComponentApp<armarx::HandUnitSimulation>(argc, argv, "HandUnitSimulation");
 }
diff --git a/source/RobotAPI/applications/HapticObserver/CMakeLists.txt b/source/RobotAPI/applications/HapticObserver/CMakeLists.txt
index f9205fbe4da5b3f0cfb440f7e9e68ca8f661c356..4ecded18079f10e6c21d683967885b20291c9f46 100644
--- a/source/RobotAPI/applications/HapticObserver/CMakeLists.txt
+++ b/source/RobotAPI/applications/HapticObserver/CMakeLists.txt
@@ -10,6 +10,6 @@ endif()
 
 set(COMPONENT_LIBS RobotAPIUnits)
 
-set(EXE_SOURCE main.cpp HapticObserverApp.h)
+set(EXE_SOURCE main.cpp)
 
 armarx_add_component_executable("${EXE_SOURCE}")
diff --git a/source/RobotAPI/applications/HapticObserver/HapticObserverApp.h b/source/RobotAPI/applications/HapticObserver/HapticObserverApp.h
deleted file mode 100644
index d31398ea03cf3e9e5a47e5ec1cf7d63e1834e5c0..0000000000000000000000000000000000000000
--- a/source/RobotAPI/applications/HapticObserver/HapticObserverApp.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * This file is part of ArmarX.
- *
- * Copyright (C) 2012-2016, High Performance Humanoid Technologies (H2T), Karlsruhe Institute of Technology (KIT), all rights reserved.
- *
- * ArmarX is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * 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 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::HapticObserver
- * @author     Simon Ottenhaus ( simon dot ottenhaus at kit dot edu )
- * @date       2014
- * @copyright  http://www.gnu.org/licenses/gpl-2.0.txt
- *             GNU General Public License
- */
-
-#ifndef _ARMARX_APPLICATION_RobotAPI_HapticObserver_H
-#define _ARMARX_APPLICATION_RobotAPI_HapticObserver_H
-
-#include <ArmarXCore/core/application/Application.h>
-#include <RobotAPI/components/units/HapticObserver.h>
-
-namespace armarx
-{
-    /**
-     * @class HapticObserverApp
-     * @brief A brief description
-     *
-     * Detailed Description
-     */
-    class HapticObserverApp :
-        virtual public armarx::Application
-    {
-        /**
-         * @see armarx::Application::setup()
-         */
-        void setup(const ManagedIceObjectRegistryInterfacePtr& registry,
-                   Ice::PropertiesPtr properties)
-        {
-            registry->addObject(Component::create<HapticObserver>(properties));
-        }
-    };
-}
-
-#endif
diff --git a/source/RobotAPI/applications/HapticObserver/main.cpp b/source/RobotAPI/applications/HapticObserver/main.cpp
index 7d8ca2521e85506d90f38a474f33623f436fee53..c521a8ac8c46219d913e8f427c4e0b30f8ff255c 100644
--- a/source/RobotAPI/applications/HapticObserver/main.cpp
+++ b/source/RobotAPI/applications/HapticObserver/main.cpp
@@ -22,13 +22,13 @@
  *             GNU General Public License
  */
 
-#include "HapticObserverApp.h"
+#include <RobotAPI/components/units/HapticObserver.h>
+
+#include <ArmarXCore/core/application/Application.h>
+#include <ArmarXCore/core/Component.h>
 #include <ArmarXCore/core/logging/Logging.h>
 
 int main(int argc, char* argv[])
 {
-    armarx::ApplicationPtr app = armarx::Application::createInstance < armarx::HapticObserverApp > ();
-    app->setName("HapticObserver");
-
-    return app->main(argc, argv);
+    return armarx::runSimpleComponentApp<armarx::HapticObserver>(argc, argv, "HapticObserver");
 }
diff --git a/source/RobotAPI/applications/HeadIKUnit/CMakeLists.txt b/source/RobotAPI/applications/HeadIKUnit/CMakeLists.txt
index 8967cc8981a3f72918d87f41b22b21fe09b44b2f..505fd541c7426a96e3e69f073734fec20c26564e 100644
--- a/source/RobotAPI/applications/HeadIKUnit/CMakeLists.txt
+++ b/source/RobotAPI/applications/HeadIKUnit/CMakeLists.txt
@@ -17,6 +17,6 @@ include_directories(${Simox_INCLUDE_DIRS})
 
 set(COMPONENT_LIBS RobotAPIUnits)
 
-set(SOURCES main.cpp HeadIKUnitApp.h)
+set(SOURCES main.cpp)
 
 armarx_add_component_executable("${SOURCES}")
diff --git a/source/RobotAPI/applications/HeadIKUnit/HeadIKUnitApp.h b/source/RobotAPI/applications/HeadIKUnit/HeadIKUnitApp.h
deleted file mode 100644
index 2523758b78a5314e0ff69181cce26805f9840d43..0000000000000000000000000000000000000000
--- a/source/RobotAPI/applications/HeadIKUnit/HeadIKUnitApp.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * This file is part of ArmarX.
- *
- * Copyright (C) 2012-2016, High Performance Humanoid Technologies (H2T), Karlsruhe Institute of Technology (KIT), all rights reserved.
- *
- * ArmarX is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * 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 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    ArmarXCore::applications
- * @author     David Schiebener (schiebener at kit dot edu)
- * @date       2014
- * @copyright  http://www.gnu.org/licenses/gpl-2.0.txt
- *             GNU General Public License
- */
-
-
-#include <ArmarXCore/core/application/Application.h>
-#include <RobotAPI/components/units/HeadIKUnit.h>
-
-namespace armarx
-{
-    class HeadIKUnitApp :
-        virtual public armarx::Application
-    {
-        void setup(const ManagedIceObjectRegistryInterfacePtr& registry, Ice::PropertiesPtr properties)
-        {
-            registry->addObject(Component::create<HeadIKUnit>(properties));
-        }
-    };
-}
-
-
-
diff --git a/source/RobotAPI/applications/HeadIKUnit/main.cpp b/source/RobotAPI/applications/HeadIKUnit/main.cpp
index 32c2146ef7914db8495782b3f4454e94a1d76ade..83eadc25c567c53051f6c75e5c46cbe98fb70b5e 100644
--- a/source/RobotAPI/applications/HeadIKUnit/main.cpp
+++ b/source/RobotAPI/applications/HeadIKUnit/main.cpp
@@ -22,12 +22,13 @@
  *             GNU General Public License
  */
 
-#include "HeadIKUnitApp.h"
+#include <RobotAPI/components/units/HeadIKUnit.h>
+
+#include <ArmarXCore/core/application/Application.h>
+#include <ArmarXCore/core/Component.h>
+#include <ArmarXCore/core/logging/Logging.h>
 
 int main(int argc, char* argv[])
 {
-    armarx::ApplicationPtr app = armarx::Application::createInstance<armarx::HeadIKUnitApp>();
-    app->setName("HeadIKUnit");
-
-    return app->main(argc, argv);
+    return armarx::runSimpleComponentApp<armarx::HeadIKUnit>(argc, argv, "HeadIKUnit");
 }
diff --git a/source/RobotAPI/applications/InertialMeasurementUnitObserver/CMakeLists.txt b/source/RobotAPI/applications/InertialMeasurementUnitObserver/CMakeLists.txt
index e280918bcf6713df170b90e5a40273c4b5da86c2..c481299f8386e5e41dd1113430fe4252220a20f3 100644
--- a/source/RobotAPI/applications/InertialMeasurementUnitObserver/CMakeLists.txt
+++ b/source/RobotAPI/applications/InertialMeasurementUnitObserver/CMakeLists.txt
@@ -11,6 +11,6 @@ armarx_component_set_name("InertialMeasurementUnitObserverApp")
 
 set(COMPONENT_LIBS ArmarXCoreInterfaces ArmarXCore ArmarXCoreObservers  RobotAPIUnits)
 
-set(EXE_SOURCE InertialMeasurementUnitObserverApp.h main.cpp)
+set(EXE_SOURCE main.cpp)
 
 armarx_add_component_executable("${EXE_SOURCE}")
diff --git a/source/RobotAPI/applications/InertialMeasurementUnitObserver/InertialMeasurementUnitObserverApp.h b/source/RobotAPI/applications/InertialMeasurementUnitObserver/InertialMeasurementUnitObserverApp.h
deleted file mode 100644
index 4d6592913eb97b62646ae55bfd949ec544c71361..0000000000000000000000000000000000000000
--- a/source/RobotAPI/applications/InertialMeasurementUnitObserver/InertialMeasurementUnitObserverApp.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * This file is part of ArmarX.
- *
- * Copyright (C) 2012-2016, High Performance Humanoid Technologies (H2T), Karlsruhe Institute of Technology (KIT), all rights reserved.
- *
- * ArmarX is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * 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 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::InertialMeasurementUnitObserver
- * @author     Markus Grotz ( markus-grotz at web dot de )
- * @date       2015
- * @copyright  http://www.gnu.org/licenses/gpl-2.0.txt
- *             GNU General Public License
- */
-
-#ifndef _ARMARX_APPLICATION_RobotAPI_InertialMeasurementUnitObserver_H
-#define _ARMARX_APPLICATION_RobotAPI_InertialMeasurementUnitObserver_H
-
-
-#include <RobotAPI/components/units/InertialMeasurementUnitObserver.h>
-
-#include <ArmarXCore/core/application/Application.h>
-#include <ArmarXCore/core/Component.h>
-
-
-namespace armarx
-{
-    /**
-     * @class InertialMeasurementUnitObserverApp
-     * @brief A brief description
-     *
-     * Detailed Description
-     */
-    class InertialMeasurementUnitObserverApp :
-        virtual public armarx::Application
-    {
-        /**
-         * @see armarx::Application::setup()
-         */
-        void setup(const ManagedIceObjectRegistryInterfacePtr& registry,
-                   Ice::PropertiesPtr properties)
-        {
-            registry->addObject(Component::create<InertialMeasurementUnitObserver>(properties));
-        }
-    };
-}
-
-#endif
diff --git a/source/RobotAPI/applications/InertialMeasurementUnitObserver/main.cpp b/source/RobotAPI/applications/InertialMeasurementUnitObserver/main.cpp
index 3c787c737cefdf84ff834a910adee2354cb17cba..593baa1d190a352b0fe2991609304b25555833ba 100644
--- a/source/RobotAPI/applications/InertialMeasurementUnitObserver/main.cpp
+++ b/source/RobotAPI/applications/InertialMeasurementUnitObserver/main.cpp
@@ -22,13 +22,13 @@
  *             GNU General Public License
  */
 
-#include "InertialMeasurementUnitObserverApp.h"
+#include <RobotAPI/components/units/InertialMeasurementUnitObserver.h>
+
+#include <ArmarXCore/core/application/Application.h>
+#include <ArmarXCore/core/Component.h>
 #include <ArmarXCore/core/logging/Logging.h>
 
 int main(int argc, char* argv[])
 {
-    armarx::ApplicationPtr app = armarx::Application::createInstance < armarx::InertialMeasurementUnitObserverApp > ();
-    app->setName("InertialMeasurementUnitObserver");
-
-    return app->main(argc, argv);
+    return armarx::runSimpleComponentApp<armarx::InertialMeasurementUnitObserver>(argc, argv, "InertialMeasurementUnitObserver");
 }
diff --git a/source/RobotAPI/applications/KinematicUnitObserver/CMakeLists.txt b/source/RobotAPI/applications/KinematicUnitObserver/CMakeLists.txt
index cea242b9155a85624229cb1d0b01ebee55842ebd..940574be837e22e1d7742a1082a3da03660c0b74 100644
--- a/source/RobotAPI/applications/KinematicUnitObserver/CMakeLists.txt
+++ b/source/RobotAPI/applications/KinematicUnitObserver/CMakeLists.txt
@@ -4,6 +4,6 @@ armarx_component_set_name(KinematicUnitObserver)
 
 set(COMPONENT_LIBS RobotAPIUnits)
 
-set(SOURCES main.cpp KinematicUnitObserverApp.h)
+set(SOURCES main.cpp)
 
 armarx_add_component_executable("${SOURCES}")
diff --git a/source/RobotAPI/applications/KinematicUnitObserver/KinematicUnitObserverApp.h b/source/RobotAPI/applications/KinematicUnitObserver/KinematicUnitObserverApp.h
deleted file mode 100644
index d03ca16f2dee74520680600d3409ddee341232df..0000000000000000000000000000000000000000
--- a/source/RobotAPI/applications/KinematicUnitObserver/KinematicUnitObserverApp.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * This file is part of ArmarX.
- *
- * Copyright (C) 2012-2016, High Performance Humanoid Technologies (H2T), Karlsruhe Institute of Technology (KIT), all rights reserved.
- *
- * ArmarX is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * 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 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    ArmarXCore::applications
- * @author     Christian Boege (boege dot at kit dot edu)
- * @date       2011
- * @copyright  http://www.gnu.org/licenses/gpl-2.0.txt
- *             GNU General Public License
- */
-
-
-#include <ArmarXCore/core/application/Application.h>
-#include <RobotAPI/components/units/KinematicUnitObserver.h>
-
-namespace armarx
-{
-    /**
-     * Application for testing the armarx::KinematicUnitObserver
-     */
-    class KinematicUnitObserverApp :
-        virtual public armarx::Application
-    {
-        /**
-         * @see armarx::Application::setup()
-         */
-        void setup(const ManagedIceObjectRegistryInterfacePtr& registry, Ice::PropertiesPtr properties)
-        {
-            registry->addObject(Component::create<KinematicUnitObserver>(properties));
-        }
-    };
-}
diff --git a/source/RobotAPI/applications/KinematicUnitObserver/main.cpp b/source/RobotAPI/applications/KinematicUnitObserver/main.cpp
index 9b33770f291f4263b2dba4056ee1f365a10a2ce5..213d65125408c6ae4d7fb90083aef4958b848279 100644
--- a/source/RobotAPI/applications/KinematicUnitObserver/main.cpp
+++ b/source/RobotAPI/applications/KinematicUnitObserver/main.cpp
@@ -22,13 +22,13 @@
  *             GNU General Public License
  */
 
-#include "KinematicUnitObserverApp.h"
+#include <RobotAPI/components/units/KinematicUnitObserver.h>
+
+#include <ArmarXCore/core/application/Application.h>
+#include <ArmarXCore/core/Component.h>
 #include <ArmarXCore/core/logging/Logging.h>
 
 int main(int argc, char* argv[])
 {
-    armarx::ApplicationPtr app = armarx::Application::createInstance<armarx::KinematicUnitObserverApp>();
-    app->setName("KinematicUnitObserver");
-
-    return app->main(argc, argv);
+    return armarx::runSimpleComponentApp<armarx::KinematicUnitObserver>(argc, argv, "KinematicUnitObserver");
 }
diff --git a/source/RobotAPI/applications/KinematicUnitSimulation/CMakeLists.txt b/source/RobotAPI/applications/KinematicUnitSimulation/CMakeLists.txt
index 48b4f09038c23b32cc2b7ba79a472dcfee10e5c2..823267b1fe461a3dcc400e47a46b1ecc20eb8b54 100644
--- a/source/RobotAPI/applications/KinematicUnitSimulation/CMakeLists.txt
+++ b/source/RobotAPI/applications/KinematicUnitSimulation/CMakeLists.txt
@@ -16,6 +16,6 @@ include_directories(${Simox_INCLUDE_DIRS})
 
 set(COMPONENT_LIBS RobotAPIUnits)
 
-set(SOURCES main.cpp KinematicUnitSimulationApp.h)
+set(SOURCES main.cpp)
 
 armarx_add_component_executable("${SOURCES}")
diff --git a/source/RobotAPI/applications/KinematicUnitSimulation/KinematicUnitSimulationApp.h b/source/RobotAPI/applications/KinematicUnitSimulation/KinematicUnitSimulationApp.h
deleted file mode 100644
index 6782b1c1afa0b07db69418e4250edbaf125f0c09..0000000000000000000000000000000000000000
--- a/source/RobotAPI/applications/KinematicUnitSimulation/KinematicUnitSimulationApp.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * This file is part of ArmarX.
- *
- * Copyright (C) 2012-2016, High Performance Humanoid Technologies (H2T), Karlsruhe Institute of Technology (KIT), all rights reserved.
- *
- * ArmarX is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * 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 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    ArmarXCore::applications
- * @author     Christian Boege (boege at kit dot edu)
- * @date       2011
- * @copyright  http://www.gnu.org/licenses/gpl-2.0.txt
- *             GNU General Public License
- */
-
-
-#include <ArmarXCore/core/application/Application.h>
-#include <RobotAPI/components/units/KinematicUnitSimulation.h>
-
-namespace armarx
-{
-    /**
-     * Application for testing the armarx::KinematicUnitSimulation
-     */
-    class KinematicUnitSimulationApp :
-        virtual public armarx::Application
-    {
-        /**
-         * @see armarx::Application::setup()
-         */
-        void setup(const ManagedIceObjectRegistryInterfacePtr& registry, Ice::PropertiesPtr properties)
-        {
-            registry->addObject(Component::create<KinematicUnitSimulation>(properties));
-        }
-    };
-}
diff --git a/source/RobotAPI/applications/KinematicUnitSimulation/main.cpp b/source/RobotAPI/applications/KinematicUnitSimulation/main.cpp
index fcad3cb74f1167c3a68d341ae1ad200be8e21a57..766a0c8a0d9c2628516317252259321f14d6e42d 100644
--- a/source/RobotAPI/applications/KinematicUnitSimulation/main.cpp
+++ b/source/RobotAPI/applications/KinematicUnitSimulation/main.cpp
@@ -22,13 +22,13 @@
  *             GNU General Public License
  */
 
-#include "KinematicUnitSimulationApp.h"
+#include <RobotAPI/components/units/KinematicUnitSimulation.h>
+
+#include <ArmarXCore/core/application/Application.h>
+#include <ArmarXCore/core/Component.h>
 #include <ArmarXCore/core/logging/Logging.h>
 
 int main(int argc, char* argv[])
 {
-    armarx::ApplicationPtr app = armarx::Application::createInstance<armarx::KinematicUnitSimulationApp>();
-    app->setName("KinematicUnitSimulation");
-
-    return app->main(argc, argv);
+    return armarx::runSimpleComponentApp<armarx::KinematicUnitSimulation>(argc, argv, "KinematicUnitSimulation");
 }
diff --git a/source/RobotAPI/applications/PlatformUnitObserver/CMakeLists.txt b/source/RobotAPI/applications/PlatformUnitObserver/CMakeLists.txt
index 83e6e45a9705999f4e9e7e4ab52c3f50672b73bf..c9deac457ac8eab1bdb0f09419066063739ac163 100644
--- a/source/RobotAPI/applications/PlatformUnitObserver/CMakeLists.txt
+++ b/source/RobotAPI/applications/PlatformUnitObserver/CMakeLists.txt
@@ -3,6 +3,6 @@ armarx_component_set_name(PlatformUnitObserver)
 
 set(COMPONENT_LIBS RobotAPIUnits)
 
-set(SOURCES main.cpp PlatformUnitObserverApp.h)
+set(SOURCES main.cpp)
 
 armarx_add_component_executable("${SOURCES}")
diff --git a/source/RobotAPI/applications/PlatformUnitObserver/PlatformUnitObserverApp.h b/source/RobotAPI/applications/PlatformUnitObserver/PlatformUnitObserverApp.h
deleted file mode 100644
index 79d661035f797649a6b681e3aa090572e9833720..0000000000000000000000000000000000000000
--- a/source/RobotAPI/applications/PlatformUnitObserver/PlatformUnitObserverApp.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * This file is part of ArmarX.
- *
- * Copyright (C) 2012-2016, High Performance Humanoid Technologies (H2T), Karlsruhe Institute of Technology (KIT), all rights reserved.
- *
- * ArmarX is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * 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 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    ArmarXCore::applications
- * @author     Manfred Kroehnert (manfred dot kroehnert at kit dot edu)
- * @date       2013
- * @copyright  http://www.gnu.org/licenses/gpl-2.0.txt
- *             GNU General Public License
- */
-
-
-#include <ArmarXCore/core/application/Application.h>
-#include <RobotAPI/components/units/PlatformUnitObserver.h>
-
-namespace armarx
-{
-    /**
-     * Application for executing armarx::PlatformUnitObserver
-     */
-    class PlatformUnitObserverApp :
-        public armarx::Application
-    {
-        /**
-         * @see armarx::Application::setup()
-         */
-        void setup(const ManagedIceObjectRegistryInterfacePtr& registry, Ice::PropertiesPtr properties)
-        {
-            registry->addObject(Component::create<PlatformUnitObserver>(properties));
-        }
-    };
-}
diff --git a/source/RobotAPI/applications/PlatformUnitObserver/main.cpp b/source/RobotAPI/applications/PlatformUnitObserver/main.cpp
index fde58a4a7b6e2aba3b8840a8d46fdf56fa01504e..71e4411ddd80a86b6e282b3368140ee61a462820 100644
--- a/source/RobotAPI/applications/PlatformUnitObserver/main.cpp
+++ b/source/RobotAPI/applications/PlatformUnitObserver/main.cpp
@@ -22,13 +22,13 @@
  *             GNU General Public License
  */
 
-#include "PlatformUnitObserverApp.h"
+#include <RobotAPI/components/units/PlatformUnitObserver.h>
+
+#include <ArmarXCore/core/application/Application.h>
+#include <ArmarXCore/core/Component.h>
 #include <ArmarXCore/core/logging/Logging.h>
 
 int main(int argc, char* argv[])
 {
-    armarx::ApplicationPtr app = armarx::Application::createInstance<armarx::PlatformUnitObserverApp>();
-    app->setName("PlatformUnitObserver");
-
-    return app->main(argc, argv);
+    return armarx::runSimpleComponentApp<armarx::PlatformUnitObserver>(argc, argv, "PlatformUnitObserver");
 }
diff --git a/source/RobotAPI/applications/PlatformUnitSimulation/CMakeLists.txt b/source/RobotAPI/applications/PlatformUnitSimulation/CMakeLists.txt
index 40e5ea07cc1da98424ea7270200b95b0205dc32c..a6eae5afe96958d0839d314a3a90191ee3c17317 100644
--- a/source/RobotAPI/applications/PlatformUnitSimulation/CMakeLists.txt
+++ b/source/RobotAPI/applications/PlatformUnitSimulation/CMakeLists.txt
@@ -3,6 +3,6 @@ armarx_component_set_name(PlatformUnitSimulation)
 
 set(COMPONENT_LIBS RobotAPIUnits)
 
-set(SOURCES main.cpp PlatformUnitSimulationApp.h)
+set(SOURCES main.cpp)
 
 armarx_add_component_executable("${SOURCES}")
diff --git a/source/RobotAPI/applications/PlatformUnitSimulation/PlatformUnitSimulationApp.h b/source/RobotAPI/applications/PlatformUnitSimulation/PlatformUnitSimulationApp.h
deleted file mode 100644
index c29fb3870167f48f7366b33831fde36696e13e00..0000000000000000000000000000000000000000
--- a/source/RobotAPI/applications/PlatformUnitSimulation/PlatformUnitSimulationApp.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * This file is part of ArmarX.
- *
- * Copyright (C) 2012-2016, High Performance Humanoid Technologies (H2T), Karlsruhe Institute of Technology (KIT), all rights reserved.
- *
- * ArmarX is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * 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 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    ArmarXCore::applications
- * @author     tobias haass
- * @date       2013
- * @copyright  http://www.gnu.org/licenses/gpl-2.0.txt
- *             GNU General Public License
- */
-
-
-#include <ArmarXCore/core/application/Application.h>
-#include <RobotAPI/components/units/PlatformUnitSimulation.h>
-
-namespace armarx
-{
-    /**
-     * Application for testing the armarx::PlatformUnitSimulation
-     */
-    class PlatformUnitSimulationApp :
-        virtual public armarx::Application
-    {
-        /**
-         * @see armarx::Application::setup()
-         */
-        void setup(const ManagedIceObjectRegistryInterfacePtr& registry, Ice::PropertiesPtr properties)
-        {
-            registry->addObject(Component::create<PlatformUnitSimulation>(properties));
-        }
-    };
-}
diff --git a/source/RobotAPI/applications/PlatformUnitSimulation/main.cpp b/source/RobotAPI/applications/PlatformUnitSimulation/main.cpp
index 98b8790a5345f424d3c474a91dcffb8b57ced858..bca561916e0cd5f6c2e240f9af82986ea857fd07 100644
--- a/source/RobotAPI/applications/PlatformUnitSimulation/main.cpp
+++ b/source/RobotAPI/applications/PlatformUnitSimulation/main.cpp
@@ -22,13 +22,13 @@
  *             GNU General Public License
  */
 
-#include "PlatformUnitSimulationApp.h"
+#include <RobotAPI/components/units/PlatformUnitSimulation.h>
+
+#include <ArmarXCore/core/application/Application.h>
+#include <ArmarXCore/core/Component.h>
 #include <ArmarXCore/core/logging/Logging.h>
 
 int main(int argc, char* argv[])
 {
-    armarx::ApplicationPtr app = armarx::Application::createInstance<armarx::PlatformUnitSimulationApp>();
-    app->setName("PlatformUnitSimulation");
-
-    return app->main(argc, argv);
+    return armarx::runSimpleComponentApp<armarx::PlatformUnitSimulation>(argc, argv, "PlatformUnitSimulation");
 }
diff --git a/source/RobotAPI/applications/RobotControl/CMakeLists.txt b/source/RobotAPI/applications/RobotControl/CMakeLists.txt
index 2159a85acb6ac9bde062182aa24e9e7a6be35155..798af63ac18774167778230a0e8ffa02380fa42d 100644
--- a/source/RobotAPI/applications/RobotControl/CMakeLists.txt
+++ b/source/RobotAPI/applications/RobotControl/CMakeLists.txt
@@ -3,6 +3,6 @@ armarx_component_set_name(RobotControl)
 
 set(COMPONENT_LIBS RobotAPIOperations)
 
-set(SOURCES main.cpp RobotControlApp.h)
+set(SOURCES main.cpp)
 
 armarx_add_component_executable("${SOURCES}")
diff --git a/source/RobotAPI/applications/RobotControl/RobotControlApp.h b/source/RobotAPI/applications/RobotControl/RobotControlApp.h
deleted file mode 100644
index a78f5af33cf19c22e7cb473c3b7e092d972235ae..0000000000000000000000000000000000000000
--- a/source/RobotAPI/applications/RobotControl/RobotControlApp.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * This file is part of ArmarX.
- *
- * Copyright (C) 2012-2016, High Performance Humanoid Technologies (H2T), Karlsruhe Institute of Technology (KIT), all rights reserved.
- *
- * ArmarX is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * 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 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    ArmarXCore::applications
- * @author     Kai Welke (weöle dot at kit dot edu)
- * @date       2012
- * @copyright  http://www.gnu.org/licenses/gpl-2.0.txt
- *             GNU General Public License
- */
-
-
-#include <ArmarXCore/core/application/Application.h>
-#include <RobotAPI/statecharts/operations/RobotControl.h>
-
-namespace armarx
-{
-    /**
-     * Application for testing armarx::RobotControl
-     */
-    class RobotControlApp :
-        virtual public armarx::Application
-    {
-        /**
-         * @see armarx::Application::setup()
-         */
-        void setup(const ManagedIceObjectRegistryInterfacePtr& registry, Ice::PropertiesPtr properties)
-        {
-            registry->addObject(Component::create<RobotControl>(properties));
-        }
-    };
-}
diff --git a/source/RobotAPI/applications/RobotControl/main.cpp b/source/RobotAPI/applications/RobotControl/main.cpp
index 96a9c733b32a6f490ef8f972187f63763612a788..720e6420bb59dd20dcda28e2d3fc16dd827171a2 100644
--- a/source/RobotAPI/applications/RobotControl/main.cpp
+++ b/source/RobotAPI/applications/RobotControl/main.cpp
@@ -22,13 +22,13 @@
  *             GNU General Public License
  */
 
-#include "RobotControlApp.h"
+#include <RobotAPI/statecharts/operations/RobotControl.h>
+
+#include <ArmarXCore/core/application/Application.h>
+#include <ArmarXCore/core/Component.h>
 #include <ArmarXCore/core/logging/Logging.h>
 
 int main(int argc, char* argv[])
 {
-    armarx::ApplicationPtr app = armarx::Application::createInstance<armarx::RobotControlApp>();
-    app->setName("RobotControl");
-
-    return app->main(argc, argv);
+    return armarx::runSimpleComponentApp<armarx::RobotControl>(argc, argv, "RobotControl");
 }
diff --git a/source/RobotAPI/applications/RobotControlUI/CMakeLists.txt b/source/RobotAPI/applications/RobotControlUI/CMakeLists.txt
index 2a8fbed83fb6583325dbc26092ded79d3a9c99e0..8fe3ebb2c6901804392acd2cbb09edd72dc472bf 100644
--- a/source/RobotAPI/applications/RobotControlUI/CMakeLists.txt
+++ b/source/RobotAPI/applications/RobotControlUI/CMakeLists.txt
@@ -6,7 +6,6 @@ set(COMPONENT_LIBS RobotAPIOperations)
 set(SOURCES main.cpp
     RobotControlUI.cpp
     RobotControlUI.h
-    RobotControlUIApp.h
     )
 
 armarx_add_component_executable("${SOURCES}")
diff --git a/source/RobotAPI/applications/RobotControlUI/RobotControlUIApp.h b/source/RobotAPI/applications/RobotControlUI/RobotControlUIApp.h
deleted file mode 100644
index 092fb8f2940ce790b50f408bb1ceab5835a73c24..0000000000000000000000000000000000000000
--- a/source/RobotAPI/applications/RobotControlUI/RobotControlUIApp.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * This file is part of ArmarX.
- *
- * Copyright (C) 2012-2016, High Performance Humanoid Technologies (H2T), Karlsruhe Institute of Technology (KIT), all rights reserved.
- *
- * ArmarX is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * 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 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    ArmarXCore::applications
- * @author     Kai Welke (weöle dot at kit dot edu)
- * @date       2012
- * @copyright  http://www.gnu.org/licenses/gpl-2.0.txt
- *             GNU General Public License
- */
-
-
-#include <ArmarXCore/core/application/Application.h>
-#include "RobotControlUI.h"
-
-namespace armarx
-{
-    /**
-     * Application for testing armarx::RobotControlUI
-     */
-    class RobotControlUIApp :
-        virtual public armarx::Application
-    {
-        /**
-         * @see armarx::Application::setup()
-         */
-        void setup(const ManagedIceObjectRegistryInterfacePtr& registry, Ice::PropertiesPtr properties)
-        {
-            registry->addObject(Component::create<RobotControlUI>(properties));
-        }
-    };
-}
diff --git a/source/RobotAPI/applications/RobotControlUI/main.cpp b/source/RobotAPI/applications/RobotControlUI/main.cpp
index 4723b0d0363743308687529f880222e8110508d0..df21ab13fcf25f6e641c44e844ef3552da894b41 100644
--- a/source/RobotAPI/applications/RobotControlUI/main.cpp
+++ b/source/RobotAPI/applications/RobotControlUI/main.cpp
@@ -22,13 +22,13 @@
  *             GNU General Public License
  */
 
-#include "RobotControlUIApp.h"
+#include "RobotControlUI.h"
+
+#include <ArmarXCore/core/application/Application.h>
+#include <ArmarXCore/core/Component.h>
 #include <ArmarXCore/core/logging/Logging.h>
 
 int main(int argc, char* argv[])
 {
-    armarx::ApplicationPtr app = armarx::Application::createInstance<armarx::RobotControlUIApp>();
-    app->setName("RobotControlUI");
-
-    return app->main(argc, argv);
+    return armarx::runSimpleComponentApp<armarx::RobotControlUI>(argc, argv, "RobotControlUI");
 }
diff --git a/source/RobotAPI/applications/XsensIMU/CMakeLists.txt b/source/RobotAPI/applications/XsensIMU/CMakeLists.txt
index 68a3af2b1c42625496dba90e2fc18eea9acd1f6d..20bf9c0df6e04d04c194e2311f54840c85fa281f 100644
--- a/source/RobotAPI/applications/XsensIMU/CMakeLists.txt
+++ b/source/RobotAPI/applications/XsensIMU/CMakeLists.txt
@@ -11,6 +11,6 @@ armarx_component_set_name("XsensIMUApp")
 
 set(COMPONENT_LIBS ArmarXCoreInterfaces ArmarXCore XsensIMU)
 
-set(EXE_SOURCE XsensIMUApp.h main.cpp)
+set(EXE_SOURCE main.cpp)
 
 armarx_add_component_executable("${EXE_SOURCE}")
diff --git a/source/RobotAPI/applications/XsensIMU/XsensIMUApp.h b/source/RobotAPI/applications/XsensIMU/XsensIMUApp.h
deleted file mode 100644
index 0b698786f331ff33d95c0829c2b8802e76f4e16d..0000000000000000000000000000000000000000
--- a/source/RobotAPI/applications/XsensIMU/XsensIMUApp.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * This file is part of ArmarX.
- *
- * Copyright (C) 2012-2016, High Performance Humanoid Technologies (H2T), Karlsruhe Institute of Technology (KIT), all rights reserved.
- *
- * ArmarX is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * 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 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::XsensIMU
- * @author     Markus Grotz ( markus-grotz at web dot de )
- * @date       2015
- * @copyright  http://www.gnu.org/licenses/gpl-2.0.txt
- *             GNU General Public License
- */
-
-#ifndef _ARMARX_APPLICATION_RobotAPI_XsensIMU_H
-#define _ARMARX_APPLICATION_RobotAPI_XsensIMU_H
-
-
-#include <RobotAPI/drivers/XsensIMU/XsensIMU.h>
-
-#include <ArmarXCore/core/application/Application.h>
-#include <ArmarXCore/core/Component.h>
-
-
-namespace armarx
-{
-    /**
-     * @class XsensIMUApp
-     * @brief A brief description
-     *
-     * Detailed Description
-     */
-    class XsensIMUApp :
-        virtual public armarx::Application
-    {
-        /**
-         * @see armarx::Application::setup()
-         */
-        void setup(const ManagedIceObjectRegistryInterfacePtr& registry,
-                   Ice::PropertiesPtr properties)
-        {
-            registry->addObject(Component::create<XsensIMU>(properties));
-        }
-    };
-}
-
-#endif
diff --git a/source/RobotAPI/applications/XsensIMU/main.cpp b/source/RobotAPI/applications/XsensIMU/main.cpp
index 4ecdb27a5007976190d63748cb4286e951afc82a..2b5d6083b23b08b01c2b7b3824ab79178ed36a9b 100644
--- a/source/RobotAPI/applications/XsensIMU/main.cpp
+++ b/source/RobotAPI/applications/XsensIMU/main.cpp
@@ -22,13 +22,13 @@
  *             GNU General Public License
  */
 
-#include "XsensIMUApp.h"
+#include <RobotAPI/drivers/XsensIMU/XsensIMU.h>
+
+#include <ArmarXCore/core/application/Application.h>
+#include <ArmarXCore/core/Component.h>
 #include <ArmarXCore/core/logging/Logging.h>
 
 int main(int argc, char* argv[])
 {
-    armarx::ApplicationPtr app = armarx::Application::createInstance < armarx::XsensIMUApp > ();
-    app->setName("XsensIMU");
-
-    return app->main(argc, argv);
+    return armarx::runSimpleComponentApp<armarx::XsensIMU>(argc, argv, "XsensIMU");
 }
diff --git a/source/RobotAPI/components/DebugDrawer/DebugDrawerComponent.cpp b/source/RobotAPI/components/DebugDrawer/DebugDrawerComponent.cpp
index 270193c7952c20ae7a5b9c9c47e1ad3e739af027..1acd95e33c925f48b10780894770564fc6b0b9c1 100644
--- a/source/RobotAPI/components/DebugDrawer/DebugDrawerComponent.cpp
+++ b/source/RobotAPI/components/DebugDrawer/DebugDrawerComponent.cpp
@@ -2257,10 +2257,10 @@ namespace armarx
         enableLayerVisu(DEBUG_LAYER_NAME, visible);
     }
 
-    StringSequence DebugDrawerComponent::layerNames(const ::Ice::Current&)
+    Ice::StringSeq DebugDrawerComponent::layerNames(const ::Ice::Current&)
     {
         ScopedRecursiveLockPtr l = getScopedVisuLock();
-        StringSequence seq {};
+        Ice::StringSeq seq {};
 
         for (const auto & layer : layers)
         {
diff --git a/source/RobotAPI/components/DebugDrawer/DebugDrawerComponent.h b/source/RobotAPI/components/DebugDrawer/DebugDrawerComponent.h
index bef471367c53318c2a798132f4d156fd699b1ede..52706905dd117a5735e14cd5bd40a3c23d97d5ce 100644
--- a/source/RobotAPI/components/DebugDrawer/DebugDrawerComponent.h
+++ b/source/RobotAPI/components/DebugDrawer/DebugDrawerComponent.h
@@ -245,7 +245,7 @@ namespace armarx
         virtual void enableLayerVisu(const std::string& layerName, bool visible, const ::Ice::Current& = ::Ice::Current());
         virtual void enableDebugLayerVisu(bool visible, const ::Ice::Current& = ::Ice::Current());
 
-        virtual ::armarx::StringSequence layerNames(const ::Ice::Current& = ::Ice::Current());
+        virtual ::Ice::StringSeq layerNames(const ::Ice::Current& = ::Ice::Current());
         virtual ::armarx::LayerInformationSequence layerInformation(const ::Ice::Current& = ::Ice::Current());
 
         virtual void disableAllLayers(const ::Ice::Current& = ::Ice::Current());
diff --git a/source/RobotAPI/components/RobotState/RobotStateComponent.cpp b/source/RobotAPI/components/RobotState/RobotStateComponent.cpp
index ebbc4f01ad67450b8cc52a6900a7a03609097af2..6488c07c182a94dcdcf1f50aa4ff9d1038ef6284 100644
--- a/source/RobotAPI/components/RobotState/RobotStateComponent.cpp
+++ b/source/RobotAPI/components/RobotState/RobotStateComponent.cpp
@@ -61,7 +61,10 @@ namespace armarx
     {
 
         historyLength = getProperty<int>("HistoryLength").getValue();
-        history.clear();
+        {
+            boost::unique_lock<SharedMutex> lock(historyMutex);
+            history.clear();
+        }
 
 
         relativeRobotFile = getProperty<std::string>("RobotFileName").getValue();
@@ -128,7 +131,7 @@ namespace armarx
                 ARMARX_VERBOSE << "Node: " << node->getName() << endl;
             }
         }*/
-        _sharedRobotServant =  new SharedRobotServant(this->_synchronized);
+        _sharedRobotServant =  new SharedRobotServant(this->_synchronized, RobotStateComponentInterfacePrx::uncheckedCast(getProxy()));
         _sharedRobotServant->ref();
     }
 
@@ -169,7 +172,7 @@ namespace armarx
 
         auto clone = this->_synchronized->clone(_synchronized->getName());
 
-        SharedRobotServantPtr p = new SharedRobotServant(clone);
+        SharedRobotServantPtr p = new SharedRobotServant(clone, RobotStateComponentInterfacePrx::uncheckedCast(getProxy()));
         p->setTimestamp(IceUtil::Time::microSecondsDouble(_sharedRobotServant->getTimestamp()->timestamp));
         auto result = getObjectAdapter()->addWithUUID(p);
         // virtal robot clone is buggy -> set global pose here
@@ -194,7 +197,7 @@ namespace armarx
 
         clone->setJointValues(config.jointMap);
         clone->setGlobalPose(FramedPosePtr::dynamicCast(config.globalPose)->toEigen());
-        SharedRobotServantPtr p = new SharedRobotServant(clone);
+        SharedRobotServantPtr p = new SharedRobotServant(clone, RobotStateComponentInterfacePrx::uncheckedCast(getProxy()));
         p->setTimestamp(IceUtil::Time::microSecondsDouble(time));
         auto result = getObjectAdapter()->addWithUUID(p);
         // virtal robot clone is buggy -> set global pose here
@@ -210,7 +213,6 @@ namespace armarx
         RobotStateConfig config;
         if (!interpolate(timestamp, config))
         {
-            ARMARX_WARNING << "Could not find or interpolate a robot state for time " << IceUtil::Time::microSeconds(timestamp).toDateTime();
             return NameValueMap();
         }
         return config.jointMap;
@@ -222,7 +224,6 @@ namespace armarx
         RobotStateConfig config;
         if (!interpolate(timestamp, config))
         {
-            ARMARX_WARNING << "Could not find or interpolate a robot state for time " << IceUtil::Time::microSeconds(timestamp).toDateTime();
             return RobotStateConfig();
         }
         return config;
@@ -242,6 +243,7 @@ namespace armarx
         }
         else if (it == history.end())
         {
+            ARMARX_WARNING << "Could not find or interpolate a robot state for time " << IceUtil::Time::microSeconds(time).toDateTime() << " - oldest available value: " << IceUtil::Time::microSeconds(history.begin()->first).toDateTime();
             return false;
         }
         else
diff --git a/source/RobotAPI/components/RobotState/SharedRobotServants.cpp b/source/RobotAPI/components/RobotState/SharedRobotServants.cpp
index 38ead5c0fb93347009670fa4653dc1c52bdab4db..e1fa94fd5708ba936f3f23128848adace2d5b5a0 100644
--- a/source/RobotAPI/components/RobotState/SharedRobotServants.cpp
+++ b/source/RobotAPI/components/RobotState/SharedRobotServants.cpp
@@ -15,9 +15,9 @@
  * 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    
- * @author     
- * @date       
+ * @package
+ * @author
+ * @date
  * @copyright  http://www.gnu.org/licenses/gpl-2.0.txt
  *             GNU General Public License
  */
@@ -282,8 +282,9 @@ namespace armarx
     // SharedRobotServant
     ///////////////////////////////
 
-    SharedRobotServant::SharedRobotServant(RobotPtr robot)
-        : _robot(robot)
+    SharedRobotServant::SharedRobotServant(RobotPtr robot, RobotStateComponentInterfacePrx robotStateComponent)
+        : _robot(robot),
+          robotStateComponent(robotStateComponent)
     {
 #ifdef VERBOSE
         ARMARX_WARNING_S << "construct " << this << flush;
@@ -307,6 +308,11 @@ namespace armarx
         }
     }
 
+    void SharedRobotServant::setRobotStateComponent(RobotStateComponentInterfacePrx robotStateComponent)
+    {
+        this->robotStateComponent = robotStateComponent;
+    }
+
     SharedRobotNodeInterfacePrx SharedRobotServant::getRobotNode(const string& name, const Current& current)
     {
         //    ARMARX_LOG_S << "Looking for node: " << name << flush;
@@ -445,6 +451,11 @@ namespace armarx
         return new TimestampVariant(updateTimestamp);
     }
 
+    RobotStateComponentInterfacePrx SharedRobotServant::getRobotStateComponent(const Current&) const
+    {
+        return robotStateComponent;
+    }
+
     void SharedRobotServant::setGlobalPose(const armarx::PoseBasePtr& pose, const Current&)
     {
         WriteLockPtr lock = _robot->getWriteLock();
diff --git a/source/RobotAPI/components/RobotState/SharedRobotServants.h b/source/RobotAPI/components/RobotState/SharedRobotServants.h
index e8ec1fd3e390547c5a605894b14a87d3742d3e7e..3eabd92556dc2c501f3ebbca1f309fca94a401dc 100644
--- a/source/RobotAPI/components/RobotState/SharedRobotServants.h
+++ b/source/RobotAPI/components/RobotState/SharedRobotServants.h
@@ -15,9 +15,9 @@
  * 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    
- * @author     
- * @date       
+ * @package
+ * @author
+ * @date
  * @copyright  http://www.gnu.org/licenses/gpl-2.0.txt
  *             GNU General Public License
  */
@@ -72,7 +72,7 @@ namespace armarx
      */
     class SharedRobotNodeServant :
         virtual public SharedRobotNodeInterface,
-    public SharedObjectBase
+        public SharedObjectBase
     {
     public:
         SharedRobotNodeServant(VirtualRobot::RobotNodePtr node /*,const Ice::Current & current = Ice::Current()*/);
@@ -117,9 +117,9 @@ namespace armarx
         public SharedObjectBase
     {
     public:
-        SharedRobotServant(VirtualRobot::RobotPtr robot);
+        SharedRobotServant(VirtualRobot::RobotPtr robot, RobotStateComponentInterfacePrx robotStateComponent);
         ~SharedRobotServant();
-
+        void setRobotStateComponent(RobotStateComponentInterfacePrx robotStateComponent);
         virtual SharedRobotNodeInterfacePrx getRobotNode(const std::string& name, const Ice::Current& current = Ice::Current());
         virtual SharedRobotNodeInterfacePrx getRootNode(const Ice::Current& current = Ice::Current());
         virtual bool hasRobotNode(const std::string& name, const Ice::Current& current = Ice::Current());
@@ -140,11 +140,14 @@ namespace armarx
 
         void setTimestamp(const IceUtil::Time& updateTime);
         TimestampBasePtr getTimestamp(const Ice::Current& = Ice::Current()) const;
+        RobotStateComponentInterfacePrx getRobotStateComponent(const Ice::Current&) const;
     protected:
         VirtualRobot::RobotPtr _robot;
         boost::recursive_mutex m;
         std::map<std::string, SharedRobotNodeInterfacePrx> _cachedNodes;
         IceUtil::Time updateTimestamp;
+        RobotStateComponentInterfacePrx robotStateComponent;
+
     };
 
     typedef IceInternal::Handle<SharedRobotServant> SharedRobotServantPtr;
diff --git a/source/RobotAPI/components/ViewSelection/ViewSelection.cpp b/source/RobotAPI/components/ViewSelection/ViewSelection.cpp
index 79700054c9abaa3f060ac9b6d65de9766a5e7a84..4ee7ad2dd828d175a65471434c30e5d2ae8263ca 100644
--- a/source/RobotAPI/components/ViewSelection/ViewSelection.cpp
+++ b/source/RobotAPI/components/ViewSelection/ViewSelection.cpp
@@ -48,6 +48,9 @@ void ViewSelection::onInitComponent()
 
     std::string graphFileName = "RobotAPI/ViewSelection/graph40k.gra";
 
+    armarx::CMakePackageFinder finder("RobotAPI");
+    ArmarXDataPath::addDataPaths(finder.getDataDir());
+
     if (ArmarXDataPath::getAbsolutePath(graphFileName, graphFileName))
     {
         visibilityMaskGraph = new CIntensityGraph(graphFileName);
@@ -84,7 +87,7 @@ void ViewSelection::onInitComponent()
     sleepingTimeBetweenViewDirectionChanges = getProperty<int>("SleepingTimeBetweenViewDirectionChanges").getValue();
     doAutomaticViewSelection = getProperty<bool>("ActiveAtStartup").getValue();
 
-    timeOfLastViewChange = IceUtil::Time::now();
+    timeOfLastViewChange =  armarx::TimeUtil::GetTime();
 
     // this is robot model specific: offset from the used head coordinate system to the actual
     // head center where the eyes are assumed to be located. Here it is correct for ARMAR-III
@@ -137,18 +140,42 @@ void ViewSelection::onExitComponent()
 
 ViewTargetBasePtr ViewSelection::nextAutomaticViewTarget()
 {
+    IceUtil::Time currentTime =  armarx::TimeUtil::GetTime();
+    std::vector<std::string> activeSaliencyMaps;
+    for (const auto & p : saliencyMaps)
+    {
+        if (p.second->validUntil)
+        {
+            TimestampVariantPtr time = TimestampVariantPtr::dynamicCast(p.second->validUntil);
+            if (time->toTime() > currentTime)
+            {
+                activeSaliencyMaps.push_back(p.second->name);
+            }
+        }
+        else
+        {
+            activeSaliencyMaps.push_back(p.second->name);
+        }
+
+    }
+
+    if (activeSaliencyMaps.empty())
+    {
+        return nullptr;
+    }
+
     SharedRobotInterfacePrx robotPrx = robotStateComponent->getSynchronizedRobot();
     TNodeList* visibilityMaskGraphNodes = visibilityMaskGraph->getNodes();
 
     // find the direction with highest saliency
     int maxIndex = -1;
-    float maxSaliency = 0;
+    float maxSaliency = std::numeric_limits<float>::min();
     for (size_t i = 0; i < visibilityMaskGraphNodes->size(); i++)
     {
         float saliency = 0.0f;
-        for (const auto & p : saliencyMaps)
+        for (const std::string & n : activeSaliencyMaps)
         {
-            saliency += p.second[i];
+            saliency += saliencyMaps[n]->map[i];
         }
 
         CIntensityNode* visibilityNode = (CIntensityNode*) visibilityMaskGraphNodes->at(i);
@@ -164,7 +191,7 @@ ViewTargetBasePtr ViewSelection::nextAutomaticViewTarget()
     ARMARX_DEBUG << "Highest saliency: " << maxSaliency;
 
     // select a new view if saliency is bigger than threshold (which converges towards 0 over time)
-    int timeSinceLastViewChange = (IceUtil::Time::now() - timeOfLastViewChange).toMilliSeconds();
+    int timeSinceLastViewChange = (armarx::TimeUtil::GetTime() - timeOfLastViewChange).toMilliSeconds();
     float saliencyThreshold = 0;
 
     if (timeSinceLastViewChange > 0)
@@ -182,7 +209,7 @@ ViewTargetBasePtr ViewSelection::nextAutomaticViewTarget()
 
         ViewTargetBasePtr viewTarget = new ViewTargetBase();
         viewTarget->priority = armarx::DEFAULT_VIEWTARGET_PRIORITY; // *  maxSaliency;
-        viewTarget->timeAdded = new TimestampVariant(IceUtil::Time::now());
+        viewTarget->timeAdded = new TimestampVariant(armarx::TimeUtil::GetTime());
         viewTarget->target = viewTargetPositionPtr;
         viewTarget->duration = 0;
 
@@ -242,8 +269,7 @@ void ViewSelection::process()
         ARMARX_INFO << "Looking at target " << viewTargetPositionPtr->output();
         headIKUnitProxy->setHeadTarget(headIKKinematicChainName, viewTargetPositionPtr);
 
-        timeOfLastViewChange = IceUtil::Time::now();
-
+        timeOfLastViewChange = armarx::TimeUtil::GetTime();
 
         float duration = viewTarget->duration;
         if (!viewTarget->duration)
@@ -310,11 +336,11 @@ ViewTargetList ViewSelection::getManualViewTargets(const Ice::Current& c)
 
 
 
-void armarx::ViewSelection::updateSaliencyMap(const string& name, const FloatSequence& map, const Ice::Current&)
+void armarx::ViewSelection::updateSaliencyMap(const SaliencyMapBasePtr& map, const Ice::Current&)
 {
     boost::mutex::scoped_lock lock(manualViewTargetsMutex);
 
-    saliencyMaps[name] = map;
+    saliencyMaps[map->name] = map;
 }
 
 
diff --git a/source/RobotAPI/components/ViewSelection/ViewSelection.h b/source/RobotAPI/components/ViewSelection/ViewSelection.h
index ce8977b57ed01e24180a81ad384d1576b43bd909..40d20090178faee01ba73d07d799aea35a71fa1c 100644
--- a/source/RobotAPI/components/ViewSelection/ViewSelection.h
+++ b/source/RobotAPI/components/ViewSelection/ViewSelection.h
@@ -28,6 +28,7 @@
 
 
 #include <ArmarXCore/core/Component.h>
+#include <ArmarXCore/core/time/TimeUtil.h>
 #include <ArmarXCore/observers/variant/TimestampVariant.h>
 #include <ArmarXCore/core/services/tasks/RunningTask.h>
 
@@ -164,7 +165,7 @@ namespace armarx
             doAutomaticViewSelection = false;
         }
 
-        void updateSaliencyMap(const string& name, const FloatSequence& map, const Ice::Current& c = ::Ice::Current());
+        void updateSaliencyMap(const SaliencyMapBasePtr& map, const Ice::Current& c = ::Ice::Current());
 
     private:
 
@@ -197,7 +198,7 @@ namespace armarx
         Eigen::Vector3f offsetToHeadCenter;
 
 
-        std::map<std::string, std::vector<float>> saliencyMaps;
+        std::map<std::string, SaliencyMapBasePtr> saliencyMaps;
 
     };
 
diff --git a/source/RobotAPI/components/units/KinematicUnit.cpp b/source/RobotAPI/components/units/KinematicUnit.cpp
index 0421e5448651e9d4e5b637dce8701acba9da1276..842a4ea8d3faf0eb18195561ed18461f43877ab5 100644
--- a/source/RobotAPI/components/units/KinematicUnit.cpp
+++ b/source/RobotAPI/components/units/KinematicUnit.cpp
@@ -47,12 +47,12 @@ void KinematicUnit::onInitComponent()
     robotNodeSetName = getProperty<std::string>("RobotNodeSetName").getValue();
 
     std::string project = getProperty<std::string>("RobotFileNameProject").getValue();
-    StringList includePaths;
+    Ice::StringSeq includePaths;
 
     if (!project.empty())
     {
         CMakePackageFinder finder(project);
-        StringList projectIncludePaths;
+        Ice::StringSeq projectIncludePaths;
         auto pathsString = finder.getDataDir();
         boost::split(projectIncludePaths,
                      pathsString,
@@ -119,12 +119,12 @@ void KinematicUnit::setJointVelocities(const NameValueMap& targetJointVelocities
 {
 }
 
-void KinematicUnit::requestKinematicUnit(const StringSequence& nodes, const Ice::Current& c)
+void KinematicUnit::requestKinematicUnit(const Ice::StringSeq& nodes, const Ice::Current& c)
 {
     SensorActorUnit::request(c);
 }
 
-void KinematicUnit::releaseKinematicUnit(const StringSequence& nodes, const Ice::Current& c)
+void KinematicUnit::releaseKinematicUnit(const Ice::StringSeq& nodes, const Ice::Current& c)
 {
     SensorActorUnit::release(c);
 }
diff --git a/source/RobotAPI/components/units/KinematicUnit.h b/source/RobotAPI/components/units/KinematicUnit.h
index b3ea7aa863679356d4e0e0717388db632da1df7b..4c5cf7ddd85d60bc0859bdae8480a1939deb2bab 100644
--- a/source/RobotAPI/components/units/KinematicUnit.h
+++ b/source/RobotAPI/components/units/KinematicUnit.h
@@ -120,8 +120,8 @@ namespace armarx
         virtual void onExitKinematicUnit() = 0;
 
         // proxy implementation
-        virtual void requestKinematicUnit(const StringSequence& nodes, const Ice::Current& c = ::Ice::Current());
-        virtual void releaseKinematicUnit(const StringSequence& nodes, const Ice::Current& c = ::Ice::Current());
+        virtual void requestKinematicUnit(const Ice::StringSeq& nodes, const Ice::Current& c = ::Ice::Current());
+        virtual void releaseKinematicUnit(const Ice::StringSeq& nodes, const Ice::Current& c = ::Ice::Current());
         virtual void switchControlMode(const NameControlModeMap& targetJointModes, const Ice::Current& c = ::Ice::Current());
         virtual void setJointAngles(const NameValueMap& targetJointAngles, const Ice::Current& c = ::Ice::Current());
         virtual void setJointVelocities(const NameValueMap& targetJointVelocities, const Ice::Current& c = ::Ice::Current());
diff --git a/source/RobotAPI/components/units/KinematicUnitObserver.cpp b/source/RobotAPI/components/units/KinematicUnitObserver.cpp
index 345e3efc6972d971113662620de3079d1a3910b4..f387672b1e5a0181463413093dcdb27720d6dda8 100644
--- a/source/RobotAPI/components/units/KinematicUnitObserver.cpp
+++ b/source/RobotAPI/components/units/KinematicUnitObserver.cpp
@@ -65,12 +65,12 @@ void KinematicUnitObserver::onConnectObserver()
     // the kinematic chain elements belonging to this unit are defined in a RobotNodeSet
     std::string robotFile = getProperty<std::string>("RobotFileName").getValue();
     std::string project = getProperty<std::string>("RobotFileNameProject").getValue();
-    StringList includePaths;
+    Ice::StringSeq includePaths;
 
     if (!project.empty())
     {
         CMakePackageFinder finder(project);
-        StringList projectIncludePaths;
+        Ice::StringSeq projectIncludePaths;
         auto pathsString = finder.getDataDir();
         boost::split(projectIncludePaths,
                      pathsString,
diff --git a/source/RobotAPI/components/units/KinematicUnitSimulation.cpp b/source/RobotAPI/components/units/KinematicUnitSimulation.cpp
index 978fedcf56a92dea71785161f663647355b87a9d..207b9572877467db7aaae5277af8333e1067fafb 100644
--- a/source/RobotAPI/components/units/KinematicUnitSimulation.cpp
+++ b/source/RobotAPI/components/units/KinematicUnitSimulation.cpp
@@ -422,7 +422,7 @@ bool mapEntryEqualsString(std::pair<std::string, KinematicUnitSimulationJointSta
     return (iter.first == compareString);
 }
 
-void KinematicUnitSimulation::requestJoints(const StringSequence& joints, const Ice::Current& c)
+void KinematicUnitSimulation::requestJoints(const Ice::StringSeq& joints, const Ice::Current& c)
 {
     // if one of the joints belongs to this unit, lock access to this unit for other components except for the requesting one
     KinematicUnitSimulationJointStates::const_iterator it = std::find_first_of(jointStates.begin(), jointStates.end(), joints.begin(), joints.end(), mapEntryEqualsString);
@@ -433,7 +433,7 @@ void KinematicUnitSimulation::requestJoints(const StringSequence& joints, const
     }
 }
 
-void KinematicUnitSimulation::releaseJoints(const StringSequence& joints, const Ice::Current& c)
+void KinematicUnitSimulation::releaseJoints(const Ice::StringSeq& joints, const Ice::Current& c)
 {
     // if one of the joints belongs to this unit, unlock access
     KinematicUnitSimulationJointStates::const_iterator it = std::find_first_of(jointStates.begin(), jointStates.end(), joints.begin(), joints.end(), mapEntryEqualsString);
diff --git a/source/RobotAPI/components/units/KinematicUnitSimulation.h b/source/RobotAPI/components/units/KinematicUnitSimulation.h
index 87cea5bde4109336bcaab519e72ac9be59854e6a..e720ada33a8068ff965a127ac98a4c6c40114e68 100644
--- a/source/RobotAPI/components/units/KinematicUnitSimulation.h
+++ b/source/RobotAPI/components/units/KinematicUnitSimulation.h
@@ -147,8 +147,8 @@ namespace armarx
         void simulationFunction();
 
         // proxy implementation
-        virtual void requestJoints(const StringSequence& joints, const Ice::Current& c = ::Ice::Current());
-        virtual void releaseJoints(const StringSequence& joints, const Ice::Current& c = ::Ice::Current());
+        virtual void requestJoints(const Ice::StringSeq& joints, const Ice::Current& c = ::Ice::Current());
+        virtual void releaseJoints(const Ice::StringSeq& joints, const Ice::Current& c = ::Ice::Current());
         virtual void switchControlMode(const NameControlModeMap& targetJointModes, const Ice::Current& c = ::Ice::Current());
         virtual void setJointAngles(const NameValueMap& targetJointAngles, const Ice::Current& c = ::Ice::Current());
         virtual void setJointVelocities(const NameValueMap& targetJointVelocities, const Ice::Current& c = ::Ice::Current());
diff --git a/source/RobotAPI/gui-plugins/KinematicUnitPlugin/KinematicUnitGuiPlugin.cpp b/source/RobotAPI/gui-plugins/KinematicUnitPlugin/KinematicUnitGuiPlugin.cpp
index e191ec3555aee91a649be74fe61d34f57aaae5ad..9dade3b58be4219499405025d8f65576cfad7555 100644
--- a/source/RobotAPI/gui-plugins/KinematicUnitPlugin/KinematicUnitGuiPlugin.cpp
+++ b/source/RobotAPI/gui-plugins/KinematicUnitPlugin/KinematicUnitGuiPlugin.cpp
@@ -15,9 +15,9 @@
  * 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    
- * @author     
- * @date       
+ * @package
+ * @author
+ * @date
  * @copyright  http://www.gnu.org/licenses/gpl-2.0.txt
  *             GNU General Public License
  */
@@ -145,13 +145,13 @@ void KinematicUnitWidgetController::onConnectComponent()
     robot.reset();
 
     std::string rfile;
-    StringList includePaths;
+    Ice::StringSeq includePaths;
 
     // get robot filename
     try
     {
 
-        StringList packages = kinematicUnitInterfacePrx->getArmarXPackages();
+        Ice::StringSeq packages = kinematicUnitInterfacePrx->getArmarXPackages();
         packages.push_back(Application::GetProjectName());
         ARMARX_VERBOSE << "ArmarX packages " << packages;
 
@@ -163,7 +163,7 @@ void KinematicUnitWidgetController::onConnectComponent()
             }
 
             CMakePackageFinder project(projectName);
-            StringList projectIncludePaths;
+            Ice::StringSeq projectIncludePaths;
             auto pathsString = project.getDataDir();
             ARMARX_VERBOSE << "Data paths of ArmarX package " << projectName << ": " << pathsString;
             boost::split(projectIncludePaths,
diff --git a/source/RobotAPI/gui-plugins/RobotViewerPlugin/RobotViewerGuiPlugin.cpp b/source/RobotAPI/gui-plugins/RobotViewerPlugin/RobotViewerGuiPlugin.cpp
index 3bffe4d3b405b5b2a1e51c273d89f60fb7cbb8a9..3f8897170147c9eab3676ab40b3d3649e2c2201f 100644
--- a/source/RobotAPI/gui-plugins/RobotViewerPlugin/RobotViewerGuiPlugin.cpp
+++ b/source/RobotAPI/gui-plugins/RobotViewerPlugin/RobotViewerGuiPlugin.cpp
@@ -15,9 +15,9 @@
  * 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    
- * @author     
- * @date       
+ * @package
+ * @author
+ * @date
  * @copyright  http://www.gnu.org/licenses/gpl-2.0.txt
  *             GNU General Public License
  */
@@ -143,17 +143,17 @@ void RobotViewerWidgetController::onConnectComponent()
     robot.reset();
 
     std::string rfile;
-    StringList includePaths;
+    Ice::StringSeq includePaths;
 
     // get robot filename
     try
     {
 
-        StringList packages = robotStateComponentPrx->getArmarXPackages();
+        Ice::StringSeq packages = robotStateComponentPrx->getArmarXPackages();
         packages.push_back(Application::GetProjectName());
         ARMARX_VERBOSE << "ArmarX packages " << packages;
 
-        for (const std::string& projectName : packages)
+        for (const std::string & projectName : packages)
         {
             if (projectName.empty())
             {
@@ -161,7 +161,7 @@ void RobotViewerWidgetController::onConnectComponent()
             }
 
             CMakePackageFinder project(projectName);
-            StringList projectIncludePaths;
+            Ice::StringSeq projectIncludePaths;
             auto pathsString = project.getDataDir();
             ARMARX_VERBOSE << "Data paths of ArmarX package " << projectName << ": " << pathsString;
             boost::split(projectIncludePaths,
diff --git a/source/RobotAPI/interface/components/ViewSelectionInterface.ice b/source/RobotAPI/interface/components/ViewSelectionInterface.ice
index 7521a30c834262116fbeaa8f6f13d0ce9e90d2c6..4d1c04ed4c36f79467051a4c7c1bda272a0bc99e 100755
--- a/source/RobotAPI/interface/components/ViewSelectionInterface.ice
+++ b/source/RobotAPI/interface/components/ViewSelectionInterface.ice
@@ -52,6 +52,20 @@ module armarx
         string source;
     };
 
+
+
+    ["cpp:virtual"]
+    class SaliencyMapBase
+    {
+        string name;
+
+        Ice::FloatSeq map;
+
+        TimestampBase validUntil;
+
+        TimestampBase timeAdded;
+    };
+
     sequence<ViewTargetBase> ViewTargetList;
 
     interface ViewSelectionInterface
@@ -63,7 +77,7 @@ module armarx
         void activateAutomaticViewSelection();
         void deactivateAutomaticViewSelection();
 
-        void updateSaliencyMap(string name, FloatSequence map);
+        void updateSaliencyMap(SaliencyMapBase map);
     };
 
 
diff --git a/source/RobotAPI/interface/core/RobotState.ice b/source/RobotAPI/interface/core/RobotState.ice
index 936fd47c8e5bc433d50ee06bbcd90ee454485f4c..9128e2d263c7f8674a893f8626dc98c1f4176193 100644
--- a/source/RobotAPI/interface/core/RobotState.ice
+++ b/source/RobotAPI/interface/core/RobotState.ice
@@ -118,12 +118,20 @@ module armarx
     };
 
 
+    interface RobotStateComponentInterface;
+
     /**
      * The SharedRobotInterface provides access to a limited amount of
      * VirtualRobot::Robot methods over the Ice network.
      */
     interface SharedRobotInterface extends SharedObjectInterface
     {
+        /**
+          * @return returns the RobotStateComponent this robot belongs to
+          */
+        ["cpp:const"] idempotent
+        RobotStateComponentInterface* getRobotStateComponent();
+
         SharedRobotNodeInterface* getRobotNode(string name);
         SharedRobotNodeInterface* getRootNode();
         bool hasRobotNode(string name);
@@ -143,6 +151,7 @@ module armarx
         void setGlobalPose(PoseBase globalPose);
         PoseBase getGlobalPose();
         NameValueMap getConfig();
+
     };
 
 
@@ -202,7 +211,7 @@ module armarx
          */
         ["cpp:const"]
         idempotent
-        StringList getArmarXPackages();
+        Ice::StringSeq getArmarXPackages();
 
         /**
          * @return The name of the robot represented by this component. Same as
diff --git a/source/RobotAPI/interface/units/InertialMeasurementUnit.ice b/source/RobotAPI/interface/units/InertialMeasurementUnit.ice
index 7d0d16e85a59509a3b1fda19cbbdcf2441662996..08afce9d608bc2c8d29d5ae2e0fe69d059307b61 100644
--- a/source/RobotAPI/interface/units/InertialMeasurementUnit.ice
+++ b/source/RobotAPI/interface/units/InertialMeasurementUnit.ice
@@ -48,10 +48,10 @@ module armarx
 	* @param acceleration Acceleration of IMU sensor device.
 	**/
     struct IMUData {
-        FloatSequence orientationQuaternion;
-        FloatSequence magneticRotation;
-        FloatSequence gyroscopeRotation; 
-        FloatSequence acceleration;
+        Ice::FloatSeq orientationQuaternion;
+        Ice::FloatSeq magneticRotation;
+        Ice::FloatSeq gyroscopeRotation; 
+        Ice::FloatSeq acceleration;
     };
 	/**
 	* Implements an interface to an InertialMeasurementUnit.
diff --git a/source/RobotAPI/interface/units/KinematicUnitInterface.ice b/source/RobotAPI/interface/units/KinematicUnitInterface.ice
index 00951473e9efd01ac4cf4ffb85c71fef38f0f5aa..eb6acb2d500d5fe224ebc5d4af091bcb5d06f386 100644
--- a/source/RobotAPI/interface/units/KinematicUnitInterface.ice
+++ b/source/RobotAPI/interface/units/KinematicUnitInterface.ice
@@ -121,7 +121,7 @@ module armarx
 	**/
     exception KinematicUnitNotOwnedException extends ResourceNotOwnedException
     {
-        StringSequence nodes;
+        Ice::StringSeq nodes;
     };
 	/**
 	* [NameValueMap] defined. This data container is mostly used to assign values to e.g. joints which are identified by name.
@@ -147,11 +147,11 @@ module armarx
          * The request only affects the active access, sensor values can always be read.
          *
          */
-        void requestJoints(StringSequence joints) throws KinematicUnitUnavailable;
+        void requestJoints(Ice::StringSeq joints) throws KinematicUnitUnavailable;
         /**
          * After usage joints should be released so that another component can get access to these joints.
          */
-        void releaseJoints(StringSequence joints) throws KinematicUnitNotOwnedException;
+        void releaseJoints(Ice::StringSeq joints) throws KinematicUnitNotOwnedException;
         
         /**
          * 
@@ -190,7 +190,7 @@ module armarx
          */
         ["cpp:const"]
         idempotent
-        StringList getArmarXPackages();
+        Ice::StringSeq getArmarXPackages();
 
         /**
          * @return The name of the robot used by this component.
diff --git a/source/RobotAPI/interface/visualization/DebugDrawerInterface.ice b/source/RobotAPI/interface/visualization/DebugDrawerInterface.ice
index 7322f721a7092a2b2baff60646fdd9e864a06a35..2496633043ddffc00fc676880c3a3a6bfa420fb3 100644
--- a/source/RobotAPI/interface/visualization/DebugDrawerInterface.ice
+++ b/source/RobotAPI/interface/visualization/DebugDrawerInterface.ice
@@ -324,7 +324,7 @@ module armarx
          * \brief Returns the names of all layers.
          * \return The names of all layers.
          */
-        StringSequence layerNames();
+        Ice::StringSeq layerNames();
 
         /*!
          * \brief Returns information about each layer.
diff --git a/source/RobotAPI/libraries/core/remoterobot/RemoteRobot.cpp b/source/RobotAPI/libraries/core/remoterobot/RemoteRobot.cpp
index b210594bb797e7d6ca247426d8c0b7a2fe7bd689..26b6a7e48d5810600a22f876002c9341404f8a27 100644
--- a/source/RobotAPI/libraries/core/remoterobot/RemoteRobot.cpp
+++ b/source/RobotAPI/libraries/core/remoterobot/RemoteRobot.cpp
@@ -15,9 +15,9 @@
  * 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    
- * @author     
- * @date       
+ * @package
+ * @author
+ * @date
  * @copyright  http://www.gnu.org/licenses/gpl-2.0.txt
  *             GNU General Public License
  */
@@ -382,7 +382,7 @@ namespace armarx
         }
         else
         {
-            StringList includePaths;
+            Ice::StringSeq includePaths;
             for (const std::string & projectName : packages)
             {
                 if (projectName.empty())
@@ -391,7 +391,7 @@ namespace armarx
                 }
 
                 CMakePackageFinder project(projectName);
-                StringList projectIncludePaths;
+                Ice::StringSeq projectIncludePaths;
                 auto pathsString = project.getDataDir();
                 ARMARX_DEBUG_S << "Data paths of ArmarX package " << projectName << ": " << pathsString;
                 boost::split(projectIncludePaths,