diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8697c7078213802928bea6f60bfe68652d240d56..64a14ad9d1985db3e2bcd1002638d6b05fc20f6d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -14,12 +14,13 @@ armarx_project(navigation NAMESPACE armarx)
 armarx_find_package(PUBLIC ArmarXGui)
 armarx_find_package(PUBLIC RobotAPI REQUIRED)
 armarx_find_package(PUBLIC MemoryX QUIET)
+armarx_find_package(PUBLIC VisionX QUIET)
 
 add_subdirectory(etc)
 add_subdirectory(external)
 
 # Required dependencies
-armarx_find_package(PUBLIC Ceres REQUIRED)
+armarx_find_package(PUBLIC Ceres QUIET)
 
 # Optional dependencies
 armarx_find_package(PUBLIC VTK)
diff --git a/etc/cmake/UseNavigation.cmake b/etc/cmake/Usearmarx_navigation.cmake
similarity index 100%
rename from etc/cmake/UseNavigation.cmake
rename to etc/cmake/Usearmarx_navigation.cmake
diff --git a/scenarios/NavigationSimulation/NavigationSimulation.scx b/scenarios/NavigationSimulation/NavigationSimulation.scx
index 5911720fd44c7f90af67793b9311eaefc35912ed..78b3140f1f5daf14f9e5c69b6207469fc0822d51 100644
--- a/scenarios/NavigationSimulation/NavigationSimulation.scx
+++ b/scenarios/NavigationSimulation/NavigationSimulation.scx
@@ -32,7 +32,6 @@
 	<application name="GraphNodePoseResolverApp" instance="" package="MemoryX" nodeName="" enabled="true" iceAutoRestart="false"/>
 	<application name="ImageSourceSelectionApp" instance="" package="VisionX" nodeName="" enabled="false" iceAutoRestart="false"/>
 	<application name="RobotUnitSimulationApp" instance="" package="ArmarXSimulation" nodeName="" enabled="true" iceAutoRestart="false"/>
-	<application name="LaserScannerSimulationApp" instance="" package="ArmarXSimulation" nodeName="" enabled="false" iceAutoRestart="false"/>
 	<application name="LaserScannerUnitObserverApp" instance="" package="RobotAPI" nodeName="" enabled="true" iceAutoRestart="false"/>
 	<application name="ImageProviderDynamicSimulationApp" instance="Roboception" package="ArmarXSimulation" nodeName="" enabled="false" iceAutoRestart="false"/>
 	<application name="ArmarXFileLoggerApp" instance="" package="ArmarXCore" nodeName="" enabled="true" iceAutoRestart="false"/>
diff --git a/scenarios/NavigationSimulation/config/ArVizStorage.cfg b/scenarios/NavigationSimulation/config/ArVizStorage.cfg
index 0dcbd8d5775b8c0f562bba62b5f2fe282e2da6d0..30b8ea5904d318cf689370e81d3d3a7c47d07a68 100644
--- a/scenarios/NavigationSimulation/config/ArVizStorage.cfg
+++ b/scenarios/NavigationSimulation/config/ArVizStorage.cfg
@@ -68,7 +68,7 @@
 # ArmarX.ArVizStorage.TopicName = ArVizTopic
 
 
-# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_USER_CONFIG_DIR is set, the cache path will be made relative to ARMARX_USER_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${HOME}/.armarx)
+# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_CONFIG_DIR is set, the cache path will be made relative to ARMARX_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${ARMARX_WORKSPACE}/armarx_config)
 #  Attributes:
 #  - Default:            mongo/.cache
 #  - Case sensitivity:   yes
diff --git a/scenarios/NavigationSimulation/config/ArmarXFileLoggerApp.cfg b/scenarios/NavigationSimulation/config/ArmarXFileLoggerApp.cfg
index 3496a4b14522230f9d76f3d5e8b41b2acd4bd103..9580ae62fd22db034079841ddd200974eb2e7d9e 100644
--- a/scenarios/NavigationSimulation/config/ArmarXFileLoggerApp.cfg
+++ b/scenarios/NavigationSimulation/config/ArmarXFileLoggerApp.cfg
@@ -93,7 +93,7 @@ ArmarX.ArmarXFileLogger.MaxLogFileCount = 10
 # ArmarX.ArmarXFileLogger.SplitByApplication = true
 
 
-# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_USER_CONFIG_DIR is set, the cache path will be made relative to ARMARX_USER_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${HOME}/.armarx)
+# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_CONFIG_DIR is set, the cache path will be made relative to ARMARX_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${ARMARX_WORKSPACE}/armarx_config)
 #  Attributes:
 #  - Default:            mongo/.cache
 #  - Case sensitivity:   yes
diff --git a/scenarios/NavigationSimulation/config/ArticulatedObjectLocalizerDynamicSimulation.cfg b/scenarios/NavigationSimulation/config/ArticulatedObjectLocalizerDynamicSimulation.cfg
index 0ba30f5f5c43e41e85f9b64546f009d62e75e0c7..a64fd58d4db84713169600f66cfedaa5816951db 100644
--- a/scenarios/NavigationSimulation/config/ArticulatedObjectLocalizerDynamicSimulation.cfg
+++ b/scenarios/NavigationSimulation/config/ArticulatedObjectLocalizerDynamicSimulation.cfg
@@ -141,7 +141,7 @@ ArmarX.ArticulatedObjectLocalizerDynamicSimulation.mem.obj.articulated.ProviderN
 # ArmarX.ArticulatedObjectLocalizerDynamicSimulation.tpc.sub.MemoryListener = MemoryUpdates
 
 
-# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_USER_CONFIG_DIR is set, the cache path will be made relative to ARMARX_USER_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${HOME}/.armarx)
+# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_CONFIG_DIR is set, the cache path will be made relative to ARMARX_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${ARMARX_WORKSPACE}/armarx_config)
 #  Attributes:
 #  - Default:            mongo/.cache
 #  - Case sensitivity:   yes
diff --git a/scenarios/NavigationSimulation/config/CommonStorage.cfg b/scenarios/NavigationSimulation/config/CommonStorage.cfg
index 105813cde2aa54176adf2814dc9a61fb6ff1f600..f46848f24fd034561ba9c181ec442f2d97ccd8de 100644
--- a/scenarios/NavigationSimulation/config/CommonStorage.cfg
+++ b/scenarios/NavigationSimulation/config/CommonStorage.cfg
@@ -18,7 +18,7 @@
 # MemoryX.ApplicationName = ""
 
 
-# MemoryX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_USER_CONFIG_DIR is set, the cache path will be made relative to ARMARX_USER_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${HOME}/.armarx)
+# MemoryX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_CONFIG_DIR is set, the cache path will be made relative to ARMARX_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${ARMARX_WORKSPACE}/armarx_config)
 #  Attributes:
 #  - Default:            mongo/.cache
 #  - Case sensitivity:   yes
diff --git a/scenarios/NavigationSimulation/config/ConditionHandler.cfg b/scenarios/NavigationSimulation/config/ConditionHandler.cfg
index 302cdee3ab28ea0ca7c5273768b1e704291b61ec..9e62c7b42fc4b1e251f77a2b90be1a6e9f44b021 100644
--- a/scenarios/NavigationSimulation/config/ConditionHandler.cfg
+++ b/scenarios/NavigationSimulation/config/ConditionHandler.cfg
@@ -18,7 +18,7 @@
 # ArmarX.ApplicationName = ""
 
 
-# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_USER_CONFIG_DIR is set, the cache path will be made relative to ARMARX_USER_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${HOME}/.armarx)
+# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_CONFIG_DIR is set, the cache path will be made relative to ARMARX_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${ARMARX_WORKSPACE}/armarx_config)
 #  Attributes:
 #  - Default:            mongo/.cache
 #  - Case sensitivity:   yes
diff --git a/scenarios/NavigationSimulation/config/DSObstacleAvoidance.cfg b/scenarios/NavigationSimulation/config/DSObstacleAvoidance.cfg
index 000f893254c7a76a848899943276400942583aaa..bee2c0ae58ba61f6383d8ebe15df61daccc685ba 100644
--- a/scenarios/NavigationSimulation/config/DSObstacleAvoidance.cfg
+++ b/scenarios/NavigationSimulation/config/DSObstacleAvoidance.cfg
@@ -2,290 +2,18 @@
 # DSObstacleAvoidance properties
 # ==================================================================
 
-# ArmarX.AdditionalPackages:  List of additional ArmarX packages which should be in the list of default packages. If you have custom packages, which should be found by the gui or other apps, specify them here. Comma separated List.
+# ArmarX.DSObstacleAvoidance.MinimumLoggingLevel:  
 #  Attributes:
-#  - Default:            Default value not mapped.
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.AdditionalPackages = Default value not mapped.
-
-
-# ArmarX.ApplicationName:  Application name
-#  Attributes:
-#  - Default:            ""
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.ApplicationName = ""
-
-
-# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_USER_CONFIG_DIR is set, the cache path will be made relative to ARMARX_USER_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${HOME}/.armarx)
-#  Attributes:
-#  - Default:            mongo/.cache
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.CachePath = mongo/.cache
-
-
-# ArmarX.Config:  Comma-separated list of configuration files 
-#  Attributes:
-#  - Default:            ""
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.Config = ""
-
-
-# ArmarX.DSObstacleAvoidance.ArVizTopicName:  Name of the ArViz topic
-#  Attributes:
-#  - Default:            ArVizTopic
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.DSObstacleAvoidance.ArVizTopicName = ArVizTopic
-
-
-# ArmarX.DSObstacleAvoidance.EnableProfiling:  enable profiler which is used for logging performance events
-#  Attributes:
-#  - Default:            false
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.DSObstacleAvoidance.EnableProfiling = false
-
-
-# ArmarX.DSObstacleAvoidance.MinimumLoggingLevel:  Local logging level only for this component
-#  Attributes:
-#  - Default:            Undefined
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {Debug, Error, Fatal, Important, Info, Undefined, Verbose, Warning}
 ArmarX.DSObstacleAvoidance.MinimumLoggingLevel = Info
 
 
-# ArmarX.DSObstacleAvoidance.ObjectName:  Name of IceGrid well-known object
+# ArmarX.DSObstacleAvoidance.ObjectName:  
 #  Attributes:
-#  - Default:            ""
-#  - Case sensitivity:   yes
-#  - Required:           no
 ArmarX.DSObstacleAvoidance.ObjectName = PlatformObstacleAvoidance
 
 
-# ArmarX.DSObstacleAvoidance.doa.agent_safety_margin:  Agent safety margin.
-#  Attributes:
-#  - Default:            0
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.DSObstacleAvoidance.doa.agent_safety_margin = 0
-
-
-# ArmarX.DSObstacleAvoidance.doa.aggregated:  Aggregated environment.
-#  Attributes:
-#  - Default:            true
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.DSObstacleAvoidance.doa.aggregated = true
-
-
-# ArmarX.DSObstacleAvoidance.doa.critical_distance:  Critical distance.
+# ArmarX.DSObstacleAvoidance.doa.critical_distance:  
 #  Attributes:
-#  - Default:            1
-#  - Case sensitivity:   yes
-#  - Required:           no
 ArmarX.DSObstacleAvoidance.doa.critical_distance = 1.1
 
 
-# ArmarX.DSObstacleAvoidance.doa.local_modulation:  Local modulation on/off.
-#  Attributes:
-#  - Default:            false
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.DSObstacleAvoidance.doa.local_modulation = false
-
-
-# ArmarX.DSObstacleAvoidance.doa.only_2d:  Only consider 2D.
-#  Attributes:
-#  - Default:            true
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.DSObstacleAvoidance.doa.only_2d = true
-
-
-# ArmarX.DSObstacleAvoidance.doa.planar_modulation:  Planar modulation on/off.
-#  Attributes:
-#  - Default:            false
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.DSObstacleAvoidance.doa.planar_modulation = false
-
-
-# ArmarX.DSObstacleAvoidance.doa.repulsion:  Repulsion on/off.
-#  Attributes:
-#  - Default:            true
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.DSObstacleAvoidance.doa.repulsion = true
-
-
-# ArmarX.DSObstacleAvoidance.doa.weight_power:  Weight power
-#  Attributes:
-#  - Default:            2
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.DSObstacleAvoidance.doa.weight_power = 2
-
-
-# ArmarX.DSObstacleAvoidance.load_obstacles_from:  Path to JSON file to load initial obstacles from.
-#  Attributes:
-#  - Default:            RobotAPI/obstacle_avoidance/r034_2d_scene_obstacles.json
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.DSObstacleAvoidance.load_obstacles_from = RobotAPI/obstacle_avoidance/r034_2d_scene_obstacles.json
-
-
-# ArmarX.DSObstacleAvoidance.udpate_watchdog:  Run environment update watchdog.
-#  Attributes:
-#  - Default:            true
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.DSObstacleAvoidance.udpate_watchdog = true
-
-
-# ArmarX.DSObstacleAvoidance.visualize:  Enable/disable visualization.
-#  Attributes:
-#  - Default:            true
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.DSObstacleAvoidance.visualize = true
-
-
-# ArmarX.DataPath:  Semicolon-separated search list for data files
-#  Attributes:
-#  - Default:            ""
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.DataPath = ""
-
-
-# ArmarX.DefaultPackages:  List of ArmarX packages which are accessible by default. Comma separated List. If you want to add your own packages and use all default ArmarX packages, use the property 'AdditionalPackages'.
-#  Attributes:
-#  - Default:            Default value not mapped.
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.DefaultPackages = Default value not mapped.
-
-
-# ArmarX.DependenciesConfig:  Path to the (usually generated) config file containing all data paths of all dependent projects. This property usually does not need to be edited.
-#  Attributes:
-#  - Default:            ./config/dependencies.cfg
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.DependenciesConfig = ./config/dependencies.cfg
-
-
-# ArmarX.DisableLogging:  Turn logging off in whole application
-#  Attributes:
-#  - Default:            false
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.DisableLogging = false
-
-
-# ArmarX.EnableProfiling:  Enable profiling of CPU load produced by this application
-#  Attributes:
-#  - Default:            false
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.EnableProfiling = false
-
-
-# ArmarX.LoadLibraries:  Libraries to load at start up of the application. Must be enabled by the Application with enableLibLoading(). Format: PackageName:LibraryName;... or /absolute/path/to/library;...
-#  Attributes:
-#  - Default:            ""
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.LoadLibraries = ""
-
-
-# ArmarX.LoggingGroup:  The logging group is transmitted with every ArmarX log message over Ice in order to group the message in the GUI.
-#  Attributes:
-#  - Default:            ""
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.LoggingGroup = ""
-
-
-# ArmarX.RedirectStdout:  Redirect std::cout and std::cerr to ArmarXLog
-#  Attributes:
-#  - Default:            true
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.RedirectStdout = true
-
-
-# ArmarX.RemoteHandlesDeletionTimeout:  The timeout (in ms) before a remote handle deletes the managed object after the use count reached 0. This time can be used by a client to increment the count again (may be required when transmitting remote handles)
-#  Attributes:
-#  - Default:            3000
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.RemoteHandlesDeletionTimeout = 3000
-
-
-# ArmarX.SecondsStartupDelay:  The startup will be delayed by this number of seconds (useful for debugging)
-#  Attributes:
-#  - Default:            0
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.SecondsStartupDelay = 0
-
-
-# ArmarX.StartDebuggerOnCrash:  If this application crashes (segmentation fault) qtcreator will attach to this process and start the debugger.
-#  Attributes:
-#  - Default:            false
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.StartDebuggerOnCrash = false
-
-
-# ArmarX.ThreadPoolSize:  Size of the ArmarX ThreadPool that is always running.
-#  Attributes:
-#  - Default:            1
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.ThreadPoolSize = 1
-
-
-# ArmarX.TopicSuffix:  Suffix appended to all topic names for outgoing topics. This is mainly used to direct all topics to another name for TopicReplaying purposes.
-#  Attributes:
-#  - Default:            ""
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.TopicSuffix = ""
-
-
-# ArmarX.UseTimeServer:  Enable using a global Timeserver (e.g. from ArmarXSimulator)
-#  Attributes:
-#  - Default:            false
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.UseTimeServer = false
-
-
-# ArmarX.Verbosity:  Global logging level for whole application
-#  Attributes:
-#  - Default:            Info
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {Debug, Error, Fatal, Important, Info, Undefined, Verbose, Warning}
-# ArmarX.Verbosity = Info
-
-
diff --git a/scenarios/NavigationSimulation/config/DebugDrawerToArVizApp.cfg b/scenarios/NavigationSimulation/config/DebugDrawerToArVizApp.cfg
index 855e5c5b1b94ddd463a6b0ad256fc813e5c5b42e..dd4ac924fc0b885fd6cb6a24eca0bd1e356790b1 100644
--- a/scenarios/NavigationSimulation/config/DebugDrawerToArVizApp.cfg
+++ b/scenarios/NavigationSimulation/config/DebugDrawerToArVizApp.cfg
@@ -18,7 +18,7 @@
 # ArmarX.ApplicationName = ""
 
 
-# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_USER_CONFIG_DIR is set, the cache path will be made relative to ARMARX_USER_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${HOME}/.armarx)
+# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_CONFIG_DIR is set, the cache path will be made relative to ARMARX_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${ARMARX_WORKSPACE}/armarx_config)
 #  Attributes:
 #  - Default:            mongo/.cache
 #  - Case sensitivity:   yes
diff --git a/scenarios/NavigationSimulation/config/DebugObserver.cfg b/scenarios/NavigationSimulation/config/DebugObserver.cfg
index 4a0b9dac036cd4d103efd7d1b718d508f285d85a..8dc7ead26b3bd2f7678b3b3e7a1b00c01213225d 100644
--- a/scenarios/NavigationSimulation/config/DebugObserver.cfg
+++ b/scenarios/NavigationSimulation/config/DebugObserver.cfg
@@ -18,7 +18,7 @@
 # ArmarX.ApplicationName = ""
 
 
-# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_USER_CONFIG_DIR is set, the cache path will be made relative to ARMARX_USER_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${HOME}/.armarx)
+# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_CONFIG_DIR is set, the cache path will be made relative to ARMARX_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${ARMARX_WORKSPACE}/armarx_config)
 #  Attributes:
 #  - Default:            mongo/.cache
 #  - Case sensitivity:   yes
diff --git a/scenarios/NavigationSimulation/config/DepthImageProviderDynamicSimulationApp.cfg b/scenarios/NavigationSimulation/config/DepthImageProviderDynamicSimulationApp.cfg
index 088210c48de00f59387fea3e456cf3393fb388b8..4a6195bbd133c99e1cee00a2ce10301a326a5fc9 100644
--- a/scenarios/NavigationSimulation/config/DepthImageProviderDynamicSimulationApp.cfg
+++ b/scenarios/NavigationSimulation/config/DepthImageProviderDynamicSimulationApp.cfg
@@ -18,7 +18,7 @@
 # ArmarX.ApplicationName = ""
 
 
-# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_USER_CONFIG_DIR is set, the cache path will be made relative to ARMARX_USER_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${HOME}/.armarx)
+# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_CONFIG_DIR is set, the cache path will be made relative to ARMARX_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${ARMARX_WORKSPACE}/armarx_config)
 #  Attributes:
 #  - Default:            mongo/.cache
 #  - Case sensitivity:   yes
diff --git a/scenarios/NavigationSimulation/config/ForceTorqueObserver.cfg b/scenarios/NavigationSimulation/config/ForceTorqueObserver.cfg
index fbcf94523e9ce180cebb5f13e15952da4128e15e..d1a41b1e928fcd22c27f6afa6738d97d19f1e512 100644
--- a/scenarios/NavigationSimulation/config/ForceTorqueObserver.cfg
+++ b/scenarios/NavigationSimulation/config/ForceTorqueObserver.cfg
@@ -18,7 +18,7 @@
 # ArmarX.ApplicationName = ""
 
 
-# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_USER_CONFIG_DIR is set, the cache path will be made relative to ARMARX_USER_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${HOME}/.armarx)
+# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_CONFIG_DIR is set, the cache path will be made relative to ARMARX_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${ARMARX_WORKSPACE}/armarx_config)
 #  Attributes:
 #  - Default:            mongo/.cache
 #  - Case sensitivity:   yes
diff --git a/scenarios/NavigationSimulation/config/GraphNodePoseResolverApp.cfg b/scenarios/NavigationSimulation/config/GraphNodePoseResolverApp.cfg
index d7b646bf887c19e47baea88e846eb8190a14a69b..684463ee4381ca581864384db63c951ebf05e7a9 100644
--- a/scenarios/NavigationSimulation/config/GraphNodePoseResolverApp.cfg
+++ b/scenarios/NavigationSimulation/config/GraphNodePoseResolverApp.cfg
@@ -18,7 +18,7 @@
 # ArmarX.ApplicationName = ""
 
 
-# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_USER_CONFIG_DIR is set, the cache path will be made relative to ARMARX_USER_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${HOME}/.armarx)
+# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_CONFIG_DIR is set, the cache path will be made relative to ARMARX_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${ARMARX_WORKSPACE}/armarx_config)
 #  Attributes:
 #  - Default:            mongo/.cache
 #  - Case sensitivity:   yes
diff --git a/scenarios/NavigationSimulation/config/HeadIKUnit.cfg b/scenarios/NavigationSimulation/config/HeadIKUnit.cfg
index 2c2c3be013f6218fc125b53bbcfa119f11203301..95f997914551eadeffa5d089d87b3011a91c4444 100644
--- a/scenarios/NavigationSimulation/config/HeadIKUnit.cfg
+++ b/scenarios/NavigationSimulation/config/HeadIKUnit.cfg
@@ -18,7 +18,7 @@
 # ArmarX.ApplicationName = ""
 
 
-# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_USER_CONFIG_DIR is set, the cache path will be made relative to ARMARX_USER_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${HOME}/.armarx)
+# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_CONFIG_DIR is set, the cache path will be made relative to ARMARX_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${ARMARX_WORKSPACE}/armarx_config)
 #  Attributes:
 #  - Default:            mongo/.cache
 #  - Case sensitivity:   yes
diff --git a/scenarios/NavigationSimulation/config/ImageProviderDynamicSimulationApp.FleaCameras.cfg b/scenarios/NavigationSimulation/config/ImageProviderDynamicSimulationApp.FleaCameras.cfg
index 50c3bdc62a9920fa6bf61c896f4c42b51fdd0eaa..f1a704b3ba9db635c8938f50b2a04ea48e670d84 100644
--- a/scenarios/NavigationSimulation/config/ImageProviderDynamicSimulationApp.FleaCameras.cfg
+++ b/scenarios/NavigationSimulation/config/ImageProviderDynamicSimulationApp.FleaCameras.cfg
@@ -18,7 +18,7 @@
 # ArmarX.ApplicationName = ""
 
 
-# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_USER_CONFIG_DIR is set, the cache path will be made relative to ARMARX_USER_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${HOME}/.armarx)
+# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_CONFIG_DIR is set, the cache path will be made relative to ARMARX_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${ARMARX_WORKSPACE}/armarx_config)
 #  Attributes:
 #  - Default:            mongo/.cache
 #  - Case sensitivity:   yes
diff --git a/scenarios/NavigationSimulation/config/ImageSourceSelectionApp.cfg b/scenarios/NavigationSimulation/config/ImageSourceSelectionApp.cfg
index ff5e50e265ef1024f0c1ffcd2b9e96979db1e794..821d9283a354b84824063b6766315cce2fa55f30 100644
--- a/scenarios/NavigationSimulation/config/ImageSourceSelectionApp.cfg
+++ b/scenarios/NavigationSimulation/config/ImageSourceSelectionApp.cfg
@@ -18,7 +18,7 @@
 # ArmarX.ApplicationName = ""
 
 
-# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_USER_CONFIG_DIR is set, the cache path will be made relative to ARMARX_USER_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${HOME}/.armarx)
+# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_CONFIG_DIR is set, the cache path will be made relative to ARMARX_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${ARMARX_WORKSPACE}/armarx_config)
 #  Attributes:
 #  - Default:            mongo/.cache
 #  - Case sensitivity:   yes
diff --git a/scenarios/NavigationSimulation/config/InertialMeasurementUnitObserverApp.cfg b/scenarios/NavigationSimulation/config/InertialMeasurementUnitObserverApp.cfg
index 1c3c7382b3a420a5a33dc950a0ac39b5ed07bbc3..ce4e40b0e975d94bf579b3c27ebf46f178d9d065 100644
--- a/scenarios/NavigationSimulation/config/InertialMeasurementUnitObserverApp.cfg
+++ b/scenarios/NavigationSimulation/config/InertialMeasurementUnitObserverApp.cfg
@@ -18,7 +18,7 @@
 # ArmarX.ApplicationName = ""
 
 
-# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_USER_CONFIG_DIR is set, the cache path will be made relative to ARMARX_USER_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${HOME}/.armarx)
+# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_CONFIG_DIR is set, the cache path will be made relative to ARMARX_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${ARMARX_WORKSPACE}/armarx_config)
 #  Attributes:
 #  - Default:            mongo/.cache
 #  - Case sensitivity:   yes
diff --git a/scenarios/NavigationSimulation/config/KinematicUnitObserver.cfg b/scenarios/NavigationSimulation/config/KinematicUnitObserver.cfg
index 15ae369367f8944d6521b48ebaf4f53d9421ae70..56c05cd8c79b30cf4e62ffdb46815207179cdd22 100644
--- a/scenarios/NavigationSimulation/config/KinematicUnitObserver.cfg
+++ b/scenarios/NavigationSimulation/config/KinematicUnitObserver.cfg
@@ -18,7 +18,7 @@
 # ArmarX.ApplicationName = ""
 
 
-# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_USER_CONFIG_DIR is set, the cache path will be made relative to ARMARX_USER_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${HOME}/.armarx)
+# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_CONFIG_DIR is set, the cache path will be made relative to ARMARX_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${ARMARX_WORKSPACE}/armarx_config)
 #  Attributes:
 #  - Default:            mongo/.cache
 #  - Case sensitivity:   yes
diff --git a/scenarios/NavigationSimulation/config/LaserScannerPointCloudProviderApp.cfg b/scenarios/NavigationSimulation/config/LaserScannerPointCloudProviderApp.cfg
index 4f0973f9aa111e4de9bed35b8948e072466ff168..17e38a3ab3b0c8fcff77c18822cf0e9a696e2044 100644
--- a/scenarios/NavigationSimulation/config/LaserScannerPointCloudProviderApp.cfg
+++ b/scenarios/NavigationSimulation/config/LaserScannerPointCloudProviderApp.cfg
@@ -18,7 +18,7 @@
 # ArmarX.ApplicationName = ""
 
 
-# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_USER_CONFIG_DIR is set, the cache path will be made relative to ARMARX_USER_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${HOME}/.armarx)
+# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_CONFIG_DIR is set, the cache path will be made relative to ARMARX_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${ARMARX_WORKSPACE}/armarx_config)
 #  Attributes:
 #  - Default:            mongo/.cache
 #  - Case sensitivity:   yes
diff --git a/scenarios/NavigationSimulation/config/LaserScannerSimulation.cfg b/scenarios/NavigationSimulation/config/LaserScannerSimulation.cfg
index 7fed6332700ca3e37f20260f18d0d5aa4cff65bb..2d8c22850b3efa95fb6cba8e34d5903a78a2993b 100644
--- a/scenarios/NavigationSimulation/config/LaserScannerSimulation.cfg
+++ b/scenarios/NavigationSimulation/config/LaserScannerSimulation.cfg
@@ -18,7 +18,7 @@
 # ArmarX.ApplicationName = ""
 
 
-# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_USER_CONFIG_DIR is set, the cache path will be made relative to ARMARX_USER_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${HOME}/.armarx)
+# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_CONFIG_DIR is set, the cache path will be made relative to ARMARX_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${ARMARX_WORKSPACE}/armarx_config)
 #  Attributes:
 #  - Default:            mongo/.cache
 #  - Case sensitivity:   yes
diff --git a/scenarios/NavigationSimulation/config/LaserScannerSimulationApp.cfg b/scenarios/NavigationSimulation/config/LaserScannerSimulationApp.cfg
index 263fc61ac527c2f0fe14f8dac9b4aed71e9781b9..628c105b334f966aa1d560e2a8953e8b0f0272d8 100644
--- a/scenarios/NavigationSimulation/config/LaserScannerSimulationApp.cfg
+++ b/scenarios/NavigationSimulation/config/LaserScannerSimulationApp.cfg
@@ -2,300 +2,8 @@
 # LaserScannerSimulationApp properties
 # ==================================================================
 
-# ArmarX.AdditionalPackages:  List of additional ArmarX packages which should be in the list of default packages. If you have custom packages, which should be found by the gui or other apps, specify them here. Comma separated List.
+# ArmarX.LaserScannerSimulation.Frames:  
 #  Attributes:
-#  - Default:            Default value not mapped.
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.AdditionalPackages = Default value not mapped.
-
-
-# ArmarX.ApplicationName:  Application name
-#  Attributes:
-#  - Default:            ""
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.ApplicationName = ""
-
-
-# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_USER_CONFIG_DIR is set, the cache path will be made relative to ARMARX_USER_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${HOME}/.armarx)
-#  Attributes:
-#  - Default:            mongo/.cache
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.CachePath = mongo/.cache
-
-
-# ArmarX.Config:  Comma-separated list of configuration files 
-#  Attributes:
-#  - Default:            ""
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.Config = ""
-
-
-# ArmarX.DataPath:  Semicolon-separated search list for data files
-#  Attributes:
-#  - Default:            ""
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.DataPath = ""
-
-
-# ArmarX.DefaultPackages:  List of ArmarX packages which are accessible by default. Comma separated List. If you want to add your own packages and use all default ArmarX packages, use the property 'AdditionalPackages'.
-#  Attributes:
-#  - Default:            Default value not mapped.
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.DefaultPackages = Default value not mapped.
-
-
-# ArmarX.DependenciesConfig:  Path to the (usually generated) config file containing all data paths of all dependent projects. This property usually does not need to be edited.
-#  Attributes:
-#  - Default:            ./config/dependencies.cfg
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.DependenciesConfig = ./config/dependencies.cfg
-
-
-# ArmarX.DisableLogging:  Turn logging off in whole application
-#  Attributes:
-#  - Default:            false
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.DisableLogging = false
-
-
-# ArmarX.EnableProfiling:  Enable profiling of CPU load produced by this application
-#  Attributes:
-#  - Default:            false
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.EnableProfiling = false
-
-
-# ArmarX.LaserScannerSimulation.ArVizTopicName:  Name of the ArViz topic
-#  Attributes:
-#  - Default:            ArVizTopic
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.LaserScannerSimulation.ArVizTopicName = ArVizTopic
-
-
-# ArmarX.LaserScannerSimulation.DebugDrawerTopicName:  Visualize the results here.
-#  Attributes:
-#  - Default:            DebugDrawerUpdates
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.LaserScannerSimulation.DebugDrawerTopicName = DebugDrawerUpdates
-
-
-# ArmarX.LaserScannerSimulation.Devices:  Name of the devices to simulate (e.g. Device1,Device2,Device3)
-#  Attributes:
-#  - Default:            127.0.0.1
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.LaserScannerSimulation.Devices = 127.0.0.1
-
-
-# ArmarX.LaserScannerSimulation.EnableProfiling:  enable profiler which is used for logging performance events
-#  Attributes:
-#  - Default:            false
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.LaserScannerSimulation.EnableProfiling = false
-
-
-# ArmarX.LaserScannerSimulation.Frames:  Name of the frames to attach the sensor to (e.g. Node1,Node2,Node3)
-#  Attributes:
-#  - Default:            LaserScanner_1
-#  - Case sensitivity:   yes
-#  - Required:           no
 ArmarX.LaserScannerSimulation.Frames = LaserScannerFront,LaserScannerBack
 
 
