diff --git a/scenarios/ArMemObjectMemory/config/ArVizStorage.cfg b/scenarios/ArMemObjectMemory/config/ArVizStorage.cfg
index 0dcbd8d5775b8c0f562bba62b5f2fe282e2da6d0..302ac28c37dd28de3e68fb4fe4c2174faa4ec3bf 100644
--- a/scenarios/ArMemObjectMemory/config/ArVizStorage.cfg
+++ b/scenarios/ArMemObjectMemory/config/ArVizStorage.cfg
@@ -27,7 +27,7 @@
 # ArmarX.ArVizStorage.EnableProfiling = false
 
 
-# ArmarX.ArVizStorage.HistoryPath:  Destination path where the history are serialized to
+# ArmarX.ArVizStorage.HistoryPath:  Destination path where the history is serialized to
 #  Attributes:
 #  - Default:            RobotAPI/ArVizStorage
 #  - Case sensitivity:   yes
@@ -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/ArMemObjectMemory/config/ArticulatedObjectLocalizerExample.cfg b/scenarios/ArMemObjectMemory/config/ArticulatedObjectLocalizerExample.cfg
index 9d225df2f4efadbb731a79fd45dbf852189ec80b..ce2498f12be6b0ce2cd02bfab3ebdc4140a797ca 100644
--- a/scenarios/ArMemObjectMemory/config/ArticulatedObjectLocalizerExample.cfg
+++ b/scenarios/ArMemObjectMemory/config/ArticulatedObjectLocalizerExample.cfg
@@ -60,12 +60,19 @@
 # ArmarX.ArticulatedObjectLocalizerExample.mem.obj.articulated.MemoryName = Object
 
 
-# ArmarX.ArticulatedObjectLocalizerExample.mem.obj.articulated.ProviderName:  
+# ArmarX.ArticulatedObjectLocalizerExample.mem.obj.articulated.read.ProviderName:  
 #  Attributes:
 #  - Default:            PriorKnowledgeData
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.ArticulatedObjectLocalizerExample.mem.obj.articulated.ProviderName = PriorKnowledgeData
+# ArmarX.ArticulatedObjectLocalizerExample.mem.obj.articulated.read.ProviderName = PriorKnowledgeData
+
+
+# ArmarX.ArticulatedObjectLocalizerExample.mem.obj.articulated.write.ProviderName:  Name of this provider
+#  Attributes:
+#  - Case sensitivity:   yes
+#  - Required:           yes
+ArmarX.ArticulatedObjectLocalizerExample.mem.obj.articulated.write.ProviderName = sim_track
 
 
 # ArmarX.ArticulatedObjectLocalizerExample.mns.MemoryNameSystemEnabled:  Whether to use (and depend on) the Memory Name System (MNS).
@@ -94,14 +101,6 @@
 # ArmarX.ArticulatedObjectLocalizerExample.tpc.pub.DebugObserver = DebugObserver
 
 
-# ArmarX.ArticulatedObjectLocalizerExample.tpc.sub.MemoryListener:  Name of the `MemoryListener` topic to subscribe to.
-#  Attributes:
-#  - Default:            MemoryUpdates
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.ArticulatedObjectLocalizerExample.tpc.sub.MemoryListener = MemoryUpdates
-
-
 # ArmarX.ArticulatedObjectLocalizerExample.updateFrequency:  Memory update frequency (write).
 #  Attributes:
 #  - Default:            25
@@ -110,7 +109,7 @@
 # ArmarX.ArticulatedObjectLocalizerExample.updateFrequency = 25
 
 
-# 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/ArMemObjectMemory/config/DebugObserver.cfg b/scenarios/ArMemObjectMemory/config/DebugObserver.cfg
index 4a0b9dac036cd4d103efd7d1b718d508f285d85a..8dc7ead26b3bd2f7678b3b3e7a1b00c01213225d 100644
--- a/scenarios/ArMemObjectMemory/config/DebugObserver.cfg
+++ b/scenarios/ArMemObjectMemory/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/ArMemObjectMemory/config/MemoryNameSystem.cfg b/scenarios/ArMemObjectMemory/config/MemoryNameSystem.cfg
index 7dd22218243ca4f9e67e843da8b42916f3b8568a..b8bc70a66ca7f32a628886ad1bf13e373f9750d3 100644
--- a/scenarios/ArMemObjectMemory/config/MemoryNameSystem.cfg
+++ b/scenarios/ArMemObjectMemory/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/ArMemObjectMemory/config/ObjectMemory.cfg b/scenarios/ArMemObjectMemory/config/ObjectMemory.cfg
index e67a4c41162632026046dc8402466d2deb7ee233..5e0858b92c6caa5e2aba4453dac7bacef8367318 100644
--- a/scenarios/ArMemObjectMemory/config/ObjectMemory.cfg
+++ b/scenarios/ArMemObjectMemory/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
@@ -92,6 +92,14 @@
 # ArmarX.LoggingGroup = ""
 
 
+# ArmarX.ObjectMemory.ArVizStorageName:  Name of the ArViz storage
+#  Attributes:
+#  - Default:            ArVizStorage
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.ObjectMemory.ArVizStorageName = ArVizStorage
+
+
 # ArmarX.ObjectMemory.ArVizTopicName:  Name of the ArViz topic
 #  Attributes:
 #  - Default:            ArVizTopic
@@ -134,14 +142,6 @@
 # ArmarX.ObjectMemory.RemoteGuiName = RemoteGuiProvider
 
 
-# ArmarX.ObjectMemory.RemoteStateComponentName:  Name of the robot state component
-#  Attributes:
-#  - Default:            RobotStateComponent
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.ObjectMemory.RemoteStateComponentName = RobotStateComponent
-
-
 # ArmarX.ObjectMemory.cmp.KinematicUnitObserverName:  Name of the kinematic unit observer.
 #  Attributes:
 #  - Default:            KinematicUnitObserver
@@ -150,55 +150,6 @@
 # ArmarX.ObjectMemory.cmp.KinematicUnitObserverName = KinematicUnitObserver
 
 
