diff --git a/source/RobotAPI/components/armem/client/GraspProviderExample/GraspProviderExample.cpp b/source/RobotAPI/components/armem/client/GraspProviderExample/GraspProviderExample.cpp
index 2d74eb7599039d92beda16667e976ba594f14d84..064ae5639748a7d695a4633cffc1dbdc8a0f488d 100644
--- a/source/RobotAPI/components/armem/client/GraspProviderExample/GraspProviderExample.cpp
+++ b/source/RobotAPI/components/armem/client/GraspProviderExample/GraspProviderExample.cpp
@@ -103,20 +103,33 @@ namespace armarx
         CycleUtil c(1000);
         int i = 0;
 
-        //grasping::BoundingBox bb = grasping::BoundingBox(Vector3BasePtr(toIce(Eigen::Vector3f())), Vector3BasePtr(toIce(Eigen::Vector3f())), Vector3BasePtr(toIce(Eigen::Vector3f())), Vector3BasePtr(toIce(Eigen::Vector3f())));
-        //grasping::GraspCandidateSourceInfo info = grasping::GraspCandidateSourceInfo(PoseBasePtr(toIce(Eigen::Matrix4f())), "string", 5, &bb);
-
 
         while (!task->isStopped() && i++ < 100)
         {
+            // initialize all necessary fields of a grasp candidate and use writer to commit it to memory
             armarx::grasping::GraspCandidate candidate = armarx::grasping::GraspCandidate();
-            candidate.groupNr = 5;
+            candidate.groupNr = i; //non-necessary field, but used to commit different candidates
             candidate.approachVector = Vector3BasePtr(toIce(Eigen::Vector3f()));
             candidate.graspPose = PoseBasePtr(toIce(Eigen::Matrix4f()));
             candidate.providerName = "Example";
             candidate.robotPose = PoseBasePtr(toIce(Eigen::Matrix4f()));
 
             writer.storeGraspCandidate(candidate, IceUtil::Time::now().toMilliSeconds());
+
+            // initialize all necessary fields of a bimanual grasp candidate and use writer to commit it to memory
+            armarx::grasping::BimanualGraspCandidate bimanualCandidate = armarx::grasping::BimanualGraspCandidate();
+            bimanualCandidate.groupNr = i; //non-necessary field, but used to commit different candidates
+            bimanualCandidate.approachVectorLeft = Vector3BasePtr(toIce(Eigen::Vector3f()));
+            bimanualCandidate.approachVectorRight = Vector3BasePtr(toIce(Eigen::Vector3f()));
+            bimanualCandidate.graspPoseLeft = PoseBasePtr(toIce(Eigen::Matrix4f()));
+            bimanualCandidate.graspPoseRight = PoseBasePtr(toIce(Eigen::Matrix4f()));
+            bimanualCandidate.providerName = "BimanualExample";
+            bimanualCandidate.robotPose = PoseBasePtr(toIce(Eigen::Matrix4f()));
+            bimanualCandidate.inwardsVectorLeft = Vector3BasePtr(toIce(Eigen::Vector3f()));
+            bimanualCandidate.inwardsVectorRight = Vector3BasePtr(toIce(Eigen::Vector3f()));
+
+            writer.storeBimanualGraspCandidate(bimanualCandidate, IceUtil::Time::now().toMilliSeconds());
+
             c.waitForCycleDuration();
         }
     }
diff --git a/source/RobotAPI/components/armem/client/GraspProviderExample/GraspProviderExample.h b/source/RobotAPI/components/armem/client/GraspProviderExample/GraspProviderExample.h
index 1dc18a24bf451e392ec52b9405d0ea27fe89e5e0..a0edf8802efae2a02c25ae80e840e9a3b03edd99 100644
--- a/source/RobotAPI/components/armem/client/GraspProviderExample/GraspProviderExample.h
+++ b/source/RobotAPI/components/armem/client/GraspProviderExample/GraspProviderExample.h
@@ -11,10 +11,7 @@
 namespace armarx
 {
 
-    /**
-     * @class ExampleClientPropertyDefinitions
-     * @brief Property definitions of `ExampleClient`.
-     */
+
     class GraspProviderExamplePropertyDefinitions :
         public armarx::ComponentPropertyDefinitions
     {
@@ -68,6 +65,5 @@ namespace armarx
 
         std::string memoryName = "Grasp";
         armarx::armem::GraspCandidateWriter writer;
-
     };
 }