-# ArmarX.LaserScannerSimulation.GridCellSize:  Size of the grid cells used to generate the occupancy map in mm
-#  Attributes:
-#  - Default:            20
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.LaserScannerSimulation.GridCellSize = 20
-
-
-# ArmarX.LaserScannerSimulation.LaserScannerTopicName:  Name of the laser scan topic.
-#  Attributes:
-#  - Default:            LaserScans
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.LaserScannerSimulation.LaserScannerTopicName = LaserScans
-
-
-# ArmarX.LaserScannerSimulation.MaxAngles:  Maxiumum angles to be reported in rad (e.g 2.35,1.27,3.14)
-#  Attributes:
-#  - Default:            +2.3561945
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.LaserScannerSimulation.MaxAngles = +2.3561945
-
-
-# ArmarX.LaserScannerSimulation.MinAngles:  Minumum angles to be reported in rad (e.g -2.35,-1.27,0)
-#  Attributes:
-#  - Default:            -2.3561945
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.LaserScannerSimulation.MinAngles = -2.3561945
-
-
-# ArmarX.LaserScannerSimulation.MinimumLoggingLevel:  Local logging level only for this component
-#  Attributes:
-#  - Default:            Undefined
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {Debug, Error, Fatal, Important, Info, Undefined, Verbose, Warning}
-# ArmarX.LaserScannerSimulation.MinimumLoggingLevel = Undefined
-
-
-# ArmarX.LaserScannerSimulation.NoiseStdDev:  Noise is added to the distance of single steps (e.g 40,30,20)
-#  Attributes:
-#  - Default:            40.0
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.LaserScannerSimulation.NoiseStdDev = 40.0
-
-
-# ArmarX.LaserScannerSimulation.ObjectName:  Name of IceGrid well-known object
-#  Attributes:
-#  - Default:            ""
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.LaserScannerSimulation.ObjectName = ""
-
-
-# ArmarX.LaserScannerSimulation.ReportVisuTopicName:  The topic on which the visualization updates are published.
-#  Attributes:
-#  - Default:            SimulatorVisuUpdates
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.LaserScannerSimulation.ReportVisuTopicName = SimulatorVisuUpdates
-
-
-# ArmarX.LaserScannerSimulation.RobotStateComponentName:  Name of the RobotStateComponent to use.
-#  Attributes:
-#  - Default:            RobotStateComponent
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.LaserScannerSimulation.RobotStateComponentName = RobotStateComponent
-
-
-# ArmarX.LaserScannerSimulation.Steps:  Number of single steps (angle, distance) per scan (e.g 1081,360,270)
-#  Attributes:
-#  - Default:            1081
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.LaserScannerSimulation.Steps = 1081
-
-
-# ArmarX.LaserScannerSimulation.TopicReplayerDummy:  Enable to serve the purpose of a topic replayer dummy
-#  Attributes:
-#  - Default:            false
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.LaserScannerSimulation.TopicReplayerDummy = false
-
-
-# ArmarX.LaserScannerSimulation.UpdatePeriod:  Update period for laser scans in ms
-#  Attributes:
-#  - Default:            25
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.LaserScannerSimulation.UpdatePeriod = 25
-
-
-# ArmarX.LoadLibraries:  Libraries to load at start up of the application. Must be enabled by the Application with enableLibLoading(). Format: PackageName:LibraryName;... or /absolute/path/to/library;...
-#  Attributes:
-#  - Default:            ""
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.LoadLibraries = ""
-
-
-# ArmarX.LoggingGroup:  The logging group is transmitted with every ArmarX log message over Ice in order to group the message in the GUI.
-#  Attributes:
-#  - Default:            ""
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.LoggingGroup = ""
-
-
-# ArmarX.RedirectStdout:  Redirect std::cout and std::cerr to ArmarXLog
-#  Attributes:
-#  - Default:            true
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.RedirectStdout = true
-
-
-# ArmarX.RemoteHandlesDeletionTimeout:  The timeout (in ms) before a remote handle deletes the managed object after the use count reached 0. This time can be used by a client to increment the count again (may be required when transmitting remote handles)
-#  Attributes:
-#  - Default:            3000
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.RemoteHandlesDeletionTimeout = 3000
-
-
-# ArmarX.SecondsStartupDelay:  The startup will be delayed by this number of seconds (useful for debugging)
-#  Attributes:
-#  - Default:            0
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.SecondsStartupDelay = 0
-
-
-# ArmarX.StartDebuggerOnCrash:  If this application crashes (segmentation fault) qtcreator will attach to this process and start the debugger.
-#  Attributes:
-#  - Default:            false
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.StartDebuggerOnCrash = false
-
-
-# ArmarX.ThreadPoolSize:  Size of the ArmarX ThreadPool that is always running.
-#  Attributes:
-#  - Default:            1
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.ThreadPoolSize = 1
-
-
-# ArmarX.TopicSuffix:  Suffix appended to all topic names for outgoing topics. This is mainly used to direct all topics to another name for TopicReplaying purposes.
-#  Attributes:
-#  - Default:            ""
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.TopicSuffix = ""
-
-
-# ArmarX.UseTimeServer:  Enable using a global Timeserver (e.g. from ArmarXSimulator)
-#  Attributes:
-#  - Default:            false
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.UseTimeServer = false
-
-
-# ArmarX.Verbosity:  Global logging level for whole application
-#  Attributes:
-#  - Default:            Info
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {Debug, Error, Fatal, Important, Info, Undefined, Verbose, Warning}
-# ArmarX.Verbosity = Info
-
-
diff --git a/scenarios/NavigationSimulation/config/LaserScannerUnitObserverApp.cfg b/scenarios/NavigationSimulation/config/LaserScannerUnitObserverApp.cfg
index 18521b1447699a031af7d198c2de4138876681b0..04e3f5637379f9dfdaec5521d008164bbeb804d9 100644
--- a/scenarios/NavigationSimulation/config/LaserScannerUnitObserverApp.cfg
+++ b/scenarios/NavigationSimulation/config/LaserScannerUnitObserverApp.cfg
@@ -18,7 +18,7 @@
 # ArmarX.ApplicationName = ""
 
 
-# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_USER_CONFIG_DIR is set, the cache path will be made relative to ARMARX_USER_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${HOME}/.armarx)
+# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_CONFIG_DIR is set, the cache path will be made relative to ARMARX_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${ARMARX_WORKSPACE}/armarx_config)
 #  Attributes:
 #  - Default:            mongo/.cache
 #  - Case sensitivity:   yes
diff --git a/scenarios/NavigationSimulation/config/LongtermMemory.cfg b/scenarios/NavigationSimulation/config/LongtermMemory.cfg
index 085f979b38ad2e110ff42b0cf56741e369caccb8..e323230d5da82a370611eec3fad6358f913ce064 100644
--- a/scenarios/NavigationSimulation/config/LongtermMemory.cfg
+++ b/scenarios/NavigationSimulation/config/LongtermMemory.cfg
@@ -18,7 +18,7 @@
 # MemoryX.ApplicationName = ""
 
 
-# MemoryX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_USER_CONFIG_DIR is set, the cache path will be made relative to ARMARX_USER_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${HOME}/.armarx)
+# MemoryX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_CONFIG_DIR is set, the cache path will be made relative to ARMARX_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${ARMARX_WORKSPACE}/armarx_config)
 #  Attributes:
 #  - Default:            mongo/.cache
 #  - Case sensitivity:   yes
diff --git a/scenarios/NavigationSimulation/config/MemoryNameSystem.cfg b/scenarios/NavigationSimulation/config/MemoryNameSystem.cfg
index 7dd22218243ca4f9e67e843da8b42916f3b8568a..b8bc70a66ca7f32a628886ad1bf13e373f9750d3 100644
--- a/scenarios/NavigationSimulation/config/MemoryNameSystem.cfg
+++ b/scenarios/NavigationSimulation/config/MemoryNameSystem.cfg
@@ -18,7 +18,7 @@
 # ArmarX.ApplicationName = ""
 
 
-# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_USER_CONFIG_DIR is set, the cache path will be made relative to ARMARX_USER_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${HOME}/.armarx)
+# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_CONFIG_DIR is set, the cache path will be made relative to ARMARX_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${ARMARX_WORKSPACE}/armarx_config)
 #  Attributes:
 #  - Default:            mongo/.cache
 #  - Case sensitivity:   yes
diff --git a/scenarios/NavigationSimulation/config/MotionPlanningServerApp.cfg b/scenarios/NavigationSimulation/config/MotionPlanningServerApp.cfg
index d9c4f96078092f0ac9d4edf223420d4d34d66edb..df6b50c407ea7e7a17149a9c30d17800801c612b 100644
--- a/scenarios/NavigationSimulation/config/MotionPlanningServerApp.cfg
+++ b/scenarios/NavigationSimulation/config/MotionPlanningServerApp.cfg
@@ -18,7 +18,7 @@
 # ArmarX.ApplicationName = ""
 
 
-# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_USER_CONFIG_DIR is set, the cache path will be made relative to ARMARX_USER_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${HOME}/.armarx)
+# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_CONFIG_DIR is set, the cache path will be made relative to ARMARX_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${ARMARX_WORKSPACE}/armarx_config)
 #  Attributes:
 #  - Default:            mongo/.cache
 #  - Case sensitivity:   yes
diff --git a/scenarios/NavigationSimulation/config/ObjectLocalizationDynamicSimulationApp.SegmentableRecognition.cfg b/scenarios/NavigationSimulation/config/ObjectLocalizationDynamicSimulationApp.SegmentableRecognition.cfg
index def44fc7febd375dc016f4839ceb6ca34a645d33..656176c5005708f330fc579c55698dca72e03074 100644
--- a/scenarios/NavigationSimulation/config/ObjectLocalizationDynamicSimulationApp.SegmentableRecognition.cfg
+++ b/scenarios/NavigationSimulation/config/ObjectLocalizationDynamicSimulationApp.SegmentableRecognition.cfg
@@ -18,7 +18,7 @@
 ArmarX.ApplicationName = SegmentableObjectRecognitionApp
 
 
-# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_USER_CONFIG_DIR is set, the cache path will be made relative to ARMARX_USER_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${HOME}/.armarx)
+# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_CONFIG_DIR is set, the cache path will be made relative to ARMARX_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${ARMARX_WORKSPACE}/armarx_config)
 #  Attributes:
 #  - Default:            mongo/.cache
 #  - Case sensitivity:   yes
diff --git a/scenarios/NavigationSimulation/config/ObjectLocalizationDynamicSimulationApp.TexturedRecognition.cfg b/scenarios/NavigationSimulation/config/ObjectLocalizationDynamicSimulationApp.TexturedRecognition.cfg
index 09ea1025fd4a2b03acb687f07e8375f9777de04f..0341588b2fb15b7fa74e8c919ed01e2543ab46c2 100644
--- a/scenarios/NavigationSimulation/config/ObjectLocalizationDynamicSimulationApp.TexturedRecognition.cfg
+++ b/scenarios/NavigationSimulation/config/ObjectLocalizationDynamicSimulationApp.TexturedRecognition.cfg
@@ -18,7 +18,7 @@
 ArmarX.ApplicationName = TexturedObjectRecognitionApp
 
 
-# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_USER_CONFIG_DIR is set, the cache path will be made relative to ARMARX_USER_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${HOME}/.armarx)
+# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_CONFIG_DIR is set, the cache path will be made relative to ARMARX_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${ARMARX_WORKSPACE}/armarx_config)
 #  Attributes:
 #  - Default:            mongo/.cache
 #  - Case sensitivity:   yes
diff --git a/scenarios/NavigationSimulation/config/ObjectLocalizationSaliencyApp.cfg b/scenarios/NavigationSimulation/config/ObjectLocalizationSaliencyApp.cfg
index 1d90187351bc44a5c7212e9a0376b2c27ca9b7d8..d70b5b3679313dcb7efaeb19ee1f5d7504f6f030 100644
--- a/scenarios/NavigationSimulation/config/ObjectLocalizationSaliencyApp.cfg
+++ b/scenarios/NavigationSimulation/config/ObjectLocalizationSaliencyApp.cfg
@@ -18,7 +18,7 @@
 # ArmarX.ApplicationName = ""
 
 
-# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_USER_CONFIG_DIR is set, the cache path will be made relative to ARMARX_USER_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${HOME}/.armarx)
+# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_CONFIG_DIR is set, the cache path will be made relative to ARMARX_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${ARMARX_WORKSPACE}/armarx_config)
 #  Attributes:
 #  - Default:            mongo/.cache
 #  - Case sensitivity:   yes
diff --git a/scenarios/NavigationSimulation/config/ObjectMemory.cfg b/scenarios/NavigationSimulation/config/ObjectMemory.cfg
index 361cd5cbf3088d4cf79dd4957022a7648b1f6800..8b9a042fee70b0ecf6544fbf22c6aef9efc54c30 100644
--- a/scenarios/NavigationSimulation/config/ObjectMemory.cfg
+++ b/scenarios/NavigationSimulation/config/ObjectMemory.cfg
@@ -18,7 +18,7 @@
 # ArmarX.ApplicationName = ""
 
 
-# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_USER_CONFIG_DIR is set, the cache path will be made relative to ARMARX_USER_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${HOME}/.armarx)
+# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_CONFIG_DIR is set, the cache path will be made relative to ARMARX_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${ARMARX_WORKSPACE}/armarx_config)
 #  Attributes:
 #  - Default:            mongo/.cache
 #  - Case sensitivity:   yes
@@ -150,14 +150,6 @@ ArmarX.ObjectMemory.MinimumLoggingLevel = Debug
 # ArmarX.ObjectMemory.cmp.KinematicUnitObserverName = KinematicUnitObserver
 
 
-# ArmarX.ObjectMemory.ltm.00_enabled:  No Description
-#  Attributes:
-#  - Default:            false
-#  - Case sensitivity:   no
-#  - Required:           no
-ArmarX.ObjectMemory.ltm.00_enabled = false
-
-
 # ArmarX.ObjectMemory.mem.MemoryName:  Name of this memory server.
 #  Attributes:
 #  - Default:            Object
@@ -213,7 +205,7 @@ ArmarX.ObjectMemory.ltm.00_enabled = false
 #  - Case sensitivity:   yes
 #  - Required:           no
 #  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.ObjectMemory.mem.cls.Floor.Show = true
+ArmarX.ObjectMemory.mem.cls.Floor.Show = 0
 
 
 # ArmarX.ObjectMemory.mem.cls.LoadFromObjectsPackage:  If true, load the objects from the objects package on startup.
@@ -372,7 +364,7 @@ ArmarX.ObjectMemory.ltm.00_enabled = false
 #  - Default:            ""
 #  - Case sensitivity:   yes
 #  - Required:           no
-ArmarX.ObjectMemory.mem.inst.scene.12_SnapshotToLoad = R003
+ArmarX.ObjectMemory.mem.inst.scene.12_SnapshotToLoad = R003.json
 
 
 # ArmarX.ObjectMemory.mem.inst.seg.CoreSegmentName:  Name of the Instance core segment.
diff --git a/scenarios/NavigationSimulation/config/ObjectMemoryObserver.cfg b/scenarios/NavigationSimulation/config/ObjectMemoryObserver.cfg
index 6f4fc4306be2664c94e508e44fb32b6005ae783e..1af634c1c2e6427fee665f1eed15aa33227696d9 100644
--- a/scenarios/NavigationSimulation/config/ObjectMemoryObserver.cfg
+++ b/scenarios/NavigationSimulation/config/ObjectMemoryObserver.cfg
@@ -18,7 +18,7 @@
 # MemoryX.ApplicationName = ""
 
 
-# MemoryX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_USER_CONFIG_DIR is set, the cache path will be made relative to ARMARX_USER_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${HOME}/.armarx)
+# MemoryX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_CONFIG_DIR is set, the cache path will be made relative to ARMARX_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${ARMARX_WORKSPACE}/armarx_config)
 #  Attributes:
 #  - Default:            mongo/.cache
 #  - Case sensitivity:   yes
diff --git a/scenarios/NavigationSimulation/config/ObstacleAvoidingPlatformUnit.cfg b/scenarios/NavigationSimulation/config/ObstacleAvoidingPlatformUnit.cfg
index 39d4885f6528f47e13899a68f1948caec345aeeb..19d5c0125c3548d7f2c01d8879a9f14245844b2f 100644
--- a/scenarios/NavigationSimulation/config/ObstacleAvoidingPlatformUnit.cfg
+++ b/scenarios/NavigationSimulation/config/ObstacleAvoidingPlatformUnit.cfg
@@ -18,7 +18,7 @@
 # ArmarX.ApplicationName = ""
 
 
-# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_USER_CONFIG_DIR is set, the cache path will be made relative to ARMARX_USER_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${HOME}/.armarx)
+# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_CONFIG_DIR is set, the cache path will be made relative to ARMARX_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${ARMARX_WORKSPACE}/armarx_config)
 #  Attributes:
 #  - Default:            mongo/.cache
 #  - Case sensitivity:   yes
diff --git a/scenarios/NavigationSimulation/config/PlatformUnitObserver.cfg b/scenarios/NavigationSimulation/config/PlatformUnitObserver.cfg
index 5eee67277fdcdf334fd1f9b3d18aab4b12c2e296..796a3008bcff8a0bc25591ed0d13f90766ab670c 100644
--- a/scenarios/NavigationSimulation/config/PlatformUnitObserver.cfg
+++ b/scenarios/NavigationSimulation/config/PlatformUnitObserver.cfg
@@ -18,7 +18,7 @@
 # ArmarX.ApplicationName = ""
 
 
-# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_USER_CONFIG_DIR is set, the cache path will be made relative to ARMARX_USER_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${HOME}/.armarx)
+# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_CONFIG_DIR is set, the cache path will be made relative to ARMARX_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${ARMARX_WORKSPACE}/armarx_config)
 #  Attributes:
 #  - Default:            mongo/.cache
 #  - Case sensitivity:   yes
diff --git a/scenarios/NavigationSimulation/config/PriorKnowledge.cfg b/scenarios/NavigationSimulation/config/PriorKnowledge.cfg
index cc0f8b60cb33cae4b7fb8ed9e1aaede039d3ee17..c44a2b83dc96d79b137906e8dd978541b343c8c2 100644
--- a/scenarios/NavigationSimulation/config/PriorKnowledge.cfg
+++ b/scenarios/NavigationSimulation/config/PriorKnowledge.cfg
@@ -18,7 +18,7 @@
 # MemoryX.ApplicationName = ""
 
 
-# MemoryX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_USER_CONFIG_DIR is set, the cache path will be made relative to ARMARX_USER_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${HOME}/.armarx)
+# MemoryX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_CONFIG_DIR is set, the cache path will be made relative to ARMARX_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${ARMARX_WORKSPACE}/armarx_config)
 #  Attributes:
 #  - Default:            mongo/.cache
 #  - Case sensitivity:   yes
diff --git a/scenarios/NavigationSimulation/config/ProfilerObserverApp.cfg b/scenarios/NavigationSimulation/config/ProfilerObserverApp.cfg
index 4105a93f7c3d3e5253443d86ba4d9dccb6efd35a..9dad4369b686c9b5d844c1f7e7317f6ab67beb95 100644
--- a/scenarios/NavigationSimulation/config/ProfilerObserverApp.cfg
+++ b/scenarios/NavigationSimulation/config/ProfilerObserverApp.cfg
@@ -18,7 +18,7 @@
 # ArmarX.ApplicationName = ""
 
 
-# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_USER_CONFIG_DIR is set, the cache path will be made relative to ARMARX_USER_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${HOME}/.armarx)
+# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_CONFIG_DIR is set, the cache path will be made relative to ARMARX_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${ARMARX_WORKSPACE}/armarx_config)
 #  Attributes:
 #  - Default:            mongo/.cache
 #  - Case sensitivity:   yes
diff --git a/scenarios/NavigationSimulation/config/RemoteGuiProviderApp.cfg b/scenarios/NavigationSimulation/config/RemoteGuiProviderApp.cfg
index 4fd690cefd94559b207493cf40e346a3e47f3b12..4b6abea40d72afd7d313ee47a9b191f3b26de30d 100644
--- a/scenarios/NavigationSimulation/config/RemoteGuiProviderApp.cfg
+++ b/scenarios/NavigationSimulation/config/RemoteGuiProviderApp.cfg
@@ -18,7 +18,7 @@
 # ArmarX.ApplicationName = ""
 
 
-# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_USER_CONFIG_DIR is set, the cache path will be made relative to ARMARX_USER_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${HOME}/.armarx)
+# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_CONFIG_DIR is set, the cache path will be made relative to ARMARX_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${ARMARX_WORKSPACE}/armarx_config)
 #  Attributes:
 #  - Default:            mongo/.cache
 #  - Case sensitivity:   yes
diff --git a/scenarios/NavigationSimulation/config/RobotHandLocalizationDynamicSimulationApp.cfg b/scenarios/NavigationSimulation/config/RobotHandLocalizationDynamicSimulationApp.cfg
index c0a8691e3b5e904382a8137072db01f051aca37d..a49f43fbd05b31d4e1621a91474828990b22a130 100644
--- a/scenarios/NavigationSimulation/config/RobotHandLocalizationDynamicSimulationApp.cfg
+++ b/scenarios/NavigationSimulation/config/RobotHandLocalizationDynamicSimulationApp.cfg
@@ -18,7 +18,7 @@
 # ArmarX.ApplicationName = ""
 
 
-# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_USER_CONFIG_DIR is set, the cache path will be made relative to ARMARX_USER_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${HOME}/.armarx)
+# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_CONFIG_DIR is set, the cache path will be made relative to ARMARX_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${ARMARX_WORKSPACE}/armarx_config)
 #  Attributes:
 #  - Default:            mongo/.cache
 #  - Case sensitivity:   yes
diff --git a/scenarios/NavigationSimulation/config/RobotIK.cfg b/scenarios/NavigationSimulation/config/RobotIK.cfg
index 999300ae1f80678469dd73074c90bd5a0842427e..ad819e8db4073191e2e0abcf860d9c22d5773ff6 100644
--- a/scenarios/NavigationSimulation/config/RobotIK.cfg
+++ b/scenarios/NavigationSimulation/config/RobotIK.cfg
@@ -18,7 +18,7 @@
 # ArmarX.ApplicationName = ""
 
 
-# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_USER_CONFIG_DIR is set, the cache path will be made relative to ARMARX_USER_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${HOME}/.armarx)
+# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_CONFIG_DIR is set, the cache path will be made relative to ARMARX_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${ARMARX_WORKSPACE}/armarx_config)
 #  Attributes:
 #  - Default:            mongo/.cache
 #  - Case sensitivity:   yes
diff --git a/scenarios/NavigationSimulation/config/RobotStateComponent.cfg b/scenarios/NavigationSimulation/config/RobotStateComponent.cfg
index eca66851ed6d1be84948123294ab120125b12370..646407a22b0c8004a63731401a81d4b81b41ceae 100644
--- a/scenarios/NavigationSimulation/config/RobotStateComponent.cfg
+++ b/scenarios/NavigationSimulation/config/RobotStateComponent.cfg
@@ -18,7 +18,7 @@
 # ArmarX.ApplicationName = ""
 
 
-# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_USER_CONFIG_DIR is set, the cache path will be made relative to ARMARX_USER_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${HOME}/.armarx)
+# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_CONFIG_DIR is set, the cache path will be made relative to ARMARX_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${ARMARX_WORKSPACE}/armarx_config)
 #  Attributes:
 #  - Default:            mongo/.cache
 #  - Case sensitivity:   yes
diff --git a/scenarios/NavigationSimulation/config/RobotToArVizApp.cfg b/scenarios/NavigationSimulation/config/RobotToArVizApp.cfg
index b023833a9d18ac3f4c1d92911b29ad1f8699a22c..b33276fe2dc50c8d6eadcb7beb004710f336e825 100644
--- a/scenarios/NavigationSimulation/config/RobotToArVizApp.cfg
+++ b/scenarios/NavigationSimulation/config/RobotToArVizApp.cfg
@@ -18,7 +18,7 @@
 # ArmarX.ApplicationName = ""
 
 
-# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_USER_CONFIG_DIR is set, the cache path will be made relative to ARMARX_USER_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${HOME}/.armarx)
+# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_CONFIG_DIR is set, the cache path will be made relative to ARMARX_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${ARMARX_WORKSPACE}/armarx_config)
 #  Attributes:
 #  - Default:            mongo/.cache
 #  - Case sensitivity:   yes
diff --git a/scenarios/NavigationSimulation/config/SimulatorApp.cfg b/scenarios/NavigationSimulation/config/SimulatorApp.cfg
index 4afe10c822b62862bad8e69126298c3d90bff9b7..628a4f5e39ef3f303aec73460334c9aac7df858d 100644
--- a/scenarios/NavigationSimulation/config/SimulatorApp.cfg
+++ b/scenarios/NavigationSimulation/config/SimulatorApp.cfg
@@ -18,7 +18,7 @@
 # ArmarX.ApplicationName = ""
 
 
-# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_USER_CONFIG_DIR is set, the cache path will be made relative to ARMARX_USER_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${HOME}/.armarx)
+# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_CONFIG_DIR is set, the cache path will be made relative to ARMARX_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${ARMARX_WORKSPACE}/armarx_config)
 #  Attributes:
 #  - Default:            mongo/.cache
 #  - Case sensitivity:   yes
@@ -289,7 +289,7 @@ ArmarX.Simulator.InitialRobotConfig = ArmR5_Elb1:1.57, ArmL5_Elb1:1.57
 #  - Default:            0
 #  - Case sensitivity:   yes
 #  - Required:           no
-ArmarX.Simulator.InitialRobotPose.x = 1300
+ArmarX.Simulator.InitialRobotPose.x = 0
 
 
 # ArmarX.Simulator.InitialRobotPose.x_0:  x component of initial robot position (mm)
@@ -321,7 +321,7 @@ ArmarX.Simulator.InitialRobotPose.x = 1300
 #  - Default:            0
 #  - Case sensitivity:   yes
 #  - Required:           no
-ArmarX.Simulator.InitialRobotPose.y = -300
+ArmarX.Simulator.InitialRobotPose.y = 0
 
 
 # ArmarX.Simulator.InitialRobotPose.y_0:  y component of initial robot position (mm)
@@ -353,7 +353,7 @@ ArmarX.Simulator.InitialRobotPose.y = -300
 #  - Default:            0
 #  - Case sensitivity:   yes
 #  - Required:           no
-ArmarX.Simulator.InitialRobotPose.yaw = 1.57
+# ArmarX.Simulator.InitialRobotPose.yaw = 0
 
 
 # ArmarX.Simulator.InitialRobotPose.yaw_0:  Initial robot pose: yaw component of RPY angles (radian)
diff --git a/scenarios/NavigationSimulation/config/SimulatorViewerApp.cfg b/scenarios/NavigationSimulation/config/SimulatorViewerApp.cfg
index c3260b69dd76bfb508e60123989ba3349eac96af..d514a4850f0959586c7066878a54283e396ec78b 100644
--- a/scenarios/NavigationSimulation/config/SimulatorViewerApp.cfg
+++ b/scenarios/NavigationSimulation/config/SimulatorViewerApp.cfg
@@ -18,7 +18,7 @@
 # ArmarX.ApplicationName = ""
 
 
-# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_USER_CONFIG_DIR is set, the cache path will be made relative to ARMARX_USER_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${HOME}/.armarx)
+# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_CONFIG_DIR is set, the cache path will be made relative to ARMARX_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${ARMARX_WORKSPACE}/armarx_config)
 #  Attributes:
 #  - Default:            mongo/.cache
 #  - Case sensitivity:   yes
diff --git a/scenarios/NavigationSimulation/config/SystemObserver.cfg b/scenarios/NavigationSimulation/config/SystemObserver.cfg
index d69f324c7f1086729bb37710661ad90790b5abe6..b64df9b7575ac7b9b104a0754d86088932626628 100644
--- a/scenarios/NavigationSimulation/config/SystemObserver.cfg
+++ b/scenarios/NavigationSimulation/config/SystemObserver.cfg
@@ -18,7 +18,7 @@
 # ArmarX.ApplicationName = ""
 
 
-# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_USER_CONFIG_DIR is set, the cache path will be made relative to ARMARX_USER_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${HOME}/.armarx)
+# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_CONFIG_DIR is set, the cache path will be made relative to ARMARX_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${ARMARX_WORKSPACE}/armarx_config)
 #  Attributes:
 #  - Default:            mongo/.cache
 #  - Case sensitivity:   yes
diff --git a/scenarios/NavigationSimulation/config/TCPControlUnit.cfg b/scenarios/NavigationSimulation/config/TCPControlUnit.cfg
index bd8dfe69f36664c8df742b499c7af35d625cf3cd..3010778a257d900566813a69cb2f6a2f17822da0 100644
--- a/scenarios/NavigationSimulation/config/TCPControlUnit.cfg
+++ b/scenarios/NavigationSimulation/config/TCPControlUnit.cfg
@@ -18,7 +18,7 @@
 # ArmarX.ApplicationName = ""
 
 
-# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_USER_CONFIG_DIR is set, the cache path will be made relative to ARMARX_USER_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${HOME}/.armarx)
+# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_CONFIG_DIR is set, the cache path will be made relative to ARMARX_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${ARMARX_WORKSPACE}/armarx_config)
 #  Attributes:
 #  - Default:            mongo/.cache
 #  - Case sensitivity:   yes
diff --git a/scenarios/NavigationSimulation/config/ViewSelectionApp.cfg b/scenarios/NavigationSimulation/config/ViewSelectionApp.cfg
index 6cae23d6bff854d216da551fe708d631c7174342..532a83741e1cda524b7d471ff24fb0b66f3cb5e3 100644
--- a/scenarios/NavigationSimulation/config/ViewSelectionApp.cfg
+++ b/scenarios/NavigationSimulation/config/ViewSelectionApp.cfg
@@ -18,7 +18,7 @@
 # ArmarX.ApplicationName = ""
 
 
-# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_USER_CONFIG_DIR is set, the cache path will be made relative to ARMARX_USER_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${HOME}/.armarx)
+# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_CONFIG_DIR is set, the cache path will be made relative to ARMARX_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${ARMARX_WORKSPACE}/armarx_config)
 #  Attributes:
 #  - Default:            mongo/.cache
 #  - Case sensitivity:   yes
diff --git a/scenarios/NavigationSimulation/config/WorkingMemory.cfg b/scenarios/NavigationSimulation/config/WorkingMemory.cfg
index b22614479785a108d83ad794634f1e7d97fe3591..f33e4b8bc9dee1a831a65ab858d3c47cb4d09019 100644
--- a/scenarios/NavigationSimulation/config/WorkingMemory.cfg
+++ b/scenarios/NavigationSimulation/config/WorkingMemory.cfg
@@ -18,7 +18,7 @@
 # MemoryX.ApplicationName = ""
 
 
-# MemoryX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_USER_CONFIG_DIR is set, the cache path will be made relative to ARMARX_USER_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${HOME}/.armarx)
+# MemoryX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_CONFIG_DIR is set, the cache path will be made relative to ARMARX_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${ARMARX_WORKSPACE}/armarx_config)
 #  Attributes:
 #  - Default:            mongo/.cache
 #  - Case sensitivity:   yes
diff --git a/scenarios/NavigationSimulation/config/WorkingMemoryToArVizApp.cfg b/scenarios/NavigationSimulation/config/WorkingMemoryToArVizApp.cfg
index 85ca767678296ae73f50c9b9bb5d6e39a7b88f25..18f80e8a58b24d8305bacffa2b6fe9d9c02129b3 100644
--- a/scenarios/NavigationSimulation/config/WorkingMemoryToArVizApp.cfg
+++ b/scenarios/NavigationSimulation/config/WorkingMemoryToArVizApp.cfg
@@ -18,7 +18,7 @@
 # ArmarX.ApplicationName = ""
 
 
-# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_USER_CONFIG_DIR is set, the cache path will be made relative to ARMARX_USER_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${HOME}/.armarx)
+# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_CONFIG_DIR is set, the cache path will be made relative to ARMARX_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${ARMARX_WORKSPACE}/armarx_config)
 #  Attributes:
 #  - Default:            mongo/.cache
 #  - Case sensitivity:   yes
diff --git a/scenarios/PlatformNavigation/PlatformNavigation.scx b/scenarios/PlatformNavigation/PlatformNavigation.scx
index 970c22d76dd86df007d9f9514607f62377437329..ba7b7dfb58a1faf3277de62ac40de8fa7cbb9e5b 100644
--- a/scenarios/PlatformNavigation/PlatformNavigation.scx
+++ b/scenarios/PlatformNavigation/PlatformNavigation.scx
@@ -7,5 +7,6 @@
 	<application name="navigator" instance="" package="armarx_navigation" nodeName="" enabled="true" iceAutoRestart="false"/>
 	<application name="navigation_memory" instance="" package="armarx_navigation" nodeName="" enabled="true" iceAutoRestart="false"/>
 	<application name="example_client" instance="" package="armarx_navigation" nodeName="" enabled="false" iceAutoRestart="false"/>
+	<application name="VisionMemory" instance="" package="VisionX" nodeName="" enabled="true" iceAutoRestart="false"/>
 </scenario>
 
diff --git a/scenarios/PlatformNavigation/config/MemoryNameSystem.cfg b/scenarios/PlatformNavigation/config/MemoryNameSystem.cfg
index 7dd22218243ca4f9e67e843da8b42916f3b8568a..b8bc70a66ca7f32a628886ad1bf13e373f9750d3 100644
--- a/scenarios/PlatformNavigation/config/MemoryNameSystem.cfg
+++ b/scenarios/PlatformNavigation/config/MemoryNameSystem.cfg
@@ -18,7 +18,7 @@
 # ArmarX.ApplicationName = ""
 
 
-# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_USER_CONFIG_DIR is set, the cache path will be made relative to ARMARX_USER_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${HOME}/.armarx)
+# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_CONFIG_DIR is set, the cache path will be made relative to ARMARX_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${ARMARX_WORKSPACE}/armarx_config)
 #  Attributes:
 #  - Default:            mongo/.cache
 #  - Case sensitivity:   yes