-# ArmarX.ObjectMemory.ltm.00_enabled:  
-#  Attributes:
-#  - Default:            true
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.ObjectMemory.ltm.00_enabled = true
-
-
-# ArmarX.ObjectMemory.ltm.10_host:  
-#  Attributes:
-#  - Default:            localhost
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.ObjectMemory.ltm.10_host = localhost
-
-
-# ArmarX.ObjectMemory.ltm.11_port:  
-#  Attributes:
-#  - Default:            25270
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.ObjectMemory.ltm.11_port = 25270
-
-
-# ArmarX.ObjectMemory.ltm.20_user:  
-#  Attributes:
-#  - Default:            ""
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.ObjectMemory.ltm.20_user = ""
-
-
-# ArmarX.ObjectMemory.ltm.21_password:  
-#  Attributes:
-#  - Default:            ""
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.ObjectMemory.ltm.21_password = ""
-
-
-# ArmarX.ObjectMemory.ltm.22_database:  
-#  Attributes:
-#  - Default:            Test
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.ObjectMemory.ltm.22_database = Test
-
-
 # ArmarX.ObjectMemory.mem.MemoryName:  Name of this memory server.
 #  Attributes:
 #  - Default:            Object
@@ -207,55 +158,6 @@
 # ArmarX.ObjectMemory.mem.MemoryName = Object
 
 
-# ArmarX.ObjectMemory.mem.articulated.cls.CoreSegmentName:  Name of the object instance core segment.
-#  Attributes:
-#  - Default:            ArticulatedObjectClass
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.ObjectMemory.mem.articulated.cls.CoreSegmentName = ArticulatedObjectClass
-
-
-# ArmarX.ObjectMemory.mem.articulated.cls.LoadFromObjectsPackage:  If true, load the objects from the objects package on startup.
-#  Attributes:
-#  - Default:            true
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.ObjectMemory.mem.articulated.cls.LoadFromObjectsPackage = true
-
-
-# ArmarX.ObjectMemory.mem.articulated.cls.MaxHistorySize:  Maximal size of object poses history (-1 for infinite).
-#  Attributes:
-#  - Default:            -1
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.ObjectMemory.mem.articulated.cls.MaxHistorySize = -1
-
-
-# ArmarX.ObjectMemory.mem.articulated.cls.ObjectsPackage:  Name of the objects package to load from.
-#  Attributes:
-#  - Default:            PriorKnowledgeData
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.ObjectMemory.mem.articulated.cls.ObjectsPackage = PriorKnowledgeData
-
-
-# ArmarX.ObjectMemory.mem.articulated.inst.CoreSegmentName:  Name of the object instance core segment.
-#  Attributes:
-#  - Default:            ArticulatedObjectInstance
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.ObjectMemory.mem.articulated.inst.CoreSegmentName = ArticulatedObjectInstance
-
-
-# ArmarX.ObjectMemory.mem.articulated.inst.MaxHistorySize:  Maximal size of object poses history (-1 for infinite).
-#  Attributes:
-#  - Default:            -1
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.ObjectMemory.mem.articulated.inst.MaxHistorySize = -1
-
-
 # ArmarX.ObjectMemory.mem.attachments.CoreSegmentName:  Name of the object instance core segment.
 #  Attributes:
 #  - Default:            Attachments
@@ -272,14 +174,6 @@
 # ArmarX.ObjectMemory.mem.attachments.MaxHistorySize = -1
 
 
-# ArmarX.ObjectMemory.mem.cls.CoreSegmentName:  Name of the object clazz core segment.
-#  Attributes:
-#  - Default:            Class
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.ObjectMemory.mem.cls.CoreSegmentName = Class
-
-
 # ArmarX.ObjectMemory.mem.cls.Floor.EntityName:  Object class entity of the floor.
 #  Attributes:
 #  - Default:            Building/floor-20x20
@@ -323,28 +217,28 @@
 # ArmarX.ObjectMemory.mem.cls.LoadFromObjectsPackage = true
 
 
-# ArmarX.ObjectMemory.mem.cls.MaxHistorySize:  Maximal size of object poses history (-1 for infinite).
+# ArmarX.ObjectMemory.mem.cls.ObjectsPackage:  Name of the objects package to load from.
 #  Attributes:
-#  - Default:            -1
+#  - Default:            PriorKnowledgeData
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.ObjectMemory.mem.cls.MaxHistorySize = -1
+# ArmarX.ObjectMemory.mem.cls.ObjectsPackage = PriorKnowledgeData
 
 
-# ArmarX.ObjectMemory.mem.cls.ObjectsPackage:  Name of the objects package to load from.
+# ArmarX.ObjectMemory.mem.cls.seg.CoreMaxHistorySize:  Maximal size of the Class entity histories (-1 for infinite).
 #  Attributes:
-#  - Default:            PriorKnowledgeData
+#  - Default:            -1
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.ObjectMemory.mem.cls.ObjectsPackage = PriorKnowledgeData
+# ArmarX.ObjectMemory.mem.cls.seg.CoreMaxHistorySize = -1
 
 
-# ArmarX.ObjectMemory.mem.inst.CoreSegmentName:  Name of the object instance core segment.
+# ArmarX.ObjectMemory.mem.cls.seg.CoreSegmentName:  Name of the Class core segment.
 #  Attributes:
-#  - Default:            Instance
+#  - Default:            Class
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.ObjectMemory.mem.inst.CoreSegmentName = Instance
+# ArmarX.ObjectMemory.mem.cls.seg.CoreSegmentName = Class
 
 
 # ArmarX.ObjectMemory.mem.inst.DiscardSnapshotsWhileAttached:  If true, no new snapshots are stored while an object is attached to a robot node.
@@ -357,14 +251,6 @@
 # ArmarX.ObjectMemory.mem.inst.DiscardSnapshotsWhileAttached = true
 
 
-# ArmarX.ObjectMemory.mem.inst.MaxHistorySize:  Maximal size of object poses history (-1 for infinite).
-#  Attributes:
-#  - Default:            25
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.ObjectMemory.mem.inst.MaxHistorySize = 25
-
-
 # ArmarX.ObjectMemory.mem.inst.calibration.offset:  Offset for the node to be calibrated.
 #  Attributes:
 #  - Default:            0
@@ -472,8 +358,9 @@
 # ArmarX.ObjectMemory.mem.inst.scene.11_Directory = scenes
 
 
