diff --git a/CHANGELOG.md b/CHANGELOG.md
index 12045cb7ff558e22d41a1049f621ed80bdd66927..9109c475d6411e3a8135f2ca9c2e4375e9b01164 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,8 @@
 
 ## 0.4.0 - UNRELEASED
 
+  * **BREAKING** Removed `arm_id` from launchfiles
+  * **BREAKING** Changed namespace of `franka_control` controller manager
   * Changes in `panda_moveit_config`:
     * Updated joint limits from URDF
     * Removed `home` poses
diff --git a/franka_control/config/default_controllers.yaml b/franka_control/config/default_controllers.yaml
index e3a3f947df83346b42516b20258874c1a1a6e33e..533a31c51359428a4a14f797bd2db5e52640befd 100644
--- a/franka_control/config/default_controllers.yaml
+++ b/franka_control/config/default_controllers.yaml
@@ -63,4 +63,12 @@ effort_joint_trajectory_controller:
 franka_state_controller:
   type: franka_control/FrankaStateController
   publish_rate: 30  # [Hz]
-
+  joint_names:
+    - panda_joint1
+    - panda_joint2
+    - panda_joint3
+    - panda_joint4
+    - panda_joint5
+    - panda_joint6
+    - panda_joint7
+  arm_id: panda
diff --git a/franka_control/config/franka_control.yaml b/franka_control/config/franka_control_node.yaml
similarity index 100%
rename from franka_control/config/franka_control.yaml
rename to franka_control/config/franka_control_node.yaml
diff --git a/franka_control/launch/franka_control.launch b/franka_control/launch/franka_control.launch
index 1b2fe028515f3a31e33037665c0e09f0020c99ae..dbc6d192af7060650caf43b86b4ea162874d6af6 100644
--- a/franka_control/launch/franka_control.launch
+++ b/franka_control/launch/franka_control.launch
@@ -1,26 +1,22 @@
 <?xml version="1.0" ?>
 <launch>
   <arg name="robot_ip" default="robot.franka.de" />
-  <arg name="arm_id" default="panda" />
   <arg name="load_gripper" default="true" />
 
-  <node name="$(arg arm_id)" pkg="franka_control" type="franka_control_node" output="screen" required="true">
-    <rosparam command="load" file="$(find franka_control)/config/franka_control.yaml" />
+  <param name="robot_description" command="$(find xacro)/xacro --inorder '$(find franka_description)/robots/panda_arm_hand.urdf.xacro'" if="$(arg load_gripper)" />
+  <param name="robot_description" command="$(find xacro)/xacro --inorder '$(find franka_description)/robots/panda_arm.urdf.xacro'" unless="$(arg load_gripper)" />
+
+  <node name="franka_control" pkg="franka_control" type="franka_control_node" output="screen" required="true">
+    <rosparam command="load" file="$(find franka_control)/config/franka_control_node.yaml" />
     <param name="robot_ip" value="$(arg robot_ip)" />
-    <param name="arm_id" value="$(arg arm_id)" />
-    <param name="robot_description" command="$(find xacro)/xacro --inorder '$(find franka_description)/robots/panda_arm_hand.urdf.xacro'" if="$(arg load_gripper)" />
-    <param name="robot_description" command="$(find xacro)/xacro --inorder '$(find franka_description)/robots/panda_arm.urdf.xacro'" unless="$(arg load_gripper)" />
   </node>
 