diff --git a/scenarios/PlatformNavigation/config/ObjectMemory.cfg b/scenarios/PlatformNavigation/config/ObjectMemory.cfg
index 00f98d515449340628d1d3c97b062e3ed55ee469..eae3a98a41a64ec9a70ba6c5456c37501b6552b3 100644
--- a/scenarios/PlatformNavigation/config/ObjectMemory.cfg
+++ b/scenarios/PlatformNavigation/config/ObjectMemory.cfg
@@ -18,7 +18,7 @@
 # ArmarX.ApplicationName = ""
 
 
-# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_USER_CONFIG_DIR is set, the cache path will be made relative to ARMARX_USER_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${HOME}/.armarx)
+# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_CONFIG_DIR is set, the cache path will be made relative to ARMARX_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${ARMARX_WORKSPACE}/armarx_config)
 #  Attributes:
 #  - Default:            mongo/.cache
 #  - Case sensitivity:   yes
diff --git a/scenarios/PlatformNavigation/config/RemoteGuiProviderApp.cfg b/scenarios/PlatformNavigation/config/RemoteGuiProviderApp.cfg
index 4fd690cefd94559b207493cf40e346a3e47f3b12..4b6abea40d72afd7d313ee47a9b191f3b26de30d 100644
--- a/scenarios/PlatformNavigation/config/RemoteGuiProviderApp.cfg
+++ b/scenarios/PlatformNavigation/config/RemoteGuiProviderApp.cfg
@@ -18,7 +18,7 @@
 # ArmarX.ApplicationName = ""
 
 
-# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_USER_CONFIG_DIR is set, the cache path will be made relative to ARMARX_USER_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${HOME}/.armarx)
+# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_CONFIG_DIR is set, the cache path will be made relative to ARMARX_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${ARMARX_WORKSPACE}/armarx_config)
 #  Attributes:
 #  - Default:            mongo/.cache
 #  - Case sensitivity:   yes
diff --git a/scenarios/PlatformNavigation/config/RobotStateComponent.cfg b/scenarios/PlatformNavigation/config/RobotStateComponent.cfg
index 9c5690ce9fcfd8be7648a3cd9aacd1bfdee1ad57..22eb7df3e1c9966d56445d7c45fb12908cc00c62 100644
--- a/scenarios/PlatformNavigation/config/RobotStateComponent.cfg
+++ b/scenarios/PlatformNavigation/config/RobotStateComponent.cfg
@@ -18,7 +18,7 @@
 # ArmarX.ApplicationName = ""
 
 
-# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_USER_CONFIG_DIR is set, the cache path will be made relative to ARMARX_USER_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${HOME}/.armarx)
+# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_CONFIG_DIR is set, the cache path will be made relative to ARMARX_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${ARMARX_WORKSPACE}/armarx_config)
 #  Attributes:
 #  - Default:            mongo/.cache
 #  - Case sensitivity:   yes
diff --git a/scenarios/PlatformNavigation/config/VisionMemory.cfg b/scenarios/PlatformNavigation/config/VisionMemory.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..1e9d06004511f601b82a565208f8292aee182c70
--- /dev/null
+++ b/scenarios/PlatformNavigation/config/VisionMemory.cfg
@@ -0,0 +1,239 @@
+# ==================================================================
+# VisionMemory properties
+# ==================================================================
+
+# ArmarX.AdditionalPackages:  List of additional ArmarX packages which should be in the list of default packages. If you have custom packages, which should be found by the gui or other apps, specify them here. Comma separated List.
+#  Attributes:
+#  - Default:            Default value not mapped.
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.AdditionalPackages = Default value not mapped.
+
+
+# ArmarX.ApplicationName:  Application name
+#  Attributes:
+#  - Default:            ""
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.ApplicationName = ""
+
+
+# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_CONFIG_DIR is set, the cache path will be made relative to ARMARX_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${ARMARX_WORKSPACE}/armarx_config)
+#  Attributes:
+#  - Default:            mongo/.cache
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.CachePath = mongo/.cache
+
+
+# ArmarX.Config:  Comma-separated list of configuration files 
+#  Attributes:
+#  - Default:            ""
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.Config = ""
+
+
+# ArmarX.DataPath:  Semicolon-separated search list for data files
+#  Attributes:
+#  - Default:            ""
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.DataPath = ""
+
+
+# ArmarX.DefaultPackages:  List of ArmarX packages which are accessible by default. Comma separated List. If you want to add your own packages and use all default ArmarX packages, use the property 'AdditionalPackages'.
+#  Attributes:
+#  - Default:            Default value not mapped.
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.DefaultPackages = Default value not mapped.
+
+
+# ArmarX.DependenciesConfig:  Path to the (usually generated) config file containing all data paths of all dependent projects. This property usually does not need to be edited.
+#  Attributes:
+#  - Default:            ./config/dependencies.cfg
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.DependenciesConfig = ./config/dependencies.cfg
+
+
+# ArmarX.DisableLogging:  Turn logging off in whole application
+#  Attributes:
+#  - Default:            false
+#  - Case sensitivity:   yes
+#  - Required:           no
+#  - Possible values: {0, 1, false, no, true, yes}
+# ArmarX.DisableLogging = false
+
+
+# ArmarX.EnableProfiling:  Enable profiling of CPU load produced by this application
+#  Attributes:
+#  - Default:            false
+#  - Case sensitivity:   yes
+#  - Required:           no
+#  - Possible values: {0, 1, false, no, true, yes}
+# ArmarX.EnableProfiling = false
+
+
+# ArmarX.LoadLibraries:  Libraries to load at start up of the application. Must be enabled by the Application with enableLibLoading(). Format: PackageName:LibraryName;... or /absolute/path/to/library;...
+#  Attributes:
+#  - Default:            ""
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.LoadLibraries = ""
+
+
+# ArmarX.LoggingGroup:  The logging group is transmitted with every ArmarX log message over Ice in order to group the message in the GUI.
+#  Attributes:
+#  - Default:            ""
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.LoggingGroup = ""
+
+
+# ArmarX.RedirectStdout:  Redirect std::cout and std::cerr to ArmarXLog
+#  Attributes:
+#  - Default:            true
+#  - Case sensitivity:   yes
+#  - Required:           no
+#  - Possible values: {0, 1, false, no, true, yes}
+# ArmarX.RedirectStdout = true
+
+
+# ArmarX.RemoteHandlesDeletionTimeout:  The timeout (in ms) before a remote handle deletes the managed object after the use count reached 0. This time can be used by a client to increment the count again (may be required when transmitting remote handles)
+#  Attributes:
+#  - Default:            3000
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.RemoteHandlesDeletionTimeout = 3000
+
+
+# ArmarX.SecondsStartupDelay:  The startup will be delayed by this number of seconds (useful for debugging)
+#  Attributes:
+#  - Default:            0
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.SecondsStartupDelay = 0
+
+
+# ArmarX.StartDebuggerOnCrash:  If this application crashes (segmentation fault) qtcreator will attach to this process and start the debugger.
+#  Attributes:
+#  - Default:            false
+#  - Case sensitivity:   yes
+#  - Required:           no
+#  - Possible values: {0, 1, false, no, true, yes}
+# ArmarX.StartDebuggerOnCrash = false
+
+
+# ArmarX.ThreadPoolSize:  Size of the ArmarX ThreadPool that is always running.
+#  Attributes:
+#  - Default:            1
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.ThreadPoolSize = 1
+
+
+# ArmarX.TopicSuffix:  Suffix appended to all topic names for outgoing topics. This is mainly used to direct all topics to another name for TopicReplaying purposes.
+#  Attributes:
+#  - Default:            ""
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.TopicSuffix = ""
+
+
+# ArmarX.UseTimeServer:  Enable using a global Timeserver (e.g. from ArmarXSimulator)
+#  Attributes:
+#  - Default:            false
+#  - Case sensitivity:   yes
+#  - Required:           no
+#  - Possible values: {0, 1, false, no, true, yes}
+# ArmarX.UseTimeServer = false
+
+
+# ArmarX.Verbosity:  Global logging level for whole application
+#  Attributes:
+#  - Default:            Info
+#  - Case sensitivity:   yes
+#  - Required:           no
+#  - Possible values: {Debug, Error, Fatal, Important, Info, Undefined, Verbose, Warning}
+# ArmarX.Verbosity = Info
+
+
+# ArmarX.VisionMemory.EnableProfiling:  enable profiler which is used for logging performance events
+#  Attributes:
+#  - Default:            false
+#  - Case sensitivity:   yes
+#  - Required:           no
+#  - Possible values: {0, 1, false, no, true, yes}
+# ArmarX.VisionMemory.EnableProfiling = false
+
+
+# ArmarX.VisionMemory.MinimumLoggingLevel:  Local logging level only for this component
+#  Attributes:
+#  - Default:            Undefined
+#  - Case sensitivity:   yes
+#  - Required:           no
+#  - Possible values: {Debug, Error, Fatal, Important, Info, Undefined, Verbose, Warning}
+# ArmarX.VisionMemory.MinimumLoggingLevel = Undefined
+
+
+# ArmarX.VisionMemory.ObjectName:  Name of IceGrid well-known object
+#  Attributes:
+#  - Default:            ""
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.VisionMemory.ObjectName = ""
+
+
+# ArmarX.VisionMemory.mem.MemoryName:  Name of this memory server.
+#  Attributes:
+#  - Default:            Vision
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.VisionMemory.mem.MemoryName = Vision
+
+
+# ArmarX.VisionMemory.mem.ltm.00_enabled:  
+#  Attributes:
+#  - Default:            true
+#  - Case sensitivity:   yes
+#  - Required:           no
+#  - Possible values: {0, 1, false, no, true, yes}
+# ArmarX.VisionMemory.mem.ltm.00_enabled = true
+
+
+# ArmarX.VisionMemory.mns.MemoryNameSystemEnabled:  Whether to use (and depend on) the Memory Name System (MNS).
+# Set to false to use this memory as a stand-alone.
+#  Attributes:
+#  - Default:            true
+#  - Case sensitivity:   yes
+#  - Required:           no
+#  - Possible values: {0, 1, false, no, true, yes}
+# ArmarX.VisionMemory.mns.MemoryNameSystemEnabled = true
+
+
+# ArmarX.VisionMemory.mns.MemoryNameSystemName:  Name of the Memory Name System (MNS) component.
+#  Attributes:
+#  - Default:            MemoryNameSystem
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.VisionMemory.mns.MemoryNameSystemName = MemoryNameSystem
+
+
+# ArmarX.VisionMemory.tpc.pub.MemoryListener:  Name of the `MemoryListener` topic to publish data to.
+#  Attributes:
+#  - Default:            MemoryUpdates
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.VisionMemory.tpc.pub.MemoryListener = MemoryUpdates
+
+
+# ArmarX.VisionMemory.tpc.sub.MemoryListener:  Name of the `MemoryListener` topic to subscribe to.
+#  Attributes:
+#  - Default:            MemoryUpdates
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.VisionMemory.tpc.sub.MemoryListener = MemoryUpdates
+
+
diff --git a/scenarios/PlatformNavigation/config/navigation_memory.cfg b/scenarios/PlatformNavigation/config/navigation_memory.cfg
index b565142e13ddce514969d321bd546f67a37abc43..c51d2b49152134c46ed72c5a3801107f50051a9c 100644
--- a/scenarios/PlatformNavigation/config/navigation_memory.cfg
+++ b/scenarios/PlatformNavigation/config/navigation_memory.cfg
@@ -201,7 +201,7 @@
 #  - Default:            ""
 #  - Case sensitivity:   yes
 #  - Required:           no
-ArmarX.NavigationMemory.p.snapshotToLoad = PriorKnowledgeData/navigation-graphs/R003
+ArmarX.NavigationMemory.p.snapshotToLoad = ./PriorKnowledgeData/navigation-graphs/audimax-science-week-opening
 
 
 # ArmarX.NavigationMemory.tpc.pub.MemoryListener:  Name of the `MemoryListener` topic to publish data to.
diff --git a/scenarios/PlatformNavigation/config/navigator.cfg b/scenarios/PlatformNavigation/config/navigator.cfg
index 525d71c323b3c009caeba5e49a7edab0165a3d84..4873c6bbc55e212ef90bafa9f8d95dfaba76c5ae 100644
--- a/scenarios/PlatformNavigation/config/navigator.cfg
+++ b/scenarios/PlatformNavigation/config/navigator.cfg
@@ -278,6 +278,22 @@ ArmarX.Navigator.cmp.PlatformUnit = Armar6PlatformUnit
 # ArmarX.Navigator.mem.robot_state.proprioceptionSegment = Proprioception
 
 
+# ArmarX.Navigator.mem.vision.occupancy_grid.CoreSegment:  
+#  Attributes:
+#  - Default:            ""
+#  - Case sensitivity:   yes
+#  - Required:           no
+ArmarX.Navigator.mem.vision.occupancy_grid.CoreSegment = OccupancyGrid
+
+
+# ArmarX.Navigator.mem.vision.occupancy_grid.Memory:  
+#  Attributes:
+#  - Default:            ""
+#  - Case sensitivity:   yes
+#  - Required:           no
+ArmarX.Navigator.mem.vision.occupancy_grid.Memory = Vision
+
+
 # ArmarX.Navigator.mns.MemoryNameSystemEnabled:  Whether to use (and depend on) the Memory Name System (MNS).
 # Set to false to use this memory as a stand-alone.
 #  Attributes:
@@ -296,6 +312,14 @@ ArmarX.Navigator.cmp.PlatformUnit = Armar6PlatformUnit
 # ArmarX.Navigator.mns.MemoryNameSystemName = MemoryNameSystem
 
 
+# ArmarX.Navigator.p.occupancy_grid.occopied_threshold:  Threshold for each cell to be considered occupied. Increase this value to reduce noise.
+#  Attributes:
+#  - Default:            0.550000012
+#  - Case sensitivity:   yes
+#  - Required:           no
+ArmarX.Navigator.p.occupancy_grid.occopied_threshold = 0.8
+
+
 # ArmarX.Navigator.tpc.sub.MemoryListener:  Name of the `MemoryListener` topic to subscribe to.
 #  Attributes:
 #  - Default:            MemoryUpdates
@@ -369,6 +393,6 @@ ArmarX.Navigator.cmp.PlatformUnit = Armar6PlatformUnit
 #  - Case sensitivity:   yes
 #  - Required:           no
 #  - Possible values: {Debug, Error, Fatal, Important, Info, Undefined, Verbose, Warning}
-# ArmarX.Verbosity = Info
+ArmarX.Verbosity = Verbose
 
 
diff --git a/source/armarx/navigation/algorithms/CMakeLists.txt b/source/armarx/navigation/algorithms/CMakeLists.txt
index d408bd1b341ca823ba5bfd3606102dee36146359..295e35cf027586e1a8f049dd8af03d2585c9afd9 100644
--- a/source/armarx/navigation/algorithms/CMakeLists.txt
+++ b/source/armarx/navigation/algorithms/CMakeLists.txt
@@ -1,15 +1,21 @@
+find_package(OpenCV REQUIRED )
+
 armarx_add_library(algorithms
     DEPENDENCIES
         ArmarXCoreInterfaces
         ArmarXCore
         armarx_navigation::core
         armarx_navigation::conversions
+    DEPENDENCIES_LEGACY
+        OpenCV
     SOURCES
         ./algorithms.cpp
         # A*
         ./astar/AStarPlanner.cpp
+        ./astar/NavigationCostMap.cpp
         ./astar/Node.cpp
         ./astar/Planner2D.cpp
+        ./astar/util.cpp
         # smoothing
         ./smoothing/ChainApproximation.cpp
         ./smoothing/CircularPathSmoothing.cpp
@@ -17,8 +23,10 @@ armarx_add_library(algorithms
         ./algorithms.h
         # A*
         ./astar/AStarPlanner.h
+        ./astar/NavigationCostMap.h
         ./astar/Node.h
         ./astar/Planner2D.h
+        ./astar/util.h
         # smoothing
         ./smoothing/ChainApproximation.h
         ./smoothing/CircularPathSmoothing.h
diff --git a/source/armarx/navigation/algorithms/astar/AStarPlanner.cpp b/source/armarx/navigation/algorithms/astar/AStarPlanner.cpp
index 138b60d00f8e1f6df089ac8c4f53170087f12b7e..0386c314dea9df3f0b609fe0eb022a7cf380432b 100644
--- a/source/armarx/navigation/algorithms/astar/AStarPlanner.cpp
+++ b/source/armarx/navigation/algorithms/astar/AStarPlanner.cpp
@@ -34,8 +34,8 @@ namespace armarx::navigation::algorithm::astar
         const auto toPoint = [](const Eigen::Vector3f& pt)
         { return point_t(pt.x(), pt.y(), pt.z()); };
 
-        box_t box1(toPoint(bb1.getMin()), toPoint(bb1.getMax()));
-        box_t box2(toPoint(bb2.getMin()), toPoint(bb2.getMax()));
+        const box_t box1(toPoint(bb1.getMin()), toPoint(bb1.getMax()));
+        const box_t box2(toPoint(bb2.getMin()), toPoint(bb2.getMax()));
 
         return bg::intersects(box1, box2);
     }
@@ -45,10 +45,11 @@ namespace armarx::navigation::algorithm::astar
                                float cellSize) :
         Planner2D(robot, obstacles), cellSize(cellSize)
     {
+        ARMARX_CHECK_GREATER_EQUAL(static_cast<int>(obstacles->getSize()), 0);
     }
 
     float