-# ArmarX.ObjectMemory.mem.inst.scene.12_SnapshotToLoad:  Scene snapshot to load on startup (e.g. 'Scene_2021-06-24_20-20-03').
-# You can also specify paths relative to 'Package/scenes/'.
+# ArmarX.ObjectMemory.mem.inst.scene.12_SnapshotToLoad:  Scene to load on startup (e.g. 'Scene_2021-06-24_20-20-03').
+# You can also specify paths relative to 'Package/scenes/'. 
+# You can also specify a ; separated list of scenes.
 #  Attributes:
 #  - Default:            ""
 #  - Case sensitivity:   yes
@@ -481,6 +368,22 @@
 # ArmarX.ObjectMemory.mem.inst.scene.12_SnapshotToLoad = ""
 
 
+# ArmarX.ObjectMemory.mem.inst.seg.CoreMaxHistorySize:  Maximal size of the Instance entity histories (-1 for infinite).
+#  Attributes:
+#  - Default:            64
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.ObjectMemory.mem.inst.seg.CoreMaxHistorySize = 64
+
+
+# ArmarX.ObjectMemory.mem.inst.seg.CoreSegmentName:  Name of the Instance core segment.
+#  Attributes:
+#  - Default:            Instance
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.ObjectMemory.mem.inst.seg.CoreSegmentName = Instance
+
+
 # ArmarX.ObjectMemory.mem.inst.visu.alpha:  Alpha of objects (1 = solid, 0 = transparent).
 #  Attributes:
 #  - Default:            1
@@ -515,6 +418,32 @@
 # ArmarX.ObjectMemory.mem.inst.visu.frequenzyHz = 25
 
 
+# ArmarX.ObjectMemory.mem.inst.visu.gaussians.position:  Enable showing pose gaussians (orientation part).
+#  Attributes:
+#  - Default:            false
+#  - Case sensitivity:   yes
+#  - Required:           no
+#  - Possible values: {0, 1, false, no, true, yes}
+# ArmarX.ObjectMemory.mem.inst.visu.gaussians.position = false
+
+
+# ArmarX.ObjectMemory.mem.inst.visu.gaussians.positionDisplaced:  Displace center orientation (co)variance circle arrows along their rotation axis.
+#  Attributes:
+#  - Default:            false
+#  - Case sensitivity:   yes
+#  - Required:           no
+#  - Possible values: {0, 1, false, no, true, yes}
+# ArmarX.ObjectMemory.mem.inst.visu.gaussians.positionDisplaced = false
+
+
+# ArmarX.ObjectMemory.mem.inst.visu.gaussians.positionScale:  Scaling of pose gaussians (orientation part).
+#  Attributes:
+#  - Default:            100
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.ObjectMemory.mem.inst.visu.gaussians.positionScale = 100
+
+
 # ArmarX.ObjectMemory.mem.inst.visu.inGlobalFrame:  If true, show global poses. If false, show poses in robot frame.
 #  Attributes:
 #  - Default:            true
@@ -550,6 +479,31 @@
 # ArmarX.ObjectMemory.mem.inst.visu.oobbs = false
 
 
+# ArmarX.ObjectMemory.mem.inst.visu.predictions.linear.show:  Show arrows linearly predicting object positions.
+#  Attributes:
+#  - Default:            false
+#  - Case sensitivity:   yes
+#  - Required:           no
+#  - Possible values: {0, 1, false, no, true, yes}
+# ArmarX.ObjectMemory.mem.inst.visu.predictions.linear.show = false
+
+
+# ArmarX.ObjectMemory.mem.inst.visu.predictions.linear.timeOffset:  The offset (in seconds) to the current time to make predictions for.
+#  Attributes:
+#  - Default:            1
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.ObjectMemory.mem.inst.visu.predictions.linear.timeOffset = 1
+
+
+# ArmarX.ObjectMemory.mem.inst.visu.predictions.linear.timeWindow:  The time window (in seconds) into the past to perform the regression on.
+#  Attributes:
+#  - Default:            2
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.ObjectMemory.mem.inst.visu.predictions.linear.timeWindow = 2
+
+
 # ArmarX.ObjectMemory.mem.inst.visu.useArticulatedModels:  Prefer articulated object models if available.
 #  Attributes:
 #  - Default:            true
@@ -559,6 +513,158 @@
 # ArmarX.ObjectMemory.mem.inst.visu.useArticulatedModels = true
 
 
