diff --git a/ur5_driver/driver.py b/ur5_driver/driver.py
index 9473d6be2e30ce5b1df80d2233d3f8e4dae21c71..602f3301a961cf00ccd125adac7052258d77f6e2 100755
--- a/ur5_driver/driver.py
+++ b/ur5_driver/driver.py
@@ -4,6 +4,8 @@ import time, sys, threading
 import socket
 import struct
 import SocketServer
+import rospy
+from sensor_msgs.msg import JointState
 
 HOSTNAME='ur-xx'
 HOSTNAME="10.0.1.20"
@@ -14,6 +16,11 @@ MSG_QUIT = 2
 MSG_JOINT_STATES = 3
 MULT_jointstate = 1000.0
 
+JOINT_NAMES = ['shoulder_pan_joint', 'shoulder_lift_joint', 'elbow_joint',
+               'wrist_1_joint', 'wrist_2_joint', 'wrist_3_joint']
+
+pub_joint_states = rospy.Publisher('joint_states', JointState)
+
 class EOF(Exception): pass
 
 # Only handles JOINT_STATES messages.
@@ -55,6 +62,14 @@ class StateTCPHandler(SocketServer.BaseRequestHandler):
                     buf = buf[3*6*4:]
                     state = [s / MULT_jointstate for s in state_mult]
                     print "Joint state:", state
+
+                    msg = JointState()
+                    msg.header.stamp = rospy.get_rostime()
+                    msg.name = JOINT_NAMES
+                    msg.position = state[:6]
+                    msg.velocity = state[6:12]
+                    msg.effort = state[12:18]
+                    pub_joint_states.publish(msg)
                 else:
                     raise Exception("Unknown message type: %i" % mtype)
 
@@ -120,6 +135,7 @@ class TCPServer(SocketServer.TCPServer):
 sock = None
 def main():
     global sock
+    rospy.init_node('ur5_driver', disable_signals=True)
 
     # Sends the program to the robot
     sock = socket.create_connection((HOSTNAME, PORT))
@@ -127,10 +143,11 @@ def main():
         sock.sendall(fin.read())
 
     server = TCPServer(("", 50001), CommanderTCPHandler)
-    server2 = TCPServer(("", 50002), StateTCPHandler)
+    server_state = TCPServer(("", 50002), StateTCPHandler)
 
     thread_commander = threading.Thread(name="CommanderHandler", target=server.handle_request)
-    thread_state = threading.Thread(name="StateHandler", target=server2.handle_request)
+    thread_state = threading.Thread(name="StateHandler", target=server_state.handle_request)
+    thread_commander.daemon = True
     thread_state.daemon = True
     thread_commander.start()
     thread_state.start()
diff --git a/ur5_driver/manifest.xml b/ur5_driver/manifest.xml
index cb5be270ccd94bcc0630f1b136a336a65bd68dfb..4917f4b96a86a3902c8cd093990b210006186a2c 100644
--- a/ur5_driver/manifest.xml
+++ b/ur5_driver/manifest.xml
@@ -9,6 +9,8 @@
   <review status="unreviewed" notes=""/>
   <url>http://ros.org/wiki/ur5_driver</url>
 
+  <depend package="rospy" />
+
 </package>