-    AStarPlanner::heuristic(NodePtr n1, NodePtr n2)
+    AStarPlanner::heuristic(const NodePtr& n1, const NodePtr& n2)
     {
         return (n1->position - n2->position).norm();
     }
@@ -58,13 +59,13 @@ namespace armarx::navigation::algorithm::astar
     {
         ARMARX_TRACE;
 
-        ARMARX_DEBUG << "Scene bounds are " << sceneBoundsMin << " and " << sceneBoundsMax;
+        ARMARX_VERBOSE << "Scene bounds are " << sceneBoundsMin << " and " << sceneBoundsMax;
 
         //+1 for explicit rounding up
         cols = (sceneBoundsMax.x() - sceneBoundsMin.x()) / cellSize + 1;
         rows = (sceneBoundsMax.y() - sceneBoundsMin.y()) / cellSize + 1;
 
-        ARMARX_DEBUG << "Grid size: " << rows << ", " << cols;
+        ARMARX_VERBOSE << "Grid size: " << rows << ", " << cols;
 
         for (size_t r = 0; r < rows; r++)
         {
@@ -115,7 +116,7 @@ namespace armarx::navigation::algorithm::astar
     }
 
     bool
-    AStarPlanner::fulfillsConstraints(NodePtr n)
+    AStarPlanner::fulfillsConstraints(const NodePtr& n)
     {
         ARMARX_TRACE;
         ARMARX_CHECK_NOT_NULL(n);
@@ -131,7 +132,6 @@ namespace armarx::navigation::algorithm::astar
         VirtualRobot::BoundingBox robotBbox = robotCollisionModel->getBoundingBox(true);
 
         Eigen::Vector3f P1, P2;
-        int id1, id2;
         for (size_t i = 0; i < obstacles->getSize(); i++)
         {
             // cheap collision check
@@ -143,16 +143,12 @@ namespace armarx::navigation::algorithm::astar
             }
 
             // precise collision check
-            float dist =
-                VirtualRobot::CollisionChecker::getGlobalCollisionChecker()->calculateDistance(
+            bool collision =
+                VirtualRobot::CollisionChecker::getGlobalCollisionChecker()->checkCollision(
                     robotCollisionModel,
-                    obstacles->getSceneObject(i)->getCollisionModel(),
-                    P1,
-                    P2,
-                    &id1,
-                    &id2);
+                    obstacles->getSceneObject(i)->getCollisionModel());
 
-            if (dist <= cellSize / 2)
+            if (collision)
             {
                 return false;
             }
@@ -162,22 +158,22 @@ namespace armarx::navigation::algorithm::astar
     }
 
     NodePtr
-    AStarPlanner::closestNode(Eigen::Vector2f v)
+    AStarPlanner::closestNode(const Eigen::Vector2f& v)
     {
         float r = (v.y() - cellSize / 2 - sceneBoundsMin.y()) / cellSize;
         float c = (v.x() - cellSize / 2 - sceneBoundsMin.x()) / cellSize;
 
-        ARMARX_CHECK(r >= 0.F);
-        ARMARX_CHECK(c >= 0.F);
+        ARMARX_CHECK_GREATER_EQUAL(r ,0.F);
+        ARMARX_CHECK_GREATER_EQUAL(c ,0.F);
 
-        ARMARX_CHECK(r <= (rows - 1));
-        ARMARX_CHECK(c <= (cols - 1));
+        ARMARX_CHECK_LESS_EQUAL(r, rows - 1);
+        ARMARX_CHECK_LESS_EQUAL(c, cols - 1);
 
         return grid[static_cast<int>(r)][static_cast<int>(c)];
     }
 
     std::vector<Eigen::Vector2f>
-    AStarPlanner::plan(Eigen::Vector2f start, Eigen::Vector2f goal)
+    AStarPlanner::plan(const Eigen::Vector2f& start, const Eigen::Vector2f& goal)
     {
         ARMARX_TRACE;
         grid.clear();
@@ -210,10 +206,13 @@ namespace armarx::navigation::algorithm::astar
         ARMARX_CHECK(fulfillsConstraints(nodeGoal)) << "Goal node in collision!";
 
         std::vector<NodePtr> closedSet;
+
         std::vector<NodePtr> openSet;
         openSet.push_back(nodeStart);
+
         std::map<NodePtr, float> gScore;
         gScore[nodeStart] = 0;
+        
         std::map<NodePtr, float> fScore;
         fScore[nodeStart] = gScore[nodeStart] + heuristic(nodeStart, nodeGoal);
 
diff --git a/source/armarx/navigation/algorithms/astar/AStarPlanner.h b/source/armarx/navigation/algorithms/astar/AStarPlanner.h
index beb5410be66cbf517863417f1ff7dcddcbf59f77..a650032a0c577d58aa1a583b7f44b0f1939998bb 100644
--- a/source/armarx/navigation/algorithms/astar/AStarPlanner.h
+++ b/source/armarx/navigation/algorithms/astar/AStarPlanner.h
@@ -22,15 +22,15 @@ namespace armarx::navigation::algorithm::astar
                      VirtualRobot::SceneObjectSetPtr obstacles = {},
                      float cellSize = 100.f);
 
-        std::vector<Eigen::Vector2f> plan(Eigen::Vector2f start, Eigen::Vector2f goal);
+        std::vector<Eigen::Vector2f> plan(const Eigen::Vector2f& start, const Eigen::Vector2f& goal) override;
 
         void setRobotCollisionModel(const VirtualRobot::CollisionModelPtr& collisionModel);
 
     private:
-        float heuristic(NodePtr n1, NodePtr n2);
+        float heuristic(const NodePtr& n1, const NodePtr& n2);
         void createUniformGrid();
-        bool fulfillsConstraints(NodePtr n);
-        NodePtr closestNode(Eigen::Vector2f v);
+        bool fulfillsConstraints(const NodePtr& n);
+        NodePtr closestNode(const Eigen::Vector2f& v);
 
     private:
         /// How big each cell is in the uniform grid.
diff --git a/source/armarx/navigation/algorithms/astar/NavigationCostMap.cpp b/source/armarx/navigation/algorithms/astar/NavigationCostMap.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..8900c79926c99ed66fa24396c8c83c7c4503731e
--- /dev/null
+++ b/source/armarx/navigation/algorithms/astar/NavigationCostMap.cpp
@@ -0,0 +1,230 @@
+#include "NavigationCostMap.h"
+
+#include <algorithm>
+#include <cmath>
+#include <limits>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/algorithms/detail/intersects/interface.hpp>
+
+#include <Eigen/Geometry>
+
+#include <IceUtil/Time.h>
+
+#include <VirtualRobot/BoundingBox.h>
+#include <VirtualRobot/CollisionDetection/CollisionChecker.h>
+#include <VirtualRobot/CollisionDetection/CollisionModel.h>
+#include <VirtualRobot/Visualization/CoinVisualization/CoinVisualizationFactory.h>
+#include <VirtualRobot/XML/ObjectIO.h>
+
+#include <ArmarXCore/core/exceptions/local/ExpressionException.h>
+#include <ArmarXCore/core/logging/Logging.h>
+
+#include <armarx/navigation/conversions/eigen.h>
+
+namespace bg = boost::geometry;
+
+namespace armarx::navigation::algorithm::astar
+{
+
+    NavigationCostMap::NavigationCostMap(VirtualRobot::RobotPtr robot,
+                                         VirtualRobot::SceneObjectSetPtr obstacles,
+                                         const Parameters& parameters) :
+        robot(robot), obstacles(obstacles), parameters(parameters)
+    {
+    }
+
+    NavigationCostMap::Position
+    NavigationCostMap::toPosition(const NavigationCostMap::Index& index) const
+    {
+        Eigen::Vector2f pos;
+        // TODO check if x and y must be switched
+        pos.x() = sceneBoundsMin.x() + index.x() * parameters.cellSize + parameters.cellSize / 2;
+        pos.y() = sceneBoundsMin.y() + index.y() * parameters.cellSize + parameters.cellSize / 2;
+
+        return pos;
+    }
+
+    void
+    NavigationCostMap::createUniformGrid()
+    {
+        ARMARX_TRACE;
+
+        if (obstacles)
+        {
+            for (size_t i = 0; i < obstacles->getCollisionModels().size(); i++)
+            {
+                VirtualRobot::BoundingBox bb = obstacles->getCollisionModels()[i]->getBoundingBox();
+                sceneBoundsMin.x() = std::min(bb.getMin().x(), sceneBoundsMin.x());
+                sceneBoundsMin.y() = std::min(bb.getMin().y(), sceneBoundsMin.y());
+                sceneBoundsMax.x() = std::max(bb.getMax().x(), sceneBoundsMax.x());
+                sceneBoundsMax.y() = std::max(bb.getMax().y(), sceneBoundsMax.y());
+            }
+        }
+
+        ARMARX_INFO << "Scene bounds are " << sceneBoundsMin << " and " << sceneBoundsMax;
+
+        //+1 for explicit rounding up
+        c_x = (sceneBoundsMax.x() - sceneBoundsMin.x()) / parameters.cellSize + 1;
+        c_y = (sceneBoundsMax.y() - sceneBoundsMin.y()) / parameters.cellSize + 1;
+
+        ARMARX_INFO << "Grid size: " << c_y << ", " << c_x;
+
+        ARMARX_INFO << "Resetting grid";
+        grid = Eigen::MatrixXf(c_x, c_y); //.array();
+        // grid = Eigen::ArrayXf(); //(c_x, c_y);
+        // grid->resize(c_x, c_y);
+
+        ARMARX_INFO << "done.";
+    }
+
+
+    float
+    NavigationCostMap::computeCost(const NavigationCostMap::Position& position)
+    {
+        ARMARX_TRACE;
+        ARMARX_CHECK_NOT_NULL(robotCollisionModel);
+        ARMARX_CHECK_NOT_NULL(VirtualRobot::CollisionChecker::getGlobalCollisionChecker());
+        ARMARX_CHECK_NOT_NULL(obstacles);
+
+        const core::Pose globalPose = Eigen::Translation3f(conv::to3D(position)) *
+                                      Eigen::AngleAxisf(M_PI_2f32, Eigen::Vector3f::UnitX());
+
+        // auto colModel = robotCollisionModel->clone();
+        // colModel->setGlobalPose(globalPose.matrix());
+
+        robotCollisionModel->setGlobalPose(globalPose.matrix());
+
+        VirtualRobot::BoundingBox robotBbox = robotCollisionModel->getBoundingBox(true);
+
+        Eigen::Vector3f P1;
+        Eigen::Vector3f P2;
+        int id1, id2;
+
+        float minDistance = std::numeric_limits<float>::max();
+
+        // TODO omp...
+        for (size_t i = 0; i < obstacles->getSize(); i++)
+        {
+            // cheap collision check
+            // VirtualRobot::BoundingBox obstacleBbox =
+            //     obstacles->getSceneObject(i)->getCollisionModel()->getBoundingBox(true);
+            // if (not intersects(robotBbox, obstacleBbox))
+            // {
+            //     continue;
+            // }
+
+            // precise collision check
+            const float dist =
+                VirtualRobot::CollisionChecker::getGlobalCollisionChecker()->calculateDistance(
+                    robotCollisionModel,
+                    obstacles->getSceneObject(i)->getCollisionModel(),
+                    P1,
+                    P2,
+                    &id1,
+                    &id2);
+
+            // check if objects collide
+            if ((dist <= parameters.cellSize / 2) or
+                VirtualRobot::CollisionChecker::getGlobalCollisionChecker()->checkCollision(
+                    robotCollisionModel, obstacles->getSceneObject(i)->getCollisionModel()))
+            {
+                minDistance = 0;
+                break;
+            }
+
+            minDistance = std::min(minDistance, dist);
+        }
+        // return n->position.x() >= sceneBoundsMin.x() && n->position.x() <= sceneBoundsMax.x() &&
+        //        n->position.y() >= sceneBoundsMin.y() && n->position.y() <= sceneBoundsMax.y();
+
+        return minDistance;
+    }
+
+    NavigationCostMap::Vertex
+    NavigationCostMap::toVertex(Eigen::Vector2f v)
+    {
+        float v_y = (v.y() - parameters.cellSize / 2 - sceneBoundsMin.y()) / parameters.cellSize;
+        float v_x = (v.x() - parameters.cellSize / 2 - sceneBoundsMin.x()) / parameters.cellSize;
+
+        ARMARX_CHECK(v_y >= 0.F);
+        ARMARX_CHECK(v_x >= 0.F);
+
+        ARMARX_CHECK(v_y <= (c_y - 1));
+        ARMARX_CHECK(v_x <= (c_x - 1));
+
+        return Vertex{.index = Index{static_cast<int>(v_x), static_cast<int>(v_y)}, .position = v};
+    }
+
+    void
+    NavigationCostMap::createCostmap()
+    {
+        ARMARX_TRACE;
+        std::vector<Eigen::Vector2f> result;
+
+        ARMARX_CHECK_NOT_NULL(robot) << "Robot must be set";
+
+
+        VirtualRobot::CoinVisualizationFactory factory;
+        const auto cylinder = factory.createCylinder(1500.F / 2, 2000.F);
+
+        VirtualRobot::CollisionModelPtr collisionModel(new VirtualRobot::CollisionModel(cylinder));
+
+
+        robotCollisionModel = collisionModel;
+
+
+        ARMARX_CHECK_NOT_NULL(robotCollisionModel) << "Collision model must be set!";
+
+        // ARMARX_CHECK(robot->hasRobotNode(robotColModelName)) << "No robot node " << robotColModelName;
+        // ARMARX_CHECK(robot->getRobotNode(robotColModelName)->getCollisionModel())
+        // << "No collision model for robot node " << robotColModelName;
+
+        // robotCollisionModel = robot->getRobotNode(robotColModelName)->getCollisionModel()->clone();
+        robotCollisionModel->setGlobalPose(robot->getGlobalPose());
+
+        // static auto cylinder = VirtualRobot::ObjectIO::loadObstacle("/home/fabi/cylinder.xml");
+        // ARMARX_CHECK_NOT_NULL(cylinder);
+        // cylinder->setGlobalPose(robot->getGlobalPose());
+
+        // robotCollisionModel = cylinder->getCollisionModel();
+
+        ARMARX_CHECK_NOT_NULL(robotCollisionModel);
+
+        ARMARX_INFO << "Creating grid";
+        createUniformGrid();
+
+        ARMARX_INFO << "Filling grid";
+        fillGridCosts();
+
+        ARMARX_INFO << "Filled grid";
+    }
+
+    void
+    NavigationCostMap::setRobotCollisionModel(const VirtualRobot::CollisionModelPtr& collisionModel)
+    {
+        robotCollisionModel = collisionModel;
+    }
+
+    void
+    NavigationCostMap::fillGridCosts()
+    {
+        int i = 0;
+
+        for (unsigned int x = 0; x < c_x; x++)
+        {
+            for (unsigned int y = 0; y < c_y; y++)
+            {
+                const Index index{x, y};
+                const Position position = toPosition(index);
+
+                grid.value()(x, y) = computeCost(position);
+
+                i++;
+
+                ARMARX_INFO << i << "/" << c_x * c_y;
+            }
+        }
+    }
+
+} // namespace armarx::navigation::algorithm::astar
diff --git a/source/armarx/navigation/algorithms/astar/NavigationCostMap.h b/source/armarx/navigation/algorithms/astar/NavigationCostMap.h
new file mode 100644
index 0000000000000000000000000000000000000000..d03750d5aba8ab7ed2a3c6abb435a94e2adaefc1
--- /dev/null
+++ b/source/armarx/navigation/algorithms/astar/NavigationCostMap.h
@@ -0,0 +1,84 @@
+#pragma once
+
+#include <cstddef>
+
+#include <Eigen/Core>
+
+#include <VirtualRobot/CollisionDetection/CollisionModel.h>
+
+#include "Node.h"
+#include "Planner2D.h"
+
+namespace armarx::navigation::algorithm::astar
+{
+
+
+    /**
+ * The A* planner
+ */
+    class NavigationCostMap
+    {
+    public:
+        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
+
+        struct Parameters
+        {
+            // if set to false, distance to obstacles will be computed and not only a binary collision check
+            bool binaryGrid{false};
+
+            /// How big each cell is in the uniform grid.
+            float cellSize = 100.f;
+        };
+
+        NavigationCostMap(VirtualRobot::RobotPtr robot,
+                          VirtualRobot::SceneObjectSetPtr obstacles,
+                          const Parameters& parameters);
+
+        void createCostmap();
+
+        void setRobotCollisionModel(const VirtualRobot::CollisionModelPtr& collisionModel);
+
+        using Index = Eigen::Array2i;
+        using Position = Eigen::Vector2f;
+        using Grid = Eigen::MatrixXf;
+
+        struct Vertex
+        {
+            Index index; // row corresponds to y; column corresponds to x
+            Position position;
+        };
+
+        Position toPosition(const Index& index) const;
+
+        const Grid&
+        getGrid() const
+        {
+            return grid.value();
+        }
+
+    private:
+        void createUniformGrid();
+        float computeCost(const NavigationCostMap::Position& position);
+        Vertex toVertex(Position v);
+
+        void fillGridCosts();
+
+    private:
+        std::optional<Grid> grid;
+
+
+        size_t c_x = 0;
+        size_t c_y = 0;
+
+
+        VirtualRobot::RobotPtr robot;
+        VirtualRobot::SceneObjectSetPtr obstacles;
+
+        VirtualRobot::CollisionModelPtr robotCollisionModel;
+
+        Eigen::Vector2f sceneBoundsMin;
+        Eigen::Vector2f sceneBoundsMax;
+
+        const Parameters parameters;
+    };
+} // namespace armarx::navigation::algorithm::astar
diff --git a/source/armarx/navigation/algorithms/astar/Planner2D.h b/source/armarx/navigation/algorithms/astar/Planner2D.h
index c4cd26862a112fc8fc4a8cc3cfb7ccb0c415f710..5fb3b7e6c9e67ed38c8434f0414eec34b03f28ea 100644
--- a/source/armarx/navigation/algorithms/astar/Planner2D.h
+++ b/source/armarx/navigation/algorithms/astar/Planner2D.h
@@ -26,7 +26,7 @@ namespace armarx::navigation::algorithm::astar
         virtual ~Planner2D() = default;
 
         // planners implement this method
-        virtual std::vector<Eigen::Vector2f> plan(Eigen::Vector2f start, Eigen::Vector2f goal) = 0;
+        virtual std::vector<Eigen::Vector2f> plan(const Eigen::Vector2f& start, const Eigen::Vector2f& goal) = 0;
 
         /// Update obstacles
         void setObstacles(VirtualRobot::SceneObjectSetPtr obstacles);
diff --git a/source/armarx/navigation/algorithms/astar/util.cpp b/source/armarx/navigation/algorithms/astar/util.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..e475d3f93f0ee3e3748510544baf4bb62d6d1c73
--- /dev/null
+++ b/source/armarx/navigation/algorithms/astar/util.cpp
@@ -0,0 +1,39 @@
+#include "util.h"
+
+#include <cstddef>
+
+#include <opencv2/core.hpp>
+#include <opencv2/core/mat.hpp>
+#include <opencv2/opencv.hpp>
+
+#include <ArmarXCore/core/exceptions/local/ExpressionException.h>
+#include <ArmarXCore/core/logging/Logging.h>
+
+namespace armarx::navigation
+{
+    void
+    dumpToFile(const Eigen::MatrixXf& grid)
+    {
+        ARMARX_INFO << "Dumping to file.";
+        ARMARX_INFO << "Shape: " << grid.rows() << ", " << grid.cols();
+
+        // pedantic checks to prevent underflow below
+        ARMARX_CHECK_GREATER(grid.rows(), 0);
+        ARMARX_CHECK_GREATER(grid.cols(), 0);
+
+        const cv::Size size(static_cast<int>(grid.rows()), static_cast<int>(grid.cols()));
+
+        cv::Mat1f mat(size);
+
+        for (int r = 0; r < grid.rows(); r++)
+        {
+            for (int c = 0; c < grid.cols(); c++)
+            {
+                mat(cv::Point(r, c)) = grid(r, c);
+            }
+        }
+
+
+        cv::imwrite("/tmp/grid.exr", mat);
+    }
+} // namespace armarx::navigation
diff --git a/source/armarx/navigation/algorithms/astar/util.h b/source/armarx/navigation/algorithms/astar/util.h
new file mode 100644
index 0000000000000000000000000000000000000000..335c9c6d11813854489ffc0fc9cbb44c381f1586
--- /dev/null
+++ b/source/armarx/navigation/algorithms/astar/util.h
@@ -0,0 +1,10 @@
+#pragma once
+
+#include <Eigen/Core>
+
+namespace armarx::navigation
+{
+
+    void dumpToFile(const Eigen::MatrixXf& grid);
+
+}
diff --git a/source/armarx/navigation/client/services/MemorySubscriber.cpp b/source/armarx/navigation/client/services/MemorySubscriber.cpp
index fc3b37fd8712efb9a125be41e97a61efc99a74d4..e287d426c8a30f8da960c3bd5d5bd6fe5db705ae 100644
--- a/source/armarx/navigation/client/services/MemorySubscriber.cpp
+++ b/source/armarx/navigation/client/services/MemorySubscriber.cpp
@@ -133,8 +133,8 @@ namespace armarx::navigation::client
         .snapshots().timeRange(lastMemoryPoll, now);
         // clang-format on
 
-        ARMARX_INFO << "Polling memory events in interval "
-                    << "[" << lastMemoryPoll << ", " << now << "]";
+        ARMARX_DEBUG << "Polling memory events in interval "
+                     << "[" << lastMemoryPoll << ", " << now << "]";
 
         lastMemoryPoll = now;
 
diff --git a/source/armarx/navigation/components/Navigator/CMakeLists.txt b/source/armarx/navigation/components/Navigator/CMakeLists.txt
index 07a168e3c8025a792b1fcf949ad9117dc0034a91..57f641b3d5aa40db997bf83f10a83b849fd981b0 100644
--- a/source/armarx/navigation/components/Navigator/CMakeLists.txt
+++ b/source/armarx/navigation/components/Navigator/CMakeLists.txt
@@ -17,6 +17,7 @@ armarx_add_component(navigator
         RobotAPIComponentPlugins # For ArViz and other plugins.
         armem_robot
         armem_robot_state
+        armem_vision
         # This project ${PROJECT_NAME}Interfaces  # For ice interfaces from this
         # package. This component
         armarx_navigation::server
diff --git a/source/armarx/navigation/components/Navigator/Navigator.cpp b/source/armarx/navigation/components/Navigator/Navigator.cpp
index 5a73e948efad1dfb83ddf2d256f6184a99ab2beb..a53c8528d01d3d06a8bf41461871dcd67accdb08 100644
--- a/source/armarx/navigation/components/Navigator/Navigator.cpp
+++ b/source/armarx/navigation/components/Navigator/Navigator.cpp
@@ -48,9 +48,15 @@
 
 #include "ArmarXGui/libraries/RemoteGui/Client/Widgets.h"
 
+#include "RobotAPI/components/ArViz/Client/Elements.h"
+#include "RobotAPI/components/ArViz/Client/elements/Color.h"
 #include "RobotAPI/libraries/armem/core/Time.h"
+#include "RobotAPI/libraries/armem_vision/OccupancyGridHelper.h"
+#include "RobotAPI/libraries/armem_vision/client/occupancy_grid/Reader.h"
 #include <RobotAPI/libraries/core/remoterobot/RemoteRobot.h>
 
+#include "armarx/navigation/algorithms/astar/NavigationCostMap.h"
+#include <armarx/navigation/algorithms/astar/util.h>
 #include <armarx/navigation/client/NavigationStackConfig.h>
 #include <armarx/navigation/client/PathBuilder.h>
 #include <armarx/navigation/client/ice/NavigatorInterface.h>
@@ -96,6 +102,7 @@ namespace armarx::navigation::components
         eventsWriter(memoryNameSystem()),
         resultsWriter(memoryNameSystem()),
         graphReader(memoryNameSystem()),
+        occupancyGridReader(memoryNameSystem()),
         virtualRobotReader(memoryNameSystem()),
         parameterizationService(&parameterizationReader, &parameterizationWriter)
     // publisher(&resultsWriter, &eventsWriter)
@@ -133,7 +140,7 @@ namespace armarx::navigation::components
         // parameterizationReader.connect();
         parameterizationWriter.connect();
         graphReader.connect();
-
+        occupancyGridReader.connect();
         virtualRobotReader.connect();
 
         // initialize scene
@@ -180,6 +187,7 @@ namespace armarx::navigation::components
         parameterizationWriter.connect();
         graphReader.connect();
         virtualRobotReader.connect();
+        occupancyGridReader.connect();
 
         navRemoteGui->enable();
     }
@@ -385,7 +393,10 @@ namespace armarx::navigation::components
         // def->required(properties.boxLayerName, "p.box.LayerName", "Name of the box layer in ArViz.");
 
         // Add an optionalproperty.
-        // def->optional(properties.numBoxes, "p.box.Number", "Number of boxes to draw in ArViz.");
+        def->optional(params.occupiedGridThreshold,
+                      "p.occupancy_grid.occopied_threshold",
+                      "Threshold for each cell to be considered occupied. Increase this value to "
+                      "reduce noise.");
 
         resultsWriter.registerPropertyDefinitions(def);
         eventsWriter.registerPropertyDefinitions(def);
@@ -393,6 +404,7 @@ namespace armarx::navigation::components
         parameterizationWriter.registerPropertyDefinitions(def);
         graphReader.registerPropertyDefinitions(def);
         virtualRobotReader.registerPropertyDefinitions(def);
+        occupancyGridReader.registerPropertyDefinitions(def);
 
         return def;
     }