+# ArmarX.ObjectMemory.mem.ltm..buffer.storeFreq:  Frequency to store the buffer to the LTM in Hz.
+#  Attributes:
+#  - Default:            10
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.ObjectMemory.mem.ltm..buffer.storeFreq = 10
+
+
+# ArmarX.ObjectMemory.mem.ltm.depthImageExtractor.Enabled:  
+#  Attributes:
+#  - Default:            true
+#  - Case sensitivity:   yes
+#  - Required:           no
+#  - Possible values: {0, 1, false, no, true, yes}
+# ArmarX.ObjectMemory.mem.ltm.depthImageExtractor.Enabled = true
+
+
+# ArmarX.ObjectMemory.mem.ltm.enabled:  
+#  Attributes:
+#  - Default:            false
+#  - Case sensitivity:   yes
+#  - Required:           no
+#  - Possible values: {0, 1, false, no, true, yes}
+# ArmarX.ObjectMemory.mem.ltm.enabled = false
+
+
+# ArmarX.ObjectMemory.mem.ltm.exrConverter.Enabled:  
+#  Attributes:
+#  - Default:            true
+#  - Case sensitivity:   yes
+#  - Required:           no
+#  - Possible values: {0, 1, false, no, true, yes}
+# ArmarX.ObjectMemory.mem.ltm.exrConverter.Enabled = true
+
+
+# ArmarX.ObjectMemory.mem.ltm.imageExtractor.Enabled:  
+#  Attributes:
+#  - Default:            true
+#  - Case sensitivity:   yes
+#  - Required:           no
+#  - Possible values: {0, 1, false, no, true, yes}
+# ArmarX.ObjectMemory.mem.ltm.imageExtractor.Enabled = true
+
+
+# ArmarX.ObjectMemory.mem.ltm.memFreqFilter.Enabled:  
+#  Attributes:
+#  - Default:            false
+#  - Case sensitivity:   yes
+#  - Required:           no
+#  - Possible values: {0, 1, false, no, true, yes}
+# ArmarX.ObjectMemory.mem.ltm.memFreqFilter.Enabled = false
+
+
+# ArmarX.ObjectMemory.mem.ltm.memFreqFilter.WaitingTime:  Waiting time in MS after each LTM update.
+#  Attributes:
+#  - Default:            -1
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.ObjectMemory.mem.ltm.memFreqFilter.WaitingTime = -1
+
+
+# ArmarX.ObjectMemory.mem.ltm.pngConverter.Enabled:  
+#  Attributes:
+#  - Default:            true
+#  - Case sensitivity:   yes
+#  - Required:           no
+#  - Possible values: {0, 1, false, no, true, yes}
+# ArmarX.ObjectMemory.mem.ltm.pngConverter.Enabled = true
+
+
+# ArmarX.ObjectMemory.mem.ltm.sizeToCompressDataInMegaBytes:  The size in MB to compress away the current export. Exports are numbered (lower number means newer).
+#  Attributes:
+#  - Default:            1024
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.ObjectMemory.mem.ltm.sizeToCompressDataInMegaBytes = 1024
+
+
+# ArmarX.ObjectMemory.mem.ltm.snapEqFilter.Enabled:  
+#  Attributes:
+#  - Default:            false
+#  - Case sensitivity:   yes
+#  - Required:           no
+#  - Possible values: {0, 1, false, no, true, yes}
+# ArmarX.ObjectMemory.mem.ltm.snapEqFilter.Enabled = false
+
+
+# ArmarX.ObjectMemory.mem.ltm.snapEqFilter.MaxWaitingTime:  Max Waiting time in MS after each Entity update.
+#  Attributes:
+#  - Default:            -1
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.ObjectMemory.mem.ltm.snapEqFilter.MaxWaitingTime = -1
+
+
+# ArmarX.ObjectMemory.mem.ltm.snapFreqFilter.Enabled:  
+#  Attributes:
+#  - Default:            false
+#  - Case sensitivity:   yes
+#  - Required:           no
+#  - Possible values: {0, 1, false, no, true, yes}
+# ArmarX.ObjectMemory.mem.ltm.snapFreqFilter.Enabled = false
+
+
+# ArmarX.ObjectMemory.mem.ltm.snapFreqFilter.WaitingTime:  Waiting time in MS after each Entity update.
+#  Attributes:
+#  - Default:            -1
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.ObjectMemory.mem.ltm.snapFreqFilter.WaitingTime = -1
+
+
+# ArmarX.ObjectMemory.mem.ltm.storagepath:  The path to the memory storage (the memory will be stored in a seperate subfolder).
+#  Attributes:
+#  - Default:            Default value not mapped.
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.ObjectMemory.mem.ltm.storagepath = Default value not mapped.
+
+
+# ArmarX.ObjectMemory.mem.robot_state.Memory:  
+#  Attributes:
+#  - Default:            RobotState
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.ObjectMemory.mem.robot_state.Memory = RobotState
+
+
+# ArmarX.ObjectMemory.mem.robot_state.descriptionSegment:  
+#  Attributes:
+#  - Default:            Description
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.ObjectMemory.mem.robot_state.descriptionSegment = Description
+
+
+# ArmarX.ObjectMemory.mem.robot_state.localizationSegment:  
+#  Attributes:
+#  - Default:            Localization
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.ObjectMemory.mem.robot_state.localizationSegment = Localization
+
+
+# ArmarX.ObjectMemory.mem.robot_state.proprioceptionSegment:  
+#  Attributes:
+#  - Default:            Proprioception
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.ObjectMemory.mem.robot_state.proprioceptionSegment = Proprioception
+
+
 # ArmarX.ObjectMemory.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:
@@ -577,28 +683,28 @@
 # ArmarX.ObjectMemory.mns.MemoryNameSystemName = MemoryNameSystem
 
 
-# ArmarX.ObjectMemory.tpc.pub.DebugObserver:  Name of the `DebugObserver` topic to publish data to.
+# ArmarX.ObjectMemory.prediction.TimeWindow:  Duration of time window into the past to use for predictions when requested via the PredictingMemoryInterface (in seconds).
 #  Attributes:
-#  - Default:            DebugObserver
+#  - Default:            2
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.ObjectMemory.tpc.pub.DebugObserver = DebugObserver
+# ArmarX.ObjectMemory.prediction.TimeWindow = 2
 
 
-# ArmarX.ObjectMemory.tpc.pub.MemoryListener:  Name of the `MemoryListener` topic to publish data to.
+# ArmarX.ObjectMemory.robotName:  
 #  Attributes:
-#  - Default:            MemoryUpdates
+#  - Default:            Armar6
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.ObjectMemory.tpc.pub.MemoryListener = MemoryUpdates
+# ArmarX.ObjectMemory.robotName = Armar6
 
 
-# ArmarX.ObjectMemory.tpc.sub.MemoryListener:  Name of the `MemoryListener` topic to subscribe to.
+# ArmarX.ObjectMemory.tpc.pub.DebugObserver:  Name of the `DebugObserver` topic to publish data to.
 #  Attributes:
-#  - Default:            MemoryUpdates
+#  - Default:            DebugObserver
 #  - Case sensitivity:   yes
 #  - Required:           no
-# ArmarX.ObjectMemory.tpc.sub.MemoryListener = MemoryUpdates
+# ArmarX.ObjectMemory.tpc.pub.DebugObserver = DebugObserver
 
 
 # ArmarX.ObjectMemory.tpc.sub.ObjectPoseTopic:  Name of the `ObjectPoseTopic` topic to subscribe to.
diff --git a/scenarios/ArMemObjectMemory/config/ObjectPoseClientExample.cfg b/scenarios/ArMemObjectMemory/config/ObjectPoseClientExample.cfg
index f75bad15e903fd399e990eb38dce28887c537d98..e64f75326949fb3263f378a19067aa2b8f85c00d 100644
--- a/scenarios/ArMemObjectMemory/config/ObjectPoseClientExample.cfg
+++ b/scenarios/ArMemObjectMemory/config/ObjectPoseClientExample.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
@@ -92,6 +92,14 @@
 # ArmarX.LoggingGroup = ""
 
 
+# ArmarX.ObjectPoseClientExample.ArVizStorageName:  Name of the ArViz storage
+#  Attributes:
+#  - Default:            ArVizStorage
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.ObjectPoseClientExample.ArVizStorageName = ArVizStorage
+
+
 # ArmarX.ObjectPoseClientExample.ArVizTopicName:  Name of the ArViz topic
 #  Attributes:
 #  - Default:            ArVizTopic