-  <group ns="$(arg arm_id)">
-    <rosparam command="load" file="$(find franka_control)/config/default_controllers.yaml" />
-    <node name="state_controller_spawner" pkg="controller_manager" type="spawner" respawn="false" output="screen"  args="franka_state_controller"/>
-    <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" output="screen"/>
-    <node name="joint_state_publisher" type="joint_state_publisher" pkg="joint_state_publisher" output="screen">
-      <param name="robot_description" command="$(find xacro)/xacro --inorder '$(find franka_description)/robots/panda_arm_hand.urdf.xacro'" />
-      <rosparam  if="$(arg load_gripper)" param="source_list">[franka_state_controller/joint_states, franka_gripper_node/joint_states] </rosparam>
-      <rosparam  unless="$(arg load_gripper)" param="source_list">[franka_state_controller/joint_states] </rosparam>
-      <param name="rate" value="30"/>
-    </node>
-  </group>
+  <rosparam command="load" file="$(find franka_control)/config/default_controllers.yaml" />
+  <node name="state_controller_spawner" pkg="controller_manager" type="spawner" respawn="false" output="screen" args="franka_state_controller"/>
+  <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" output="screen"/>
+  <node name="joint_state_publisher" type="joint_state_publisher" pkg="joint_state_publisher" output="screen">
+    <rosparam if="$(arg load_gripper)" param="source_list">[franka_state_controller/joint_states, franka_gripper/joint_states] </rosparam>
+    <rosparam  unless="$(arg load_gripper)" param="source_list">[franka_state_controller/joint_states] </rosparam>
+    <param name="rate" value="30"/>
+  </node>
 </launch>