@@ -405,7 +417,65 @@ namespace armarx::navigation::components
         const objpose::ObjectPoseSeq objectPoses = ObjectPoseClientPluginUser::getObjectPoses();
         core::StaticScene scene{.objects = util::asSceneObjects(objectPoses)};
 
-        ARMARX_INFO << "The scene consists of " << scene.objects->getSize() << " objects";
+        ARMARX_INFO << "The object scene consists of " << scene.objects->getSize() << " objects";
+
+        const armem::vision::occupancy_grid::client::Reader::Result result =
+            occupancyGridReader.query(armem::vision::occupancy_grid::client::Reader::Query{
+                .providerName = "CartographerMappingAndLocalization",
+                .timestamp = armem::Time::now()});
+
+        if (result and result.occupancyGrid.has_value() and false) // Feature disabled on master ...
+        {
+            ARMARX_INFO << "Occupancy grid available!";
+
+            const auto occupancyGridSceneElements = util::asSceneObjects(
+                result.occupancyGrid.value(),
+                OccupancyGridHelper::Params{.freespaceThreshold = 0.45F,
+                                            .occupiedThreshold = params.occupiedGridThreshold});
+            ARMARX_INFO << occupancyGridSceneElements->getSize()
+                        << " scene elements from occupancy grid";
+
+            scene.objects->addSceneObjects(occupancyGridSceneElements);
+
+            // draw
+            auto layer = arviz.layer("occupancy_grid");
+
+            for (const auto& sceneObject : occupancyGridSceneElements->getSceneObjects())
+            {
+                const Eigen::Isometry3f world_T_obj(sceneObject->getGlobalPose());
+                ARMARX_INFO << world_T_obj.translation();
+                ARMARX_INFO << layer.size();
+                layer.add(viz::Box("box_" + std::to_string(layer.size()))
+                              .pose(world_T_obj)
+                              .size(result.occupancyGrid->resolution)
+                              .color(viz::Color::orange()));
+            }
+
+            ARMARX_INFO << "Creating costmap";
+
+            algorithm::astar::NavigationCostMap costmap(
+                getRobot(),
+                scene.objects,
+                algorithm::astar::NavigationCostMap::Parameters{.binaryGrid = false,
+                                                                .cellSize = 100});
+
+            costmap.createCostmap();
+
+            ARMARX_INFO << "Done";
+
+            ARMARX_TRACE;
+            const auto grid = costmap.getGrid();
+
+            ARMARX_TRACE;
+            ARMARX_INFO << "Dumping.";
+            dumpToFile(grid);
+
+            arviz.commit({layer});
+        }
+        else
+        {
+            ARMARX_INFO << "Occupancy grid not available";
+        }
 
         return scene;
     }
diff --git a/source/armarx/navigation/components/Navigator/Navigator.h b/source/armarx/navigation/components/Navigator/Navigator.h
index 7b5c904c0cb408d4aae336d670afcbd29e77de76..9acc01de474274f3071e61ea905aaad4665dddb8 100644
--- a/source/armarx/navigation/components/Navigator/Navigator.h
+++ b/source/armarx/navigation/components/Navigator/Navigator.h
@@ -39,13 +39,14 @@
 #include <ArmarXGui/interface/RemoteGuiInterface.h>
 #include <ArmarXGui/libraries/ArmarXGuiComponentPlugins/LightweightRemoteGuiComponentPlugin.h>
 
-#include "RobotAPI/libraries/armem_robot/types.h"
-#include "RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotReader.h"
 #include <RobotAPI/interface/units/PlatformUnitInterface.h>
 #include <RobotAPI/libraries/ArmarXObjects/plugins/ObjectPoseClientPlugin.h>
 #include <RobotAPI/libraries/RobotAPIComponentPlugins/ArVizComponentPlugin.h>
 #include <RobotAPI/libraries/RobotAPIComponentPlugins/RobotStateComponentPlugin.h>
 #include <RobotAPI/libraries/armem/client/plugins.h>
+#include <RobotAPI/libraries/armem_robot/types.h>
+#include <RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotReader.h>
+#include <RobotAPI/libraries/armem_vision/client/occupancy_grid/Reader.h>
 
 #include <armarx/navigation/client/ice/NavigatorInterface.h>
 #include <armarx/navigation/components/Navigator/RemoteGui.h>
@@ -190,6 +191,7 @@ namespace armarx::navigation::components
         mem::client::events::Writer eventsWriter;
         mem::client::stack_result::Writer resultsWriter;
         mem::client::graph::Reader graphReader;
+        armem::vision::occupancy_grid::client::Reader occupancyGridReader;
 
         // `robot_state` memory reader and writer
         std::optional<armem::robot::RobotDescription> robotDescription;
@@ -203,5 +205,13 @@ namespace armarx::navigation::components
         std::unordered_map<std::string, std::unique_ptr<server::MemoryPublisher>> memoryPublishers;
 
         core::ChronoMonotonicTimeServer timeServer;
+
+
+        struct Parameters
+        {
+            float occupiedGridThreshold{0.55F};
+        };
+
+        Parameters params;
     };
 } // namespace armarx::navigation::components
diff --git a/source/armarx/navigation/core/CMakeLists.txt b/source/armarx/navigation/core/CMakeLists.txt
index 6332fb90e49edc2aff1daaa377647786c0953061..c9b92d2cbff44766fc100162486d948f27968742 100644
--- a/source/armarx/navigation/core/CMakeLists.txt
+++ b/source/armarx/navigation/core/CMakeLists.txt
@@ -30,23 +30,29 @@ armarx_add_library(core
         time/ChronoMonotonicTimeServer.h
         time/TimeServerInterface.h
     DEPENDENCIES
-        ArmarXCoreInterfaces
-        ArmarXCore
-        ArmarXCoreObservers # variant
-        # RobotAPI
-        aron
-        aroncommon
-        RobotAPIInterfaces
-        SemanticObjectRelations
-        Simox::VirtualRobot
-        range-v3
-        armarx_navigation::core_aron
+        PUBLIC
+            ArmarXCoreInterfaces
+            ArmarXCore
+            ArmarXCoreObservers # variant
+            # RobotAPI
+            aron
+            aroncommon
+            RobotAPIInterfaces
+            SemanticObjectRelations
+            Simox::VirtualRobot
+            armarx_navigation::core_aron
+        PRIVATE
+            range-v3
+
 )
 
 armarx_add_test(core_test
     TEST_FILES
         test/coreTest.cpp
     DEPENDENCIES
-        ArmarXCore
-        armarx_navigation::core
+        PUBLIC
+            ArmarXCore
+            armarx_navigation::core
+        PRIVATE
+            range-v3
 )