@@ -142,6 +150,22 @@
 # ArmarX.ObjectPoseClientExample.ObjectName = ""
 
 
+# ArmarX.ObjectPoseClientExample.predictions.NumberPerObject:  How many predictions with increasing time offsets to make per object.
+#  Attributes:
+#  - Default:            5
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.ObjectPoseClientExample.predictions.NumberPerObject = 5
+
+
+# ArmarX.ObjectPoseClientExample.predictions.TimeIncrement:  The size of the prediction time offset increment in milliseconds.
+#  Attributes:
+#  - Default:            200
+#  - Case sensitivity:   yes
+#  - Required:           no
+# ArmarX.ObjectPoseClientExample.predictions.TimeIncrement = 200
+
+
 # ArmarX.RedirectStdout:  Redirect std::cout and std::cerr to ArmarXLog
 #  Attributes:
 #  - Default:            true
diff --git a/scenarios/ArMemObjectMemory/config/ObjectPoseProviderExample.cfg b/scenarios/ArMemObjectMemory/config/ObjectPoseProviderExample.cfg
index 76fbf317102eb56ab01bfd0037544c69f85c6c27..5cb44d32cf1e0a1d8fea853e5b8c07603c4a0c6f 100644
--- a/scenarios/ArMemObjectMemory/config/ObjectPoseProviderExample.cfg
+++ b/scenarios/ArMemObjectMemory/config/ObjectPoseProviderExample.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/ArMemObjectMemory/config/RemoteGuiProviderApp.cfg b/scenarios/ArMemObjectMemory/config/RemoteGuiProviderApp.cfg
index 4fd690cefd94559b207493cf40e346a3e47f3b12..4b6abea40d72afd7d313ee47a9b191f3b26de30d 100644
--- a/scenarios/ArMemObjectMemory/config/RemoteGuiProviderApp.cfg
+++ b/scenarios/ArMemObjectMemory/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/ArViz/config/ArVizStorage.cfg b/scenarios/ArViz/config/ArVizStorage.cfg
index 30b8ea5904d318cf689370e81d3d3a7c47d07a68..302ac28c37dd28de3e68fb4fe4c2174faa4ec3bf 100644
--- a/scenarios/ArViz/config/ArVizStorage.cfg
+++ b/scenarios/ArViz/config/ArVizStorage.cfg
@@ -27,7 +27,7 @@
 # ArmarX.ArVizStorage.EnableProfiling = false
 
 
-# ArmarX.ArVizStorage.HistoryPath:  Destination path where the history are serialized to
+# ArmarX.ArVizStorage.HistoryPath:  Destination path where the history is serialized to
 #  Attributes:
 #  - Default:            RobotAPI/ArVizStorage
 #  - Case sensitivity:   yes
diff --git a/source/RobotAPI/gui-plugins/HandUnitPlugin/HandUnitGuiPlugin.cpp b/source/RobotAPI/gui-plugins/HandUnitPlugin/HandUnitGuiPlugin.cpp
index 5c86b2dda49248a4148b5f3c83785272a94789f9..e838c4e7737fa9aa06a911b524e8f1b134ba704a 100644
--- a/source/RobotAPI/gui-plugins/HandUnitPlugin/HandUnitGuiPlugin.cpp
+++ b/source/RobotAPI/gui-plugins/HandUnitPlugin/HandUnitGuiPlugin.cpp
@@ -46,8 +46,10 @@ namespace armarx
     }
 
     HandUnitWidget::HandUnitWidget() :