diff --git a/franka_control/src/franka_control_node.cpp b/franka_control/src/franka_control_node.cpp
index ac442663b4df70f9eaca462c97497494dce961ae..619268609fccf426869b47a859799e8d18e84a5b 100644
--- a/franka_control/src/franka_control_node.cpp
+++ b/franka_control/src/franka_control_node.cpp
@@ -30,7 +30,8 @@ class ServiceContainer {
 };
 
 int main(int argc, char** argv) {
-  ros::init(argc, argv, "franka_hw");
+  ros::init(argc, argv, "franka_control_node");
+  ros::NodeHandle public_node_handle;
   ros::NodeHandle node_handle("~");
 
   std::vector<std::string> joint_names_vector;
@@ -42,9 +43,16 @@ int main(int argc, char** argv) {
   std::copy(joint_names_vector.cbegin(), joint_names_vector.cend(), joint_names.begin());
 
   std::string robot_ip;
-  node_handle.getParam("robot_ip", robot_ip);
+  if (!node_handle.getParam("robot_ip", robot_ip)) {
+    ROS_ERROR("Invalid or no robot_ip parameter provided");
+    return 1;
+  }
+
   std::string arm_id;
-  node_handle.getParam("arm_id", arm_id);
+  if (!node_handle.getParam("arm_id", arm_id)) {
+    ROS_ERROR("Invalid or no arm_id parameter provided");
+    return 1;
+  }
   franka::Robot robot(robot_ip);
 
   // Set default collision behavior
@@ -87,6 +95,7 @@ int main(int argc, char** argv) {
           robot.automaticErrorRecovery();
           has_error = false;
           recovery_action_server.setSucceeded();
+          ROS_INFO("Recovered from error");
         } catch (const franka::Exception& ex) {
           recovery_action_server.setAborted(franka_control::ErrorRecoveryResult(), ex.what());
         }
@@ -94,12 +103,12 @@ int main(int argc, char** argv) {
       false);
 
   franka::Model model = robot.loadModel();
-  franka_hw::FrankaHW franka_control(joint_names, arm_id, node_handle, model);
+  franka_hw::FrankaHW franka_control(joint_names, arm_id, public_node_handle, model);
 
   // Initialize robot state before loading any controller
   franka_control.update(robot.readOnce());
 
-  controller_manager::ControllerManager control_manager(&franka_control, node_handle);
+  controller_manager::ControllerManager control_manager(&franka_control, public_node_handle);
 
   recovery_action_server.start();
 
diff --git a/franka_control/src/franka_state_controller.cpp b/franka_control/src/franka_state_controller.cpp
index 2faa5aea54f6cf4c66a145cc0c2b844de04f4ef1..f7af454c738370112b3e2c8adea005f62b1666ab 100644
--- a/franka_control/src/franka_state_controller.cpp
+++ b/franka_control/src/franka_state_controller.cpp
@@ -151,7 +151,7 @@ bool FrankaStateController::init(hardware_interface::RobotHW* robot_hardware,
     ROS_ERROR("FrankaStateController: Could not get Franka state interface from hardware");
     return false;
   }
-  if (!root_node_handle.getParam("arm_id", arm_id_)) {
+  if (!controller_node_handle.getParam("arm_id", arm_id_)) {
     ROS_ERROR("FrankaStateController: Could not get parameter arm_id");
     return false;
   }
@@ -163,7 +163,7 @@ bool FrankaStateController::init(hardware_interface::RobotHW* robot_hardware,
                     << publish_rate << " [Hz].");
   }
 
-  if (!root_node_handle.getParam("joint_names", joint_names_) ||
+  if (!controller_node_handle.getParam("joint_names", joint_names_) ||
       joint_names_.size() != robot_state_.q.size()) {
     ROS_ERROR(
         "FrankaStateController: Invalid or no joint_names parameters provided, aborting "
diff --git a/franka_example_controllers/launch/move_to_start.launch b/franka_example_controllers/launch/move_to_start.launch
index ed8accb2b7fd8bc9d4e7636b08fc210e5c2f7601..15c8f66dab4e7a618b3f9746e5227dbd5f9e8a25 100644
--- a/franka_example_controllers/launch/move_to_start.launch
+++ b/franka_example_controllers/launch/move_to_start.launch
@@ -1,18 +1,13 @@
 <?xml version="1.0" ?>
 <launch>
   <arg name="robot_ip" default="robot.franka.de" />
-  <arg name="arm_id" default="panda" />
   <arg name="load_gripper" default="true" />
 
   <include file="$(find franka_control)/launch/franka_control.launch">
     <arg name="robot_ip" value="$(arg robot_ip)" />
-    <arg name="arm_id" value="$(arg arm_id)" />
     <arg name="load_gripper" value="$(arg load_gripper)" />
   </include>
   <include file="$(find panda_moveit_config)/launch/panda_moveit.launch">
-    <arg name="arm_id" value="$(arg arm_id)" />
   </include>
-  <group ns="$(arg arm_id)">
-    <node name="move_to_start" pkg="franka_example_controllers" type="move_to_start.py" output="screen" required="true" />
-  </group>
+  <node name="move_to_start" pkg="franka_example_controllers" type="move_to_start.py" output="screen" required="true" />
 </launch>
diff --git a/franka_gripper/config/gripper_node_config.yaml b/franka_gripper/config/franka_gripper_node.yaml
similarity index 100%
rename from franka_gripper/config/gripper_node_config.yaml
rename to franka_gripper/config/franka_gripper_node.yaml
diff --git a/franka_gripper/launch/franka_gripper.launch b/franka_gripper/launch/franka_gripper.launch
index d990574d4c8511c770b9612fe60a074a25fbb1ad..93c9e43474a0e62e209b28b0c1bf24e2e8182552 100644
--- a/franka_gripper/launch/franka_gripper.launch
+++ b/franka_gripper/launch/franka_gripper.launch
@@ -1,11 +1,9 @@
 <?xml version="1.0" ?>
 <launch>
   <arg name="robot_ip" default="robot.franka.de" />
-  <arg name="arm_id" default="panda" />
-  <group ns="$(arg arm_id)">
-    <node name="franka_gripper_node" pkg="franka_gripper" type="franka_gripper_node" output="screen">
-      <param name="robot_ip" value="$(arg robot_ip)"/>
-      <rosparam command="load" file="$(find franka_gripper)/config/gripper_node_config.yaml" />
-    </node>
-  </group>
+
+  <node name="franka_gripper" pkg="franka_gripper" type="franka_gripper_node" output="screen">
+    <param name="robot_ip" value="$(arg robot_ip)"/>
+    <rosparam command="load" file="$(find franka_gripper)/config/franka_gripper_node.yaml" />
+  </node>
 </launch>
diff --git a/franka_visualization/launch/franka_visualization.launch b/franka_visualization/launch/franka_visualization.launch
index a713f4fd5963bbe88cad4a795130220b08ab10d0..4bbee5d6703fb830bd89efbbcaf053cc486134dc 100644
--- a/franka_visualization/launch/franka_visualization.launch
+++ b/franka_visualization/launch/franka_visualization.launch
@@ -21,8 +21,6 @@
   </node>
 
   <node name="joint_state_publisher" type="joint_state_publisher" pkg="joint_state_publisher" output="screen">
-    <param if="$(arg load_gripper)" name="robot_description" command="$(find xacro)/xacro --inorder '$(find franka_description)/robots/panda_arm_hand.urdf.xacro'" />
-    <param unless="$(arg load_gripper)" name="robot_description" command="$(find xacro)/xacro --inorder '$(find franka_description)/robots/panda_arm.urdf.xacro'" />
     <param name="rate" value="$(arg publish_rate)" />
     <rosparam param="source_list">[robot_joint_state_publisher/joint_states, gripper_joint_state_publisher/joint_states]</rosparam>
   </node>
diff --git a/panda_moveit_config/launch/moveit_rviz.launch b/panda_moveit_config/launch/moveit_rviz.launch
index 71f196efab7eb3e525978ab35d8d1f31a0d4e018..17387f9e2923ca48cf2cb8feab98e92c0e297491 100644
--- a/panda_moveit_config/launch/moveit_rviz.launch
+++ b/panda_moveit_config/launch/moveit_rviz.launch
@@ -8,13 +8,9 @@
   <arg unless="$(arg config)" name="command_args" value="" />
   <arg     if="$(arg config)" name="command_args" value="-d $(find panda_moveit_config)/launch/moveit.rviz" />
 
-  <arg name="arm_id" default="panda" />
-
-  <group ns="$(arg arm_id)">
-    <node name="$(anon rviz)" launch-prefix="$(arg launch_prefix)" pkg="rviz" type="rviz" respawn="false"
-        args="$(arg command_args)" output="screen">
-      <rosparam command="load" file="$(find panda_moveit_config)/config/kinematics.yaml"/>
-    </node>
-  </group>
+  <node name="$(anon rviz)" launch-prefix="$(arg launch_prefix)" pkg="rviz" type="rviz" respawn="false"
+      args="$(arg command_args)" output="screen">
+    <rosparam command="load" file="$(find panda_moveit_config)/config/kinematics.yaml"/>
+  </node>
 
 </launch>
diff --git a/panda_moveit_config/launch/panda_moveit.launch b/panda_moveit_config/launch/panda_moveit.launch
index a879467f3b7a9e5122e095ccf36f14231585e8da..cab708e88cb73ec9666391a4eef243cacd64c762 100644
--- a/panda_moveit_config/launch/panda_moveit.launch
+++ b/panda_moveit_config/launch/panda_moveit.launch
@@ -1,11 +1,8 @@
 <?xml version="1.0" ?>
 <launch>
-  <arg name="arm_id" default="panda" />
   <!-- Valid values: "position", "effort" -->
   <arg name="controller" default="position" />
 
-  <group ns="$(arg arm_id)">
-    <node name="controller_spawner" pkg="controller_manager" type="spawner" respawn="false" output="screen" args="$(arg controller)_joint_trajectory_controller"/>
-    <include file="$(find panda_moveit_config)/launch/move_group.launch" />
-  </group>
+  <node name="controller_spawner" pkg="controller_manager" type="spawner" respawn="false" output="screen" args="$(arg controller)_joint_trajectory_controller"/>
+  <include file="$(find panda_moveit_config)/launch/move_group.launch" />
 </launch>