diff --git a/source/armarx/navigation/core/test/coreTest.cpp b/source/armarx/navigation/core/test/coreTest.cpp
index 3e1d1051141dae847a259287b58b73fdbd2879d6..8e323a973e14203da03c8e168f4253b1801f8e02 100644
--- a/source/armarx/navigation/core/test/coreTest.cpp
+++ b/source/armarx/navigation/core/test/coreTest.cpp
@@ -27,7 +27,8 @@
 #include <ArmarXCore/core/exceptions/local/ExpressionException.h>
 #include <ArmarXCore/core/logging/Logging.h>
 
-#include "range/v3/view/zip.hpp"
+#include <range/v3/view/zip.hpp>
+
 #include <SemanticObjectRelations/Shapes/Shape.h>
 #include <armarx/navigation/core/Graph.h>
 #include <armarx/navigation/core/Trajectory.h>
diff --git a/source/armarx/navigation/global_planning/AStar.cpp b/source/armarx/navigation/global_planning/AStar.cpp
index 1e6916fa8fc31c6fcc7d8e6c8f7991b0bd149d82..267f0e5905bad45ad5dc96a0e418c50f5f98e0c4 100644
--- a/source/armarx/navigation/global_planning/AStar.cpp
+++ b/source/armarx/navigation/global_planning/AStar.cpp
@@ -3,26 +3,11 @@
 #include <algorithm>
 #include <optional>
 
-#include <range/v3/action.hpp>
-#include <range/v3/action/insert.hpp>
-#include <range/v3/numeric/accumulate.hpp>
-#include <range/v3/range/conversion.hpp>
-#include <range/v3/view/all.hpp>
-#include <range/v3/view/concat.hpp>
-#include <range/v3/view/counted.hpp>
-#include <range/v3/view/for_each.hpp>
-#include <range/v3/view/group_by.hpp>
-#include <range/v3/view/reverse.hpp>
-#include <range/v3/view/sliding.hpp>
-#include <range/v3/view/subrange.hpp>
-#include <range/v3/view/transform.hpp>
-#include <range/v3/view/zip.hpp>
-
 #include <Eigen/Geometry>
 
 #include <VirtualRobot/Visualization/CoinVisualization/CoinVisualizationFactory.h>
 
-#include "ArmarXCore/core/exceptions/LocalException.h"
+#include <ArmarXCore/core/exceptions/LocalException.h>
 #include <ArmarXCore/core/exceptions/local/ExpressionException.h>
 #include <ArmarXCore/core/logging/Logging.h>
 
@@ -144,7 +129,7 @@ namespace armarx::navigation::glob_plan
         }
         catch (...)
         {
-            ARMARX_DEBUG << "Could not plan collision-free path from"
+            ARMARX_INFO << "Could not plan collision-free path from"
                          << "(" << start.translation().x() << "," << start.translation().y() << ")"
                          << " to "
                          << "(" << goal.translation().x() << "," << goal.translation().y() << ")"
@@ -159,7 +144,7 @@ namespace armarx::navigation::glob_plan
 
         if (plan.size() < 2) // failure
         {
-            ARMARX_DEBUG << "Could not plan collision-free path from"
+            ARMARX_INFO << "Could not plan collision-free path from"
                          << "(" << start.translation().x() << "," << start.translation().y() << ")"
                          << " to "
                          << "(" << goal.translation().x() << "," << goal.translation().y() << ")";
@@ -193,9 +178,9 @@ namespace armarx::navigation::glob_plan
         }
 
         // TODO remove start and goal and use plan front and back instead
-        return GlobalPlannerResult{
-            .trajectory = core::Trajectory::FromPath(
-                startPose, wpts, goalPose, params.linearVelocity)}; // FIXME remove
+        // return GlobalPlannerResult{
+        //     .trajectory = core::Trajectory::FromPath(
+        //         startPose, wpts, goalPose, params.linearVelocity)}; // FIXME remove
 
         ARMARX_TRACE;
         auto smoothPlan = postProcessPath(plan);
@@ -228,6 +213,9 @@ namespace armarx::navigation::glob_plan
         ARMARX_IMPORTANT << "Resampled trajectory contains " << resampledTrajectory->points().size()
                          << " points";
 
+        resampledTrajectory->setMaxVelocity(params.linearVelocity);
+
+
         // ARMARX_CHECK(resampledTrajectory.hasMaxDistanceBetweenWaypoints(params.resampleDistance));
 
 
@@ -244,9 +232,10 @@ namespace armarx::navigation::glob_plan
         // TODO circular path smoothing should be done now
 
         algorithm::CircularPathSmoothing smoothing;
-        const auto smoothTrajectory = smoothing.smooth(result.trajectory);
+        auto smoothTrajectory = smoothing.smooth(result.trajectory);
+        smoothTrajectory.setMaxVelocity(params.linearVelocity);
 
         ARMARX_TRACE;
-        return GlobalPlannerResult{.trajectory = smoothTrajectory};
+        return GlobalPlannerResult{.trajectory = result.trajectory};
     }
 } // namespace armarx::navigation::glob_plan
diff --git a/source/armarx/navigation/global_planning/CMakeLists.txt b/source/armarx/navigation/global_planning/CMakeLists.txt
index 43b7e9e6f51aa70a81a4ffc3b9e24605593af720..87d9bd68ab130f67d2dda3b4bbc027bde922dd50 100644
--- a/source/armarx/navigation/global_planning/CMakeLists.txt
+++ b/source/armarx/navigation/global_planning/CMakeLists.txt
@@ -7,13 +7,16 @@ armarx_add_aron_library(global_planning_aron
 
 armarx_add_library(global_planning
     DEPENDENCIES
-        ceres
-        ArmarXCoreInterfaces
-        ArmarXCore
-        aroncommon
-        armarx_navigation::core
-        armarx_navigation::algorithms
-        armarx_navigation::global_planning_aron
+        PUBLIC
+            ceres
+            ArmarXCoreInterfaces
+            ArmarXCore
+            aroncommon
+            armarx_navigation::core
+            armarx_navigation::algorithms
+            armarx_navigation::global_planning_aron
+        PRIVATE
+            range-v3
     SOURCES
         ./GlobalPlanner.cpp
         ./AStar.cpp
diff --git a/source/armarx/navigation/server/CMakeLists.txt b/source/armarx/navigation/server/CMakeLists.txt
index b499b0e95dcfb918c1acd96b924337cd1f68cdb9..8104e0961288945900ac86781bcb671fe3ef4907 100644
--- a/source/armarx/navigation/server/CMakeLists.txt
+++ b/source/armarx/navigation/server/CMakeLists.txt
@@ -35,16 +35,18 @@ armarx_add_library(server
         # parameterization
         ./parameterization/MemoryParameterizationService.h
     DEPENDENCIES
-        ArmarXCoreInterfaces
-        ArmarXCore
-        ArViz # RobotAPI
-        armarx_navigation::core
-        armarx_navigation::global_planning
-        armarx_navigation::local_planning
-        armarx_navigation::trajectory_control
-        armarx_navigation::safety_control
-        armarx_navigation::memory
-        range-v3
+        PUBLIC
+            ArmarXCoreInterfaces
+            ArmarXCore
+            ArViz # RobotAPI
+            armarx_navigation::core
+            armarx_navigation::global_planning
+            armarx_navigation::local_planning
+            armarx_navigation::trajectory_control
+            armarx_navigation::safety_control
+            armarx_navigation::memory
+        PRIVATE
+            range-v3
 )
 
 armarx_add_test(server_test
diff --git a/source/armarx/navigation/server/GraphBuilder.h b/source/armarx/navigation/server/GraphBuilder.h
index b322f5b2b6cd47a8c5fc77f2eaa4b778dd626ae2..5169b9cef69652bdcb6f6a301d50303d22661c73 100644
--- a/source/armarx/navigation/server/GraphBuilder.h
+++ b/source/armarx/navigation/server/GraphBuilder.h
@@ -24,8 +24,6 @@
 #include <cstdint>
 #include <vector>
 
-#include <range/v3/algorithm/permutation.hpp>
-
 #include <SemanticObjectRelations/Shapes/Shape.h>
 #include <armarx/navigation/client/PathBuilder.h>
 #include <armarx/navigation/core/Graph.h>
diff --git a/source/armarx/navigation/server/monitoring/GoalReachedMonitor.h b/source/armarx/navigation/server/monitoring/GoalReachedMonitor.h
index 66a3afd4b065c4b4b4fcdd6cf81d2a76fa2b43d0..9382cbae92a4108d9b453ea506ddc42e4cb76f35 100644
--- a/source/armarx/navigation/server/monitoring/GoalReachedMonitor.h
+++ b/source/armarx/navigation/server/monitoring/GoalReachedMonitor.h
@@ -33,8 +33,8 @@ namespace armarx::navigation::server
 
     struct GoalReachedMonitorConfig
     {
-        float posTh{50.F}; // [mm]
-        float oriTh{0.1F}; // [rad]
+        float posTh{70.F}; // [mm]
+        float oriTh{VirtualRobot::MathTools::deg2rad(5.F)}; // [rad]
 
         float linearVelTh{100.F};                                  // [mm/s]
         float angularVelTh{VirtualRobot::MathTools::deg2rad(5.F)}; // [rad/s]
diff --git a/source/armarx/navigation/statecharts/NavigationGroup/CMakeLists.txt b/source/armarx/navigation/statecharts/NavigationGroup/CMakeLists.txt
index 77a2881fd2425a4db78b5fa0d510262a08636a07..babad93d08c36a94f926522d3a318c6887538942 100644
--- a/source/armarx/navigation/statecharts/NavigationGroup/CMakeLists.txt
+++ b/source/armarx/navigation/statecharts/NavigationGroup/CMakeLists.txt
@@ -4,5 +4,4 @@ armarx_add_statechart(NavigationGroup
     HEADERS
         NavigationGroupRemoteStateOfferer.h
     DEPENDENCIES
-
 )
diff --git a/source/armarx/navigation/statecharts/NavigationGroup/NavigationGroupRemoteStateOfferer.h b/source/armarx/navigation/statecharts/NavigationGroup/NavigationGroupRemoteStateOfferer.h
index d925f3c4227380a01b3d520b3695b8b407bdb1f8..a6fd979f8997c7adbfd507c24e0952e1980c7d7b 100644
--- a/source/armarx/navigation/statecharts/NavigationGroup/NavigationGroupRemoteStateOfferer.h
+++ b/source/armarx/navigation/statecharts/NavigationGroup/NavigationGroupRemoteStateOfferer.h
@@ -29,9 +29,7 @@
 namespace armarx::navigation::statecharts::navigation_group
 {
     class NavigationGroupRemoteStateOfferer :
-        virtual public XMLRemoteStateOfferer<
-            NavigationGroup::
-                NavigationGroupStatechartContext> // Change this statechart context if you need another context (dont forget to change in the constructor as well)
+        virtual public XMLRemoteStateOfferer<NavigationGroup::NavigationGroupStatechartContext>
     {
     public:
         NavigationGroupRemoteStateOfferer(StatechartGroupXmlReaderPtr reader);
diff --git a/source/armarx/navigation/util/CMakeLists.txt b/source/armarx/navigation/util/CMakeLists.txt
index 84e75c4319651b025dc15c24b367f7ae57254b71..03f992bd0ced49f660b0fef641dda4bdf947449d 100644
--- a/source/armarx/navigation/util/CMakeLists.txt
+++ b/source/armarx/navigation/util/CMakeLists.txt
@@ -5,8 +5,11 @@ armarx_add_library(util
         # RobotAPI
         RobotAPIInterfaces
         RobotAPIArmarXObjects
+        armem_vision
         # Simox
         Simox::VirtualRobot
-    SOURCES ./util.cpp
-    HEADERS ./util.h
+    SOURCES
+        ./util.cpp
+    HEADERS
+        ./util.h
 )
diff --git a/source/armarx/navigation/util/util.cpp b/source/armarx/navigation/util/util.cpp
index 4496f200fce10d667f9032122242e24bf2938e7f..ba409ab3b12782d07b3bc5113b026a681c69b204 100644
--- a/source/armarx/navigation/util/util.cpp
+++ b/source/armarx/navigation/util/util.cpp
@@ -23,10 +23,23 @@
 
 #include "util.h"
 
+#include <string>
+
+#include <Eigen/Geometry>
+
+#include <VirtualRobot/CollisionDetection/CollisionModel.h>
 #include <VirtualRobot/ManipulationObject.h>
+#include <VirtualRobot/Primitive.h>
 #include <VirtualRobot/SceneObjectSet.h>
+#include <VirtualRobot/VirtualRobot.h>
+#include <VirtualRobot/Visualization/CoinVisualization/CoinVisualizationFactory.h>
+#include <VirtualRobot/Visualization/VisualizationNode.h>
 
+#include <ArmarXCore/core/exceptions/local/ExpressionException.h>
+
+#include <RobotAPI/libraries/core/FramedPose.h>
 #include <RobotAPI/libraries/ArmarXObjects/ObjectFinder.h>
+#include <RobotAPI/libraries/armem_vision/OccupancyGridHelper.h>
 
 namespace armarx::navigation::util
 {
@@ -48,4 +61,56 @@ namespace armarx::navigation::util
 
         return sceneObjects;
     }
+
+    VirtualRobot::SceneObjectSetPtr
+    asSceneObjects(const armem::OccupancyGrid& occupancyGrid, const OccupancyGridHelper::Params& params)
+    {
+        const OccupancyGridHelper ocHelper(occupancyGrid, params);
+        const auto obstacles = ocHelper.obstacles();
+
+        const float boxSize = occupancyGrid.resolution;
+        const float resolution = occupancyGrid.resolution;
+
+        VirtualRobot::SceneObjectSetPtr sceneObjects(new VirtualRobot::SceneObjectSet);
+
+        ARMARX_CHECK_EQUAL(occupancyGrid.frame, GlobalFrame)
+            << "Only occupancy grid in global frame supported.";
+
+        VirtualRobot::CoinVisualizationFactory factory;
+
+        const auto& world_T_map = occupancyGrid.pose;
+
+        for (int x = 0; x < obstacles.rows(); x++)
+        {
+            for (int y = 0; y < obstacles.cols(); y++)
+            {
+                if (obstacles(x, y))
+                {
+                    const Eigen::Vector3f pos{
+                        static_cast<float>(x * resolution), static_cast<float>(y * resolution), 0};
+
+                    // FIXME: change to Isometry3f
+                    Eigen::Affine3f map_T_obj = Eigen::Affine3f::Identity();
+                    map_T_obj.translation() = pos;
+
+                    Eigen::Affine3f world_T_obj = world_T_map * map_T_obj;
+
+                    // ARMARX_INFO << world_T_obj.translation();
+
+                    auto cube = factory.createBox(boxSize, boxSize, boxSize);
+
+                    VirtualRobot::CollisionModelPtr collisionModel(
+                        new VirtualRobot::CollisionModel(cube));
+
+                    VirtualRobot::SceneObjectPtr sceneObject(new VirtualRobot::SceneObject(
+                        "box_" + std::to_string(sceneObjects->getSize()), cube, collisionModel));
+                    sceneObject->setGlobalPose(world_T_obj.matrix());
+
+                    sceneObjects->addSceneObject(sceneObject);
+                }
+            }
+        }
+
+        return sceneObjects;
+    }
 } // namespace armarx::navigation::util
diff --git a/source/armarx/navigation/util/util.h b/source/armarx/navigation/util/util.h
index 5941d8dc77bbbc19607848bf6631e1a36c476209..c15487f1ae194847c8a53e74fa52f389ba786dcd 100644
--- a/source/armarx/navigation/util/util.h
+++ b/source/armarx/navigation/util/util.h
@@ -25,10 +25,13 @@
 #include <VirtualRobot/VirtualRobot.h>
 
 #include <RobotAPI/libraries/ArmarXObjects/ObjectPose.h>
+#include <RobotAPI/libraries/armem_vision/types.h>
+#include <RobotAPI/libraries/armem_vision/OccupancyGridHelper.h>
 
 namespace armarx::navigation::util
 {
 
     VirtualRobot::SceneObjectSetPtr asSceneObjects(const objpose::ObjectPoseSeq& objectPoses);
+    VirtualRobot::SceneObjectSetPtr asSceneObjects(const armem::OccupancyGrid& occupancyGrid, const OccupancyGridHelper::Params& params);
 
 } // namespace armarx::navigation::util