-        handName("NOT SET YET"),
-        handUnitProxyName(""),
+        leftHandName("NOT SET YET"),
+        rightHandName("NOT SET YET"),
+        leftHandUnitProxyName(""),
+        rightHandUnitProxyName(""),
         setJointAnglesFlag(false)
     {
         // init gui
@@ -60,7 +62,8 @@ namespace armarx
 
     void HandUnitWidget::onInitComponent()
     {
-        usingProxy(handUnitProxyName);
+        usingProxy(leftHandUnitProxyName);
+        usingProxy(rightHandUnitProxyName);
         //usingTopic(handName + "State");
         //ARMARX_WARNING << "Listening on Topic: " << handName + "State";
     }
@@ -71,19 +74,19 @@ namespace armarx
         jointAngleUpdateTask->start();
         updateInfoTimer->start(50);
 
-        handUnitProxy = getProxy<HandUnitInterfacePrx>(handUnitProxyName);
-        handName = handUnitProxy->getHandName();
+        leftHandUnitProxy = getProxy<HandUnitInterfacePrx>(leftHandUnitProxyName);
+        leftHandName = leftHandUnitProxy->getHandName();
 
         // @@@ In simulation hand is called 'Hand L'/'Hand R'. On 3b Hand is called 'TCP R'
-        if (handName != "Hand L" && handName != "Hand R" && handName != "TCP L" && handName != "TCP R")
+        if (leftHandName != "Hand L" && leftHandName != "Hand R" && leftHandName != "TCP L" && leftHandName != "TCP R")
         {
             //QMessageBox::warning(NULL, "Hand not supported", QString("Hand with name \"") + QString::fromStdString(handName) + " \" is not suppored.");
-            ARMARX_WARNING << "Hand with name \"" << handName << "\" is not supported.";
+            ARMARX_WARNING << "Hand with name \"" << leftHandName << "\" is not supported.";
         }
 
         //ui.labelInfo->setText(QString::fromStdString(handUnitProxyName + " :: " + handName));
 
-        SingleTypeVariantListPtr preshapeStrings = SingleTypeVariantListPtr::dynamicCast(handUnitProxy->getShapeNames());
+        SingleTypeVariantListPtr preshapeStrings = SingleTypeVariantListPtr::dynamicCast(leftHandUnitProxy->getShapeNames());
         QStringList list;
         int preshapeCount = preshapeStrings->getSize();
 
@@ -121,7 +124,7 @@ namespace armarx
 
     void HandUnitWidget::configured()
     {
-        handUnitProxyName = dialog->proxyFinder->getSelectedProxyName().toStdString();
+        leftHandUnitProxyName = dialog->proxyFinder->getSelectedProxyName().toStdString();
     }
 
     void HandUnitWidget::preshapeHand()
@@ -131,7 +134,7 @@ namespace armarx
 
     void HandUnitWidget::setJointAngles()
     {
-        if (!handUnitProxy)
+        if (!leftHandUnitProxy)
         {
             ARMARX_WARNING << "invalid proxy";
             return;
@@ -146,7 +149,7 @@ namespace armarx
 
         NameValueMap ja;
 
-        if (handName == "Hand L" || handName == "TCP L")
+        if (leftHandName == "Hand L" || leftHandName == "TCP L")
         {
             ja["Hand Palm 2 L"] = ui.horizontalSliderPalm->value() * M_PI / 180;
             ja["Index L J0"] = ui.horizontalSliderIndexJ0->value() * M_PI / 180;
@@ -161,7 +164,7 @@ namespace armarx
             ja["Pinky L J0"] = rinkyValue;
             ja["Pinky L J1"] = rinkyValue;
         }
-        else if (handName == "Hand R" || handName == "TCP R")
+        else if (leftHandName == "Hand R" || leftHandName == "TCP R")
         {
             ja["Hand Palm 2 R"] = ui.horizontalSliderPalm->value() * M_PI / 180;
             ja["Index R J0"] = ui.horizontalSliderIndexJ0->value() * M_PI / 180;
@@ -178,10 +181,10 @@ namespace armarx
         }
         else
         {
-            ARMARX_WARNING << "Hand with name \"" << handName << "\" is not supported.";
+            ARMARX_WARNING << "Hand with name \"" << leftHandName << "\" is not supported.";
         }
 
-        handUnitProxy->setJointAngles(ja);
+        leftHandUnitProxy->setJointAngles(ja);
     }
 
     void HandUnitWidget::requestSetJointAngles()
@@ -211,25 +214,25 @@ namespace armarx
 
     void HandUnitWidget::updateInfoLabel()
     {
-        ui.labelInfo->setText(QString::fromStdString(handUnitProxyName + " :: " + handName + " State: " + handUnitProxy->describeHandState()));
+        ui.labelInfo->setText(QString::fromStdString(leftHandUnitProxyName + " :: " + leftHandName + " State: " + leftHandUnitProxy->describeHandState()));
     }
 
     void HandUnitWidget::setPreshape(std::string preshape)
     {
         ARMARX_INFO << "Setting new hand shape: " << preshape;
-        handUnitProxy->setShape(preshape);
+        leftHandUnitProxy->setShape(preshape);
     }
 
     void HandUnitWidget::loadSettings(QSettings* settings)
     {
-        handUnitProxyName = settings->value("handUnitProxyName", QString::fromStdString(handUnitProxyName)).toString().toStdString();
-        handName = settings->value("handName", QString::fromStdString(handName)).toString().toStdString();
+        leftHandUnitProxyName = settings->value("handUnitProxyName", QString::fromStdString(leftHandUnitProxyName)).toString().toStdString();
+        leftHandName = settings->value("handName", QString::fromStdString(leftHandName)).toString().toStdString();
     }
 
     void HandUnitWidget::saveSettings(QSettings* settings)
     {
-        settings->setValue("handUnitProxyName", QString::fromStdString(handUnitProxyName));
-        settings->setValue("handName", QString::fromStdString(handName));
+        settings->setValue("handUnitProxyName", QString::fromStdString(leftHandUnitProxyName));
+        settings->setValue("handName", QString::fromStdString(leftHandName));
     }
 
 
diff --git a/source/RobotAPI/gui-plugins/HandUnitPlugin/HandUnitGuiPlugin.h b/source/RobotAPI/gui-plugins/HandUnitPlugin/HandUnitGuiPlugin.h
index 2e7968738f29b200a0b5bf14f2f5358024762943..1b6420ccd9682bb073daac76e935744577e38982 100644
--- a/source/RobotAPI/gui-plugins/HandUnitPlugin/HandUnitGuiPlugin.h
+++ b/source/RobotAPI/gui-plugins/HandUnitPlugin/HandUnitGuiPlugin.h
@@ -130,11 +130,14 @@ namespace armarx
         Ui::HandUnitGuiPlugin ui;
 
     private:
-        std::string handName;
+        std::string leftHandName;
+        std::string rightHandName;
         //std::string preshapeName;
 
-        std::string handUnitProxyName;
-        HandUnitInterfacePrx handUnitProxy;
+        std::string leftHandUnitProxyName;
+        std::string rightHandUnitProxyName;
+        HandUnitInterfacePrx leftHandUnitProxy;
+        HandUnitInterfacePrx rightHandUnitProxy;
 
         //QPointer<QWidget> __widget;
         QPointer<HandUnitConfigDialog> dialog;
diff --git a/source/RobotAPI/gui-plugins/HandUnitPlugin/HandUnitGuiPlugin.ui b/source/RobotAPI/gui-plugins/HandUnitPlugin/HandUnitGuiPlugin.ui
index bda4f4ae305f68c0b8b31a63850f6b8e79e07fdd..7f9fbdc671eec73b87cae64033603a4bc934043c 100644
--- a/source/RobotAPI/gui-plugins/HandUnitPlugin/HandUnitGuiPlugin.ui
+++ b/source/RobotAPI/gui-plugins/HandUnitPlugin/HandUnitGuiPlugin.ui
@@ -19,239 +19,305 @@
   <property name="windowTitle">
    <string>Form</string>
   </property>
-  <layout class="QGridLayout" name="gridLayout">
-   <item row="1" column="3">
-    <widget class="Line" name="line">
-     <property name="orientation">
-      <enum>Qt::Vertical</enum>
-     </property>
-    </widget>
-   </item>
-   <item row="2" column="1" colspan="7">
-    <widget class="QFrame" name="frame">
-     <property name="frameShape">
-      <enum>QFrame::StyledPanel</enum>
-     </property>
-     <property name="frameShadow">
-      <enum>QFrame::Raised</enum>
-     </property>
-     <layout class="QGridLayout" name="gridLayout_2">
-      <item row="7" column="0">
-       <widget class="QLabel" name="label_8">
-        <property name="text">
-         <string>Rinky</string>
-        </property>
-       </widget>
-      </item>
-      <item row="2" column="0">
-       <widget class="QLabel" name="label_3">
-        <property name="text">
-         <string>Thumb J1</string>
-        </property>
-       </widget>
-      </item>
-      <item row="2" column="1">
-       <widget class="QSlider" name="horizontalSliderThumbJ1">
-        <property name="maximum">
-         <number>90</number>
-        </property>
-        <property name="orientation">
-         <enum>Qt::Horizontal</enum>
-        </property>
-       </widget>
-      </item>
-      <item row="7" column="1">
-       <widget class="QSlider" name="horizontalSliderRinky">
-        <property name="maximum">
-         <number>90</number>
-        </property>
-        <property name="orientation">
-         <enum>Qt::Horizontal</enum>
-        </property>
-       </widget>
-      </item>
-      <item row="6" column="0">
-       <widget class="QLabel" name="label_7">
-        <property name="text">
-         <string>Middle J1</string>
-        </property>
-       </widget>
-      </item>
-      <item row="5" column="0">
-       <widget class="QLabel" name="label_6">
-        <property name="text">
-         <string>Middle J0</string>
-        </property>
-       </widget>
-      </item>
-      <item row="4" column="0">
-       <widget class="QLabel" name="label_5">
-        <property name="text">
-         <string>Index J1</string>
-        </property>
-       </widget>
-      </item>
-      <item row="6" column="1">
-       <widget class="QSlider" name="horizontalSliderMiddleJ1">
-        <property name="maximum">
-         <number>90</number>
-        </property>
-        <property name="orientation">
-         <enum>Qt::Horizontal</enum>
-        </property>
-       </widget>
-      </item>
-      <item row="5" column="1">
-       <widget class="QSlider" name="horizontalSliderMiddleJ0">
-        <property name="maximum">
-         <number>90</number>
-        </property>
-        <property name="orientation">
-         <enum>Qt::Horizontal</enum>
-        </property>
-       </widget>
-      </item>
-      <item row="1" column="1">
-       <widget class="QSlider" name="horizontalSliderThumbJ0">
-        <property name="maximum">
-         <number>90</number>
-        </property>
-        <property name="orientation">
-         <enum>Qt::Horizontal</enum>
-        </property>
-       </widget>
-      </item>
-      <item row="1" column="0">
-       <widget class="QLabel" name="label_2">
-        <property name="text">
-         <string>Thumb J0</string>
-        </property>
-       </widget>
-      </item>
-      <item row="3" column="0">
-       <widget class="QLabel" name="label_4">
-        <property name="text">
-         <string>Index J0</string>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="1">
-       <widget class="QSlider" name="horizontalSliderPalm">
-        <property name="maximum">
-         <number>90</number>
-        </property>
-        <property name="orientation">
-         <enum>Qt::Horizontal</enum>
-        </property>
-       </widget>
-      </item>
-      <item row="3" column="1">
-       <widget class="QSlider" name="horizontalSliderIndexJ0">
-        <property name="maximum">
-         <number>90</number>
-        </property>
-        <property name="orientation">
-         <enum>Qt::Horizontal</enum>
-        </property>
-       </widget>
-      </item>
-      <item row="4" column="1">
-       <widget class="QSlider" name="horizontalSliderIndexJ1">
-        <property name="maximum">
-         <number>90</number>
-        </property>
-        <property name="orientation">
-         <enum>Qt::Horizontal</enum>
-        </property>
-       </widget>
-      </item>
-      <item row="3" column="2" rowspan="2">
-       <widget class="QPushButton" name="buttonSetJointAngles">
-        <property name="maximumSize">
-         <size>
-          <width>50</width>
-          <height>16777215</height>
-         </size>
-        </property>
-        <property name="text">
-         <string>Set</string>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="0">
-       <widget class="QLabel" name="label">
-        <property name="text">
-         <string>Palm</string>
-        </property>
-       </widget>
-      </item>
-     </layout>
-    </widget>
-   </item>
-   <item row="1" column="7">
-    <widget class="QPushButton" name="buttonRelaxHand">
-     <property name="text">
-      <string>Relax</string>
-     </property>
-    </widget>
-   </item>
-   <item row="1" column="5">
-    <widget class="QPushButton" name="buttonCloseThumb">
-     <property name="text">
-      <string>Thumb</string>
-     </property>
-    </widget>
-   </item>
-   <item row="1" column="1">
-    <widget class="QComboBox" name="comboPreshapes"/>
-   </item>
-   <item row="1" column="2">
-    <widget class="QPushButton" name="buttonPreshape">
-     <property name="maximumSize">
-      <size>
-       <width>100</width>
-       <height>16777215</height>
-      </size>
-     </property>
-     <property name="text">
-      <string>Preshape</string>
-     </property>
-    </widget>
-   </item>
-   <item row="1" column="6">
-    <widget class="QPushButton" name="buttonCloseHand">
-     <property name="text">
-      <string>Close</string>
-     </property>
-    </widget>
-   </item>
-   <item row="1" column="4">
-    <widget class="QPushButton" name="buttonOpenHand">
-     <property name="text">
-      <string>Open</string>
-     </property>
-    </widget>
-   </item>
-   <item row="0" column="1" colspan="7">
-    <widget class="QLabel" name="labelInfo">
-     <property name="maximumSize">
-      <size>
-       <width>16777215</width>
-       <height>20</height>
-      </size>
-     </property>
-     <property name="font">
-      <font>
-       <weight>75</weight>
-       <bold>true</bold>
-      </font>
-     </property>
-     <property name="text">
-      <string>&lt;Info Here&gt;</string>
-     </property>
-    </widget>
-   </item>
-  </layout>
+  <widget class="Line" name="lineLeftHand">
+   <property name="geometry">
+    <rect>
+     <x>146</x>
+     <y>35</y>
+     <width>16</width>
+     <height>25</height>
+    </rect>
+   </property>
+   <property name="orientation">
+    <enum>Qt::Vertical</enum>
+   </property>
+  </widget>
+  <widget class="QFrame" name="frameLeftHand">
+   <property name="geometry">
+    <rect>
+     <x>9</x>
+     <y>66</y>
+     <width>230</width>
+     <height>321</height>
+    </rect>
+   </property>
+   <property name="frameShape">
+    <enum>QFrame::StyledPanel</enum>
+   </property>
+   <property name="frameShadow">
+    <enum>QFrame::Raised</enum>
+   </property>
+   <layout class="QGridLayout" name="gridLayout_2"/>
+  </widget>
+  <widget class="QComboBox" name="comboLeftHandPreshapes">
+   <property name="geometry">
+    <rect>
+     <x>9</x>
+     <y>35</y>
+     <width>60</width>
+     <height>25</height>
+    </rect>
+   </property>
+  </widget>
+  <widget class="QPushButton" name="buttonPreshapeLeftHand">
+   <property name="geometry">
+    <rect>
+     <x>71</x>
+     <y>35</y>
+     <width>80</width>
+     <height>25</height>
+    </rect>
+   </property>
+   <property name="maximumSize">
+    <size>
+     <width>100</width>
+     <height>16777215</height>
+    </size>
+   </property>
+   <property name="text">
+    <string>Preshape</string>
+   </property>
+  </widget>
+  <widget class="QPushButton" name="buttonOpenLeftHand">
+   <property name="geometry">
+    <rect>
+     <x>157</x>
+     <y>35</y>
+     <width>50</width>
+     <height>25</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>Open</string>
+   </property>
+  </widget>
+  <widget class="QLabel" name="labelInfoLeftHand">
+   <property name="geometry">
+    <rect>
+     <x>9</x>
+     <y>9</y>
+     <width>85</width>
+     <height>17</height>
+    </rect>
+   </property>
+   <property name="maximumSize">
+    <size>
+     <width>16777215</width>
+     <height>20</height>
+    </size>
+   </property>
+   <property name="font">
+    <font>
+     <weight>75</weight>
+     <bold>true</bold>
+    </font>
+   </property>
+   <property name="text">
+    <string>&lt;Info Here&gt;</string>
+   </property>
+  </widget>
+  <widget class="QFrame" name="frameRightHand">
+   <property name="enabled">
+    <bool>true</bool>
+   </property>
+   <property name="geometry">
+    <rect>
+     <x>330</x>
+     <y>66</y>
+     <width>230</width>
+     <height>321</height>
+    </rect>
+   </property>
+   <property name="frameShape">
+    <enum>QFrame::StyledPanel</enum>
+   </property>
+   <property name="frameShadow">
+    <enum>QFrame::Raised</enum>
+   </property>
+  </widget>
+  <widget class="Line" name="line">
+   <property name="geometry">
+    <rect>
+     <x>310</x>
+     <y>0</y>
+     <width>20</width>
+     <height>401</height>
+    </rect>
+   </property>
+   <property name="orientation">
+    <enum>Qt::Vertical</enum>
+   </property>
+  </widget>
+  <widget class="QPushButton" name="buttonSetLeftHandJointAngles">
+   <property name="geometry">
+    <rect>
+     <x>250</x>
+     <y>215</y>
+     <width>50</width>
+     <height>25</height>
+    </rect>
+   </property>
+   <property name="maximumSize">
+    <size>
+     <width>50</width>
+     <height>16777215</height>
+    </size>
+   </property>
+   <property name="text">
+    <string>Set</string>
+   </property>
+  </widget>
+  <widget class="QPushButton" name="buttonSetRightHandJointAngles">
+   <property name="geometry">
+    <rect>
+     <x>570</x>
+     <y>215</y>
+     <width>50</width>
+     <height>25</height>
+    </rect>
+   </property>
+   <property name="maximumSize">
+    <size>
+     <width>50</width>
+     <height>16777215</height>
+    </size>
+   </property>
+   <property name="text">
+    <string>Set</string>
+   </property>
+  </widget>
+  <widget class="QPushButton" name="buttonCloseLeftHand">
+   <property name="geometry">
+    <rect>
+     <x>209</x>
+     <y>35</y>
+     <width>50</width>
+     <height>25</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>Close</string>
+   </property>
+  </widget>
+  <widget class="QPushButton" name="buttonRelaxLeftHand">
+   <property name="geometry">
+    <rect>
+     <x>261</x>
+     <y>35</y>
+     <width>50</width>
+     <height>25</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>Relax</string>
+   </property>
+  </widget>
+  <widget class="QComboBox" name="comboRightHandPreshapes">
+   <property name="geometry">
+    <rect>
+     <x>330</x>
+     <y>35</y>
+     <width>60</width>
+     <height>25</height>
+    </rect>
+   </property>
+  </widget>
+  <widget class="QPushButton" name="buttonOpenRightHand">
+   <property name="geometry">
+    <rect>
+     <x>478</x>
+     <y>35</y>
+     <width>50</width>
+     <height>25</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>Open</string>
+   </property>
+  </widget>
+  <widget class="QPushButton" name="buttonPreshapeRightHand">
+   <property name="geometry">
+    <rect>
+     <x>392</x>
+     <y>35</y>
+     <width>80</width>
+     <height>25</height>
+    </rect>
+   </property>
+   <property name="maximumSize">
+    <size>
+     <width>100</width>
+     <height>16777215</height>
+    </size>
+   </property>
+   <property name="text">
+    <string>Preshape</string>
+   </property>
+  </widget>
+  <widget class="QPushButton" name="buttonCloseRightHand">
+   <property name="geometry">
+    <rect>
+     <x>530</x>
+     <y>35</y>
+     <width>50</width>
+     <height>25</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>Close</string>
+   </property>
+  </widget>
+  <widget class="QPushButton" name="buttonRelaxRightHand">
+   <property name="geometry">
+    <rect>
+     <x>582</x>
+     <y>35</y>
+     <width>50</width>
+     <height>25</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>Relax</string>
+   </property>
+  </widget>
+  <widget class="QLabel" name="labelInfoRightHand">
+   <property name="geometry">
+    <rect>
+     <x>330</x>
+     <y>9</y>
+     <width>85</width>
+     <height>17</height>
+    </rect>
+   </property>
+   <property name="maximumSize">
+    <size>
+     <width>16777215</width>
+     <height>20</height>
+    </size>
+   </property>
+   <property name="font">
+    <font>
+     <weight>75</weight>
+     <bold>true</bold>
+    </font>
+   </property>
+   <property name="text">
+    <string>&lt;Info Here&gt;</string>
+   </property>
+  </widget>
+  <widget class="Line" name="lineRightHand">
+   <property name="geometry">
+    <rect>
+     <x>467</x>
+     <y>35</y>
+     <width>16</width>
+     <height>25</height>
+    </rect>
+   </property>
+   <property name="orientation">
+    <enum>Qt::Vertical</enum>
+   </property>
+  </widget>
  </widget>
  <resources/>
  <connections/>