diff --git a/hbp_nrp_music_interface/hbp_nrp_music_interface/launch/MUSICLauncher.py b/hbp_nrp_music_interface/hbp_nrp_music_interface/launch/MUSICLauncher.py
index f5088300247494e028669191fdc4988af55fbaca..bb034aff1f7243434f3ade3c77823b7bb82ffec2 100644
--- a/hbp_nrp_music_interface/hbp_nrp_music_interface/launch/MUSICLauncher.py
+++ b/hbp_nrp_music_interface/hbp_nrp_music_interface/launch/MUSICLauncher.py
@@ -133,3 +133,6 @@ class MUSICLauncher(object):
         if self._launcher:
             self._launcher.shutdown()
         self._launcher = None
+
+        # finally, cleanup the roscore and any registrations launched by the above
+        os.system("echo 'y' | timeout -s SIGKILL 10s rosnode cleanup >/dev/null 2>&1")
diff --git a/hbp_nrp_music_interface/hbp_nrp_music_interface/tests/launch/test_music_launcher.py b/hbp_nrp_music_interface/hbp_nrp_music_interface/tests/launch/test_music_launcher.py
index 6148bfe85ec2f6ce303f516158d53e054904eafb..696944096bc6e4f8851a6d029c14f6932b76c305 100644
--- a/hbp_nrp_music_interface/hbp_nrp_music_interface/tests/launch/test_music_launcher.py
+++ b/hbp_nrp_music_interface/hbp_nrp_music_interface/tests/launch/test_music_launcher.py
@@ -47,7 +47,8 @@ class TestMUSICLauncher(unittest.TestCase):
           self.__launcher.cle_server.build.assert_called_once()
           self.__launcher.cle_server.launch.assert_called_once()
 
-      def test_shutdown(self):
+      @patch('os.system')
+      def test_shutdown(self, system_mock):
 
           # mock the cleserver and launcher
           mock_cle_server = Mock()
@@ -68,5 +69,8 @@ class TestMUSICLauncher(unittest.TestCase):
           self.assertEqual(self.__launcher.cle_server, None)
           self.assertEqual(self.__launcher._launcher, None)
 
+          # verify the ros cleanup command has been called
+          system_mock.assert_called_once()
+
 if __name__ == "__main__":
     unittest.main()