diff --git a/source/RobotAPI/components/armem/server/GraspMemory/GraspMemory.cpp b/source/RobotAPI/components/armem/server/GraspMemory/GraspMemory.cpp
index 57a590afe5d594ac8c9fb5b0b4799c930bc6d7cc..279f66b22b49dc841b46210de2e770bf05562e73 100644
--- a/source/RobotAPI/components/armem/server/GraspMemory/GraspMemory.cpp
+++ b/source/RobotAPI/components/armem/server/GraspMemory/GraspMemory.cpp
@@ -33,9 +33,10 @@ namespace armarx
     {
         workingMemory.name() = memoryName;
 
-        // Usually, the memory server will specify a number of core segments with a specific aron type.
-        workingMemory.addCoreSegment("GraspCandidate", armarx::grasping::arondto::GraspCandidate::toInitialAronType());
-
+        workingMemory.addCoreSegment("GraspCandidate",
+                                     armarx::grasping::arondto::GraspCandidate::toInitialAronType());
+        workingMemory.addCoreSegment("BimanualGraspCandidate",
+                                     armarx::grasping::arondto::BimanualGraspCandidate::toInitialAronType());
     }
 
     void GraspMemory::onConnectComponent()
diff --git a/source/RobotAPI/components/armem/server/GraspMemory/GraspMemory.h b/source/RobotAPI/components/armem/server/GraspMemory/GraspMemory.h
index 732c74a83a496f7f70d834ca2f5584589858686e..f1a7d87f277b107557ceb9b96a4a66ad5af5107d 100644
--- a/source/RobotAPI/components/armem/server/GraspMemory/GraspMemory.h
+++ b/source/RobotAPI/components/armem/server/GraspMemory/GraspMemory.h
@@ -34,12 +34,10 @@ namespace armarx
         std::string getDefaultName() const override;
 
 
-        // WritingInterface interface
     public:
         armem::data::CommitResult commit(const armem::data::Commit& commit, const Ice::Current&) override;
 
 
-        // LightweightRemoteGuiComponentPluginUser interface
     public:
         void RemoteGui__createTab();
         void RemoteGui_update() override;
diff --git a/source/RobotAPI/libraries/GraspingUtility/GraspCandidateWriter.cpp b/source/RobotAPI/libraries/GraspingUtility/GraspCandidateWriter.cpp
index 919759e41109cb6f9a880bcc514dc9f4d3c6cd45..1cd6d4667e881aab4d5de630883e5d66fe2ef391 100644
--- a/source/RobotAPI/libraries/GraspingUtility/GraspCandidateWriter.cpp
+++ b/source/RobotAPI/libraries/GraspingUtility/GraspCandidateWriter.cpp
@@ -36,13 +36,16 @@ namespace armarx::armem
         const std::string prefix = propertyPrefix;
 
         def->optional(properties.graspMemoryName, prefix + "GraspMemoryName",
-                      "Name of the mapping memory core segment to use.");
+                      "Name of the grasping memory core segment to use.");
+        def->optional(properties.bimanualGraspMemoryName, prefix + "BimanualGraspMemoryName",
+                      "Name of the bimanual grasping memory core segment to use.");
 
         def->optional(properties.memoryName, prefix + "MemoryName");
 
     }
 
-    bool GraspCandidateWriter::storeGraspCandidate(const armarx::grasping::GraspCandidate& candidate, const int64_t& timestamp)
+    bool GraspCandidateWriter::storeGraspCandidate(const armarx::grasping::GraspCandidate& candidate,
+            const int64_t& timestamp)
     {
         armarx::grasping::arondto::GraspCandidate aronGraspCandidate;
 
@@ -50,10 +53,11 @@ namespace armarx::armem
 
         auto dict = aronGraspCandidate.toAron();
 
-        return commitToMemory(dict, candidate.providerName, timestamp);
+        return commitToMemory(dict, candidate.providerName, timestamp, properties.graspMemoryName);
     }
 
-    bool GraspCandidateWriter::storeBimanualGraspCandidate(const armarx::grasping::BimanualGraspCandidate& candidate, const int64_t& timestamp)
+    bool GraspCandidateWriter::storeBimanualGraspCandidate(const armarx::grasping::BimanualGraspCandidate& candidate,
+            const int64_t& timestamp)
     {
         armarx::grasping::arondto::BimanualGraspCandidate aronGraspCandidate;
 
@@ -61,10 +65,11 @@ namespace armarx::armem
 
         auto dict = aronGraspCandidate.toAron();
 
-        return commitToMemory(dict, candidate.providerName, timestamp);
+        return commitToMemory(dict, candidate.providerName, timestamp, properties.bimanualGraspMemoryName);
     }
 
-    bool GraspCandidateWriter::storeGraspCandidateSeq(const armarx::grasping::GraspCandidateSeq& candidates, const int64_t& timestamp)
+    bool GraspCandidateWriter::storeGraspCandidateSeq(const armarx::grasping::GraspCandidateSeq& candidates,
+            const int64_t& timestamp)
     {
         bool success = true;
         for (armarx::grasping::GraspCandidatePtr candidate : candidates)
@@ -77,7 +82,8 @@ namespace armarx::armem
         return success;
     }
 
-    bool GraspCandidateWriter::storeBimanualGraspCandidateSeq(const armarx::grasping::BimanualGraspCandidateSeq& candidates, const int64_t& timestamp)
+    bool GraspCandidateWriter::storeBimanualGraspCandidateSeq(
+        const armarx::grasping::BimanualGraspCandidateSeq& candidates, const int64_t& timestamp)
     {
         bool success = true;
         for (armarx::grasping::BimanualGraspCandidatePtr candidate : candidates)
@@ -90,12 +96,14 @@ namespace armarx::armem
         return success;
     }
 
