diff --git a/.catkin_tools/profiles/default/devel_collisions.txt b/.catkin_tools/profiles/default/devel_collisions.txt
index 5fe0a469a7d78e0289e1efb6e99272ac49ac2943..f7c33dbe04d21804f6960432b598dd962adc43cb 100644
--- a/.catkin_tools/profiles/default/devel_collisions.txt
+++ b/.catkin_tools/profiles/default/devel_collisions.txt
@@ -1,4 +1,4 @@
 /home/matteo/ws_panda/devel/./cmake.lock 42
-/home/matteo/reachability/devel/./cmake.lock 26396
+/home/matteo/reachability/devel/./cmake.lock 26448
 /home/matteo/reachability/devel/lib/libmoveit_grasps.so 79
 /home/matteo/reachability/devel/lib/libmoveit_grasps_filter.so 79
diff --git a/src/mtc/include/impl/moveit_mediator.h b/src/mtc/include/impl/moveit_mediator.h
index 1a6533f32316b0ede3b470ef15233dbaf42424a6..98eb16068243ed90721cb9c21b92b5645ef4a0d5 100644
--- a/src/mtc/include/impl/moveit_mediator.h
+++ b/src/mtc/include/impl/moveit_mediator.h
@@ -95,7 +95,7 @@ class Moveit_mediator : public Abstract_mediator{
     void build_wings(std::bitset<3>& wing,int& robot) override;
     void set_wings(std::vector<std::vector<wing_BP>>& wbp) override;
 
-    void merge_ps(moveit_msgs::PlanningScene out, moveit_msgs::PlanningScene* in, Moveit_robot* mr);
+    void merge_ps(moveit_msgs::PlanningScene& out, moveit_msgs::PlanningScene* in, Moveit_robot* mr);
     void publish_tables();
     void load_robot_description();
     void rewrite_task_template(Abstract_robot* r, moveit_msgs::CollisionObject& source, tf2::Transform& target);
diff --git a/src/mtc/include/impl/moveit_robot.h b/src/mtc/include/impl/moveit_robot.h
index 178b3f67b100ed1cfbeb5309deb75230a17ca7aa..f05adb689106877b51b553587b63dab427f4bf69 100644
--- a/src/mtc/include/impl/moveit_robot.h
+++ b/src/mtc/include/impl/moveit_robot.h
@@ -19,8 +19,11 @@ class Moveit_robot : public Robot{
         std::stringstream hand_n, ik_frame_n, name_n;
         hand_n << "hand_" << name.back();
         ik_frame_n << "panda_" << name.back() << "_link8";
+        auto mgi_hand = moveit::planning_interface::MoveGroupInterface(hand_n.str());
 
-
+        map_.insert(std::make_pair<std::string, std::string>("right_finger", mgi_hand.getLinkNames()[0].c_str()));
+        map_.insert(std::make_pair<std::string, std::string>("left_finger", mgi_hand.getLinkNames()[1].c_str()));
+        map_.insert(std::make_pair<std::string, std::string>("hand_link", mgi_hand.getLinkNames()[2].c_str()));
         map_.insert(std::make_pair<std::string, std::string>("eef_name", hand_n.str()));
         map_.insert(std::make_pair<std::string, std::string>("hand_frame", ik_frame_n.str()));
         map_.insert(std::make_pair<std::string, std::string>("hand_group_name", hand_n.str()));
diff --git a/src/mtc/src/impl/moveit_mediator.cpp b/src/mtc/src/impl/moveit_mediator.cpp
index c726da371f8c71f7422a0efa20e9b6b179edd619..ffe848a747a866a022359200d1402665ff27887e 100644
--- a/src/mtc/src/impl/moveit_mediator.cpp
+++ b/src/mtc/src/impl/moveit_mediator.cpp
@@ -240,6 +240,7 @@ void Moveit_mediator::setup_task(){
 				moveit_msgs::RobotTrajectory* t2 = nullptr;
 				moveit_msgs::PlanningScene* ps1 = nullptr;
 				moveit_msgs::PlanningScene* ps2 = nullptr;
+				moveit_msgs::PlanningScene ps_m;
 
 				if (i < tasks[0].front().solution.sub_trajectory.size()){
 					t1 = &tasks[0].front().solution.sub_trajectory[i].trajectory;
@@ -324,6 +325,7 @@ void Moveit_mediator::setup_task(){
 					t2 = &tasks[1].front().solution.sub_trajectory[i].trajectory;
 					ps2 = &tasks[1].front().solution.sub_trajectory[i].scene_diff;
 
+
 					
 					ROS_INFO("[Robot 2] acm");
 					ROS_INFO("default entry names");
@@ -406,15 +408,22 @@ void Moveit_mediator::setup_task(){
 				if (t1){
 					Moveit_robot* mr = dynamic_cast<Moveit_robot*>(robots_[0]);
 					th.push_back(std::thread(&Moveit_mediator::parallel_exec, this, std::ref(*mr), *t1, *ps1));
+					merge_ps(ps_m, ps1, mr);
+
+
 				}
 
 				if (t2){
 					Moveit_robot* mr = dynamic_cast<Moveit_robot*>(robots_[1]);
-					th.push_back(std::thread(&Moveit_mediator::parallel_exec, this, std::ref(*mr), *t2, *ps2));				}
+					th.push_back(std::thread(&Moveit_mediator::parallel_exec, this, std::ref(*mr), *t2, *ps2));		
+					merge_ps(ps_m, ps2, mr);
+				}
 
 				for(int i = 0; i < th.size(); i++){
 					th[i].join();
 				}
+				planning_scene_diff_publisher_.publish(ps_m);
+
 			}
 			tasks[0].pop();
 			tasks[1].pop();
@@ -423,7 +432,48 @@ void Moveit_mediator::setup_task(){
 
 }
 
-void Moveit_mediator::merge_ps(moveit_msgs::PlanningScene out, moveit_msgs::PlanningScene* in, Moveit_robot* mr){
+void Moveit_mediator::merge_ps(moveit_msgs::PlanningScene& out, moveit_msgs::PlanningScene* in, Moveit_robot* mr){
+	// get full mr link list 
+	std::vector<std::string> links;
+	for (auto link : mr->mgi()->getLinkNames())links.push_back(link);
+	links.push_back(mr->map()["left_finger"]);
+	links.push_back(mr->map()["right_finger"]);
+	links.push_back(mr->map()["hand_link"]);
+	links.push_back(mr->map()["base"]);
+
+
+	for (auto ao : in->robot_state.attached_collision_objects) out.robot_state.attached_collision_objects.push_back(ao);
+	if (in->robot_state.is_diff) out.robot_state.is_diff = in->robot_state.is_diff;
+	if (in->is_diff) out.is_diff = in->is_diff;
+	out.robot_state.joint_state.header = in->robot_state.joint_state.header;
+	out.robot_model_name = "panda";
+
+
+
+	for (auto link : links) {
+		for(int i = 0; i < in->robot_state.joint_state.name.size(); i++){
+			if(link.c_str() == in->robot_state.joint_state.name[i].c_str()){
+				out.robot_state.joint_state.effort.push_back(in->robot_state.joint_state.effort[i]);
+				out.robot_state.joint_state.position.push_back(in->robot_state.joint_state.position[i]);
+				out.robot_state.joint_state.velocity.push_back(in->robot_state.joint_state.velocity[i]);
+				ROS_INFO("check");
+			}
+		}
+
+		for(int i = 0; i < in->link_padding.size(); i++){
+			if(link.c_str() == in->link_padding[i].link_name.c_str()){
+				out.link_padding.push_back(in->link_padding[i]);
+			}
+		}
+
+		for(int i = 0; i < in->link_scale.size(); i++){
+			if(link.c_str() == in->link_scale[i].link_name.c_str()){
+				out.link_scale.push_back(in->link_scale[i]);
+			}
+		}
+	}
+	
+
 	/*
 	for( auto aco : in->robot_state.attached_collision_objects) {
 		out.robot_state.attached_collision_objects.push_back(aco);
@@ -445,8 +495,6 @@ void Moveit_mediator::merge_ps(moveit_msgs::PlanningScene out, moveit_msgs::Plan
 	
 void Moveit_mediator::parallel_exec(Moveit_robot& mr, moveit_msgs::RobotTrajectory rt, moveit_msgs::PlanningScene ps){
 	mr.mgi()->execute(rt);
-	// planning_scene_diff_publisher_.publish(ps);
-
 }