diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9420997fb3ba103e86af55b3ccb5a45497064a77..89e6a9bef58fc385277aa9e1f6ed60d9de75f5c0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -9,23 +9,14 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS} ${GAZEBO_C
 # Find catkin macros and libraries if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz) is used, also find other
 # catkin packages
 find_package(catkin REQUIRED
-             COMPONENTS controller_interface
-                        hardware_interface
-                        robot_state_publisher
+             COMPONENTS
                         roscpp
                         std_msgs
-                        tf
+                        tf2
                         moveit_core
-                        moveit_visual_tools
-                        moveit_ros_planning
                         moveit_ros_planning_interface
                         message_generation)
 
-# System dependencies are found with CMake's conventions
-find_package(Boost REQUIRED COMPONENTS filesystem)
-
-find_package(PkgConfig REQUIRED)
-
 ## Generate services in the 'srv' folder
 add_service_files(
         FILES
@@ -47,10 +38,7 @@ generate_messages(
 # The catkin_package macro generates cmake config files for your package Declare things to be passed to dependent projects
 catkin_package(CATKIN_DEPENDS
                moveit_core
-               moveit_visual_tools
                moveit_ros_planning_interface
-               controller_interface
-               hardware_interface
                pluginlib
         )
 
@@ -67,6 +55,7 @@ add_executable(pose_tf_listener src/teaching/pose_tf_listener.cpp)
 
 add_dependencies(pose_storage_service panda_teaching_generate_messages_cpp)
 add_dependencies(pose_tf_listener panda_teaching_generate_messages_cpp)
+add_dependencies(pose_replayer panda_teaching_generate_messages_cpp)
 
 target_link_libraries(pose_storage_service ${catkin_LIBRARIES})
 target_link_libraries(pose_tf_listener ${catkin_LIBRARIES})
diff --git a/package.xml b/package.xml
index 75142d834594de02335b72220b64fcfa6e24e156..48646385d541bf93e3f91db77ad04fa9c7a768fb 100644
--- a/package.xml
+++ b/package.xml
@@ -14,10 +14,8 @@
 
   <depend>moveit_core</depend>
   <depend>moveit_ros_planning_interface</depend>
-  <depend>moveit_ros_perception</depend>
-  <depend>moveit_visual_tools</depend>
-  <depend>controller_interface</depend>
-  <depend>hardware_interface</depend>
+  <depend>robot_state_publisher</depend>
+  <depend>tf2</depend>
   <build_depend>message_generation</build_depend>
   <exec_depend>message_runtime</exec_depend>
 
diff --git a/src/teaching/pose_replayer.cpp b/src/teaching/pose_replayer.cpp
index fe3fc08ebe0f81cee80d99f6ca40f872d17dfae3..777071072d7287924dea544f65d320c868d200e1 100644
--- a/src/teaching/pose_replayer.cpp
+++ b/src/teaching/pose_replayer.cpp
@@ -8,9 +8,6 @@
 
 #include <moveit/move_group_interface/move_group_interface.h>
 #include <moveit/planning_scene_interface/planning_scene_interface.h>
-#include <moveit_msgs/CollisionObject.h>
-#include <moveit_visual_tools/moveit_visual_tools.h>
-#include <moveit/trajectory_processing/iterative_time_parameterization.h>
 
 #include "panda_teaching/GetCollectedPoses.h"
 
@@ -19,22 +16,9 @@ void replayCallback(const std_msgs::String::ConstPtr &msg, ros::NodeHandle &node
     static const std::string PLANNING_GROUP = "panda_arm";
     moveit::planning_interface::MoveGroupInterface move_group(PLANNING_GROUP);
     moveit::planning_interface::PlanningSceneInterface planning_scene_interface;
-    const robot_state::JointModelGroup *joint_model_group =
-            move_group.getCurrentState()->getJointModelGroup(PLANNING_GROUP);
 
     std::vector<geometry_msgs::Pose> poses;
 
-    // Visualization Setup
-    namespace rvt = rviz_visual_tools;
-    moveit_visual_tools::MoveItVisualTools visual_tools("panda_link0");
-    visual_tools.deleteAllMarkers();
-    visual_tools.loadRemoteControl();
-
-    Eigen::Isometry3d text_pose = Eigen::Isometry3d::Identity();
-    text_pose.translation().z() = 1.75;
-    visual_tools.publishText(text_pose, "Sample constraint planner node", rvt::WHITE, rvt::XLARGE);
-    visual_tools.trigger();
-
     ros::ServiceClient client = node_handle.serviceClient<panda_teaching::GetCollectedPoses>("GetCollectedPoses");
     panda_teaching::GetCollectedPoses srv;
 
diff --git a/src/teaching/pose_storage_service.cpp b/src/teaching/pose_storage_service.cpp
index 8505bad07c367fddfb15b1281ca5e6b3d07d0599..f42e44dac8e4a81a88b67db115c595d7ee6a44ef 100644
--- a/src/teaching/pose_storage_service.cpp
+++ b/src/teaching/pose_storage_service.cpp
@@ -2,9 +2,6 @@
 #include "panda_teaching/GetCollectedPoses.h"
 #include "panda_teaching/SavePose.h"
 #include "panda_teaching/DeletePose.h"
-#include <tf2_ros/transform_listener.h>
-#include <geometry_msgs/TransformStamped.h>
-#include <geometry_msgs/Twist.h>
 #include <geometry_msgs/Pose.h>
 
 std::vector<geometry_msgs::Pose> poses;
@@ -20,7 +17,6 @@ bool saveCollectedPose(panda_teaching::SavePose::Request &req,
                        panda_teaching::SavePose::Response &res) {
 
     poses.push_back(req.pose);
-
     return true;
 }
 
@@ -28,7 +24,6 @@ bool deleteCollectedPoses(panda_teaching::DeletePose::Request &req,
                           panda_teaching::DeletePose::Response &res) {
 
     poses.clear();
-
     return true;
 }
 
diff --git a/src/teaching/pose_tf_listener.cpp b/src/teaching/pose_tf_listener.cpp
index b66c3140bf94543720e18cea5fa897399c81e908..a2b7e5a53f50ffddb70c5c42e2a3d1f84be081e0 100644
--- a/src/teaching/pose_tf_listener.cpp
+++ b/src/teaching/pose_tf_listener.cpp
@@ -4,7 +4,6 @@
 #include <ros/ros.h>
 #include <tf2_ros/transform_listener.h>
 #include <geometry_msgs/TransformStamped.h>
-#include <geometry_msgs/Twist.h>
 #include <std_msgs/String.h>
 
 #include "panda_teaching/SavePose.h"
@@ -55,13 +54,9 @@ void collectorCallback(const std_msgs::String::ConstPtr &msg, ros::NodeHandle &n
       ROS_ERROR_STREAM("transform_error: " << ex.what() << std::endl);
       ros::Duration(1.0).sleep();
     }
-    return;
-  }
-
-  if (msg->data.compare("clear") == 0) {
+  } else if (msg->data.compare("clear") == 0) {
     ROS_INFO("Deleting saved poses...");
     cleanUp(node_handle);
-    return;
   }
 }