-    bool GraspCandidateWriter::commitToMemory(const armarx::aron::datanavigator::DictNavigatorPtr& dict, const std::string& providerName, const int64_t& timestamp)
+    bool GraspCandidateWriter::commitToMemory(const armarx::aron::datanavigator::DictNavigatorPtr& dict,
+            const std::string& providerName, const int64_t& timestamp,
+            std::string coreMemoryName)
     {
         std::lock_guard g{memoryWriterMutex};
 
         const auto result =
-            memoryWriter.addSegment(properties.graspMemoryName, providerName);
+            memoryWriter.addSegment(coreMemoryName, providerName);
 
         if (not result.success)
         {
diff --git a/source/RobotAPI/libraries/GraspingUtility/GraspCandidateWriter.h b/source/RobotAPI/libraries/GraspingUtility/GraspCandidateWriter.h
index f2efefc4fc1b342334cbb9cf93f40f791b9ccf9b..75662a4feccc438e9d9322c1d1bbe4d33a0e9c0c 100644
--- a/source/RobotAPI/libraries/GraspingUtility/GraspCandidateWriter.h
+++ b/source/RobotAPI/libraries/GraspingUtility/GraspCandidateWriter.h
@@ -18,17 +18,23 @@ namespace armarx::armem
 
         void registerPropertyDefinitions(armarx::PropertyDefinitionsPtr& def);
 
-        bool storeGraspCandidate(const armarx::grasping::GraspCandidate& candidate, const std::int64_t& timestamp);
-        bool storeBimanualGraspCandidate(const armarx::grasping::BimanualGraspCandidate& candidate, const std::int64_t& timestamp);
+        bool storeGraspCandidate(const armarx::grasping::GraspCandidate& candidate,
+                                 const std::int64_t& timestamp);
+        bool storeBimanualGraspCandidate(const armarx::grasping::BimanualGraspCandidate& candidate,
+                                         const std::int64_t& timestamp);
 
-        bool storeGraspCandidateSeq(const armarx::grasping::GraspCandidateSeq& candidates, const std::int64_t& timestamp);
-        bool storeBimanualGraspCandidateSeq(const armarx::grasping::BimanualGraspCandidateSeq& candidates, const std::int64_t& timestamp);
+        bool storeGraspCandidateSeq(const armarx::grasping::GraspCandidateSeq& candidates,
+                                    const std::int64_t& timestamp);
+        bool storeBimanualGraspCandidateSeq(const armarx::grasping::BimanualGraspCandidateSeq& candidates,
+                                            const std::int64_t& timestamp);
 
 
 
     private:
 
-        bool commitToMemory(const armarx::aron::datanavigator::DictNavigatorPtr& dict, const std::string& providerName, const std::int64_t& timestamp);
+        bool commitToMemory(const armarx::aron::datanavigator::DictNavigatorPtr& dict,
+                            const std::string& providerName, const std::int64_t& timestamp,
+                            std::string coreMemoryName);
 
         armem::client::Writer memoryWriter;
 
@@ -36,6 +42,7 @@ namespace armarx::armem
         {
             std::string memoryName         = "Grasp";
             std::string graspMemoryName  = "GraspCandidate";
+            std::string bimanualGraspMemoryName = "BimanualGraspCandidate";
         } properties;
 
 
diff --git a/source/RobotAPI/libraries/GraspingUtility/aron_conversions.cpp b/source/RobotAPI/libraries/GraspingUtility/aron_conversions.cpp
index 1106cc93686e2a9ea4483b34afb6480b2ba60a8f..b2e421a72c4884ea1bff2dd854479070c387f9fc 100644
--- a/source/RobotAPI/libraries/GraspingUtility/aron_conversions.cpp
+++ b/source/RobotAPI/libraries/GraspingUtility/aron_conversions.cpp
@@ -8,12 +8,14 @@
 
 
 
-void armarx::grasping::fromAron(const armarx::grasping::arondto::BoundingBox& dto, armarx::grasping::BoundingBox& bo)
+void armarx::grasping::fromAron(const armarx::grasping::arondto::BoundingBox& dto,
+                                armarx::grasping::BoundingBox& bo)
 {
     bo = BoundingBox(toIce(dto.center), toIce(dto.ha1), toIce(dto.ha2), toIce(dto.ha3));
 }
 
-void armarx::grasping::toAron(armarx::grasping::arondto::BoundingBox& dto, const armarx::grasping::BoundingBox& bo)
+void armarx::grasping::toAron(armarx::grasping::arondto::BoundingBox& dto,
+                              const armarx::grasping::BoundingBox& bo)
 {
     dto.center = fromIce(bo.center);
     dto.ha1 = fromIce(bo.ha1);
@@ -21,7 +23,8 @@ void armarx::grasping::toAron(armarx::grasping::arondto::BoundingBox& dto, const
     dto.ha3 = fromIce(bo.ha3);
 }
 
-void armarx::grasping::fromAron(const armarx::grasping::arondto::GraspCandidateSourceInfo& dto, armarx::grasping::GraspCandidateSourceInfo& bo)
+void armarx::grasping::fromAron(const armarx::grasping::arondto::GraspCandidateSourceInfo& dto,
+                                armarx::grasping::GraspCandidateSourceInfo& bo)
 {
     bo = GraspCandidateSourceInfo();
     bo.bbox = BoundingBoxPtr();
@@ -31,7 +34,8 @@ void armarx::grasping::fromAron(const armarx::grasping::arondto::GraspCandidateS
     bo.segmentationLabelID = dto.segmentationLabelID;
 }
 
-void armarx::grasping::toAron(armarx::grasping::arondto::GraspCandidateSourceInfo& dto, const armarx::grasping::GraspCandidateSourceInfo& bo)
+void armarx::grasping::toAron(armarx::grasping::arondto::GraspCandidateSourceInfo& dto,
+                              const armarx::grasping::GraspCandidateSourceInfo& bo)
 {
     toAron(dto.bbox, *bo.bbox);
     dto.referenceObjectName = bo.referenceObjectName;
@@ -40,13 +44,15 @@ void armarx::grasping::toAron(armarx::grasping::arondto::GraspCandidateSourceInf
 
 }
 
-void armarx::grasping::fromAron(const armarx::grasping::arondto::GraspCandidateReachabilityInfo& dto, armarx::grasping::GraspCandidateReachabilityInfo& bo)
+void armarx::grasping::fromAron(const armarx::grasping::arondto::GraspCandidateReachabilityInfo& dto,
+                                armarx::grasping::GraspCandidateReachabilityInfo& bo)
 {
     bo = GraspCandidateReachabilityInfo(dto.reachable, dto.minimumJointLimitMargin, dto.jointLimitMargins,
                                         dto.maxPosError, dto.maxOriError);
 }
 
-void armarx::grasping::toAron(armarx::grasping::arondto::GraspCandidateReachabilityInfo& dto, const armarx::grasping::GraspCandidateReachabilityInfo& bo)
+void armarx::grasping::toAron(armarx::grasping::arondto::GraspCandidateReachabilityInfo& dto,
+                              const armarx::grasping::GraspCandidateReachabilityInfo& bo)
 {
     dto.jointLimitMargins = bo.jointLimitMargins;
     dto.maxOriError = bo.maxOriError;
@@ -55,7 +61,8 @@ void armarx::grasping::toAron(armarx::grasping::arondto::GraspCandidateReachabil
     dto.reachable = bo.reachable;
 }
 
-void armarx::grasping::fromAron(const armarx::grasping::arondto::GraspCandidate& dto, armarx::grasping::GraspCandidate& bo)
+void armarx::grasping::fromAron(const armarx::grasping::arondto::GraspCandidate& dto,
+                                armarx::grasping::GraspCandidate& bo)
 {
     bo = GraspCandidate();
     bo.graspPose = toIce(dto.graspPose);
@@ -97,7 +104,8 @@ void armarx::grasping::fromAron(const armarx::grasping::arondto::GraspCandidate&
     }
 }
 
-void armarx::grasping::toAron(armarx::grasping::arondto::GraspCandidate& dto, const armarx::grasping::GraspCandidate& bo)
+void armarx::grasping::toAron(armarx::grasping::arondto::GraspCandidate& dto,
+                              const armarx::grasping::GraspCandidate& bo)
 {
     dto.approachVector = fromIce(bo.approachVector);
     if (bo.executionHints)
@@ -144,7 +152,8 @@ void armarx::grasping::toAron(armarx::grasping::arondto::GraspCandidate& dto, co
     dto.targetFrame = bo.targetFrame;
 }
 
-void armarx::grasping::fromAron(const armarx::grasping::arondto::BimanualGraspCandidate& dto, armarx::grasping::BimanualGraspCandidate& bo)
+void armarx::grasping::fromAron(const armarx::grasping::arondto::BimanualGraspCandidate& dto,
+                                armarx::grasping::BimanualGraspCandidate& bo)
 {
     bo = BimanualGraspCandidate();
     bo.graspPoseRight = toIce(dto.graspPoseRight);
@@ -207,7 +216,8 @@ void armarx::grasping::fromAron(const armarx::grasping::arondto::BimanualGraspCa
     bo.graspName = dto.graspName;
 }
 
-void armarx::grasping::toAron(armarx::grasping::arondto::BimanualGraspCandidate& dto, const armarx::grasping::BimanualGraspCandidate& bo)
+void armarx::grasping::toAron(armarx::grasping::arondto::BimanualGraspCandidate& dto,
+                              const armarx::grasping::BimanualGraspCandidate& bo)
 {
     dto.approachVectorRight = fromIce(bo.approachVectorRight);
     dto.approachVectorLeft = fromIce(bo.approachVectorLeft);
@@ -267,7 +277,8 @@ void armarx::grasping::toAron(armarx::grasping::arondto::BimanualGraspCandidate&
     else
     {
         dto.sourceInfoValid = false;
-        toAron(dto.sourceInfo, GraspCandidateSourceInfo());
+        //toAron(dto.sourceInfo, GraspCandidateSourceInfo());
+        dto.sourceInfo.initialize();
     }
     dto.targetFrame = bo.targetFrame;
     dto.inwardsVectorRight = fromIce(bo.inwardsVectorRight);
@@ -275,7 +286,8 @@ void armarx::grasping::toAron(armarx::grasping::arondto::BimanualGraspCandidate&
     dto.graspName = bo.graspName;
 }
 
-void armarx::grasping::fromAron(const armarx::grasping::arondto::GraspCandidateExecutionHints& dto, armarx::grasping::GraspCandidateExecutionHints& bo)
+void armarx::grasping::fromAron(const armarx::grasping::arondto::GraspCandidateExecutionHints& dto,
+                                armarx::grasping::GraspCandidateExecutionHints& bo)
 {
     bo = GraspCandidateExecutionHints();
     fromAron(dto.approach, bo.approach);
@@ -283,14 +295,16 @@ void armarx::grasping::fromAron(const armarx::grasping::arondto::GraspCandidateE
     bo.graspTrajectoryName = dto.graspTrajectoryName;
 }
 
-void armarx::grasping::toAron(armarx::grasping::arondto::GraspCandidateExecutionHints& dto, const armarx::grasping::GraspCandidateExecutionHints& bo)
+void armarx::grasping::toAron(armarx::grasping::arondto::GraspCandidateExecutionHints& dto,
+                              const armarx::grasping::GraspCandidateExecutionHints& bo)
 {
     toAron(dto.approach, bo.approach);
     toAron(dto.preshape, bo.preshape);
     dto.graspTrajectoryName = bo.graspTrajectoryName;
 }
 
-void armarx::grasping::fromAron(const armarx::objpose::arondto::ObjectType& dto, armarx::grasping::ObjectTypeEnum& bo)
+void armarx::grasping::fromAron(const armarx::objpose::arondto::ObjectType& dto,
+                                armarx::grasping::ObjectTypeEnum& bo)
 {
     switch (dto.value)
     {
@@ -308,7 +322,8 @@ void armarx::grasping::fromAron(const armarx::objpose::arondto::ObjectType& dto,
 
 }
 
-void armarx::grasping::toAron(armarx::objpose::arondto::ObjectType& dto, const armarx::grasping::ObjectTypeEnum& bo)
+void armarx::grasping::toAron(armarx::objpose::arondto::ObjectType& dto,
+                              const armarx::grasping::ObjectTypeEnum& bo)
 {
     switch (bo)
     {
@@ -326,7 +341,8 @@ void armarx::grasping::toAron(armarx::objpose::arondto::ObjectType& dto, const a
 
 }
 
-void armarx::grasping::fromAron(const armarx::grasping::arondto::ApproachType& dto, armarx::grasping::ApproachType& bo)
+void armarx::grasping::fromAron(const armarx::grasping::arondto::ApproachType& dto,
+                                armarx::grasping::ApproachType& bo)
 {
     switch (dto.value)
     {
@@ -344,7 +360,8 @@ void armarx::grasping::fromAron(const armarx::grasping::arondto::ApproachType& d
 
 }
 
-void armarx::grasping::toAron(armarx::grasping::arondto::ApproachType& dto, const armarx::grasping::ApproachType& bo)
+void armarx::grasping::toAron(armarx::grasping::arondto::ApproachType& dto,
+                              const armarx::grasping::ApproachType& bo)
 {
     switch (bo)
     {
@@ -362,7 +379,8 @@ void armarx::grasping::toAron(armarx::grasping::arondto::ApproachType& dto, cons
 
 }
 
-void armarx::grasping::fromAron(const armarx::grasping::arondto::ApertureType& dto, armarx::grasping::ApertureType& bo)
+void armarx::grasping::fromAron(const armarx::grasping::arondto::ApertureType& dto,
+                                armarx::grasping::ApertureType& bo)
 {
     switch (dto.value)
     {
@@ -379,7 +397,8 @@ void armarx::grasping::fromAron(const armarx::grasping::arondto::ApertureType& d
     ARMARX_UNEXPECTED_ENUM_VALUE(arondto::ObjectType, dto.value);
 }
 
-void armarx::grasping::toAron(armarx::grasping::arondto::ApertureType& dto, const armarx::grasping::ApertureType& bo)
+void armarx::grasping::toAron(armarx::grasping::arondto::ApertureType& dto,
+                              const armarx::grasping::ApertureType& bo)
 {
     switch (bo)
     {