diff --git a/CMakeLists.txt b/CMakeLists.txt
index 657fdbb5ca9209a75475fb94cf7241e47d1300cc..cc82036cc42d8255d0d9c69081eb707066af82ca 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -6,7 +6,7 @@ find_package(catkin REQUIRED)
 # ******************************************************************** 
 #                 Add catkin additional components here
 # ******************************************************************** 
-find_package(catkin REQUIRED COMPONENTS iri_base_algorithm tf)
+find_package(catkin REQUIRED COMPONENTS iri_base_algorithm tf2_ros)
 
 ## System dependencies are found with CMake's conventions
 # find_package(Boost REQUIRED COMPONENTS system)
@@ -60,7 +60,7 @@ catkin_package(
 # ******************************************************************** 
 #            Add ROS and IRI ROS run time dependencies
 # ******************************************************************** 
- CATKIN_DEPENDS iri_base_algorithm tf
+ CATKIN_DEPENDS iri_base_algorithm tf2_ros
 # ******************************************************************** 
 #      Add system and labrobotica run time dependencies here
 # ******************************************************************** 
diff --git a/cfg/DynamicTransformPublisher.cfg b/cfg/DynamicTransformPublisher.cfg
index ba21b11ba88915696268c05716f820f7d3f865c1..6116fd939a5fee39b1babe59c125ea21c16905ff 100755
--- a/cfg/DynamicTransformPublisher.cfg
+++ b/cfg/DynamicTransformPublisher.cfg
@@ -38,10 +38,10 @@ from dynamic_reconfigure.parameter_generator_catkin import *
 gen = ParameterGenerator()
 
 #       Name                 Type      Reconf level   Description                     Default   Min   Max
+gen.add("rate",              double_t, 0,             "Main loop rate (Hz)",          10.0,     0.1,  1000.0)
 gen.add("broadcast",         bool_t,   0,             "enable broadcasting",          True)
 gen.add("parent_id",         str_t,    0,             "parent frame id",              "parent")
 gen.add("frame_id",          str_t,    0,             "child frame id",               "child")
-gen.add("period",            double_t, 0,             "period in ms",  100.0,         0.0,  10000.0)
 gen.add("reset_translation", bool_t,   0,             "reset x y z offsets to zero",  False)
 gen.add("x",                 double_t, 0,             "x offset in meters",           0.0,      -1000.0,  1000.0)
 gen.add("y",                 double_t, 0,             "y offset in meters",           0.0,      -1000.0,  1000.0)
diff --git a/include/dynamic_transform_publisher_alg_node.h b/include/dynamic_transform_publisher_alg_node.h
index 57f1886456b93c88c3efcd7023e1268c5ee97ae9..eea33916c32f270e8d2ec09b97f49e7313319fb9 100644
--- a/include/dynamic_transform_publisher_alg_node.h
+++ b/include/dynamic_transform_publisher_alg_node.h
@@ -34,7 +34,9 @@
 
 // [action server client headers]
 
-#include <tf/transform_broadcaster.h>
+#include <tf2_ros/transform_broadcaster.h>
+#include "tf2_geometry_msgs/tf2_geometry_msgs.h"
+
 
 /**
  * \brief IRI ROS Specific Algorithm Class
@@ -54,8 +56,9 @@ class DynamicTransformPublisherAlgNode : public algorithm_base::IriBaseAlgorithm
     // [action server attributes]
 
     // [action client attributes]
-    geometry_msgs::TransformStamped transform;
-    tf::TransformBroadcaster tf_broadcaster;
+    tf2_ros::TransformBroadcaster tf2_broadcaster;
+    geometry_msgs::TransformStamped transform_msg;
+
 
    /**
     * \brief config variable
diff --git a/package.xml b/package.xml
index 6f0947fc7beee9fb7eb2823eeb617386897cfc3b..5c9be8a1feb83521e17e5565eefa2e57436d57ac 100644
--- a/package.xml
+++ b/package.xml
@@ -52,7 +52,7 @@
   <!--   <doc_depend>doxygen</doc_depend> -->
   <buildtool_depend>catkin</buildtool_depend>
   <depend>iri_base_algorithm</depend>
-  <depend>tf</depend>
+  <depend>tf2_ros</depend>
 
 
   <!-- The export tag contains other, unspecified, tags -->
@@ -60,4 +60,4 @@
     <!-- Other tools can request additional information be placed here -->
 
   </export>
-</package>
\ No newline at end of file
+</package>
diff --git a/param/params.yaml b/param/params.yaml
index 495c72d0d95caf335f5882c63ac548f89e16679f..30f019a6244eddb342cc42da68ff0667abde28d6 100644
--- a/param/params.yaml
+++ b/param/params.yaml
@@ -1,10 +1,10 @@
+rate: 10.0
 broadcast:    True
 parent_id:   'parent'
 frame_id:    'child'
-period:      100
 x:     0.0
 y:     0.0
 z:     1.0
 roll:  0.0
 pitch: 0.0
-yaw:   0.0
\ No newline at end of file
+yaw:   0.0
diff --git a/src/dynamic_transform_publisher_alg_node.cpp b/src/dynamic_transform_publisher_alg_node.cpp
index d02872a8918388c97eec6d6e3e5b1799a352b18e..fa9a38d8ed4db3027a410910199407ff3a12b15c 100644
--- a/src/dynamic_transform_publisher_alg_node.cpp
+++ b/src/dynamic_transform_publisher_alg_node.cpp
@@ -38,8 +38,8 @@ void DynamicTransformPublisherAlgNode::mainNodeThread(void)
   this->alg_.lock();
   if(this->config_.broadcast)
   {
-    this->transform.header.stamp = ros::Time::now();
-    this->tf_broadcaster.sendTransform(this->transform);
+    this->transform_msg.header.stamp = ros::Time::now();
+    this->tf2_broadcaster.sendTransform(this->transform_msg);
   }
 
   this->alg_.unlock();
@@ -56,10 +56,13 @@ void DynamicTransformPublisherAlgNode::mainNodeThread(void)
 void DynamicTransformPublisherAlgNode::node_config_update(Config &config, uint32_t level)
 {
   this->alg_.lock();
-  
-  this->transform.header.stamp    = ros::Time::now();
-  this->transform.header.frame_id = config.parent_id;
-  this->transform.child_frame_id  = config.frame_id;
+
+  if(config.rate!=this->getRate())
+    this->setRate(config.rate);
+
+  this->transform_msg.header.stamp    = ros::Time::now();
+  this->transform_msg.header.frame_id = config.parent_id;
+  this->transform_msg.child_frame_id  = config.frame_id;
   
   if(config.reset_translation)
   {
@@ -79,17 +82,19 @@ void DynamicTransformPublisherAlgNode::node_config_update(Config &config, uint32
     config.pitch=0.0;
     config.yaw  =0.0;
   }
-  geometry_msgs::Quaternion q = tf::createQuaternionMsgFromRollPitchYaw(config.roll,config.pitch,config.yaw);
-  t.rotation = q;
-  this->transform.transform  = t;
 
-  this->setRate(1000.0/config.period);
-  //this->loop_rate_ = 1000.0/config.period;
+  tf2::Quaternion quat_tf;
+  quat_tf.setRPY(config.roll, config.pitch, config.yaw);
+  geometry_msgs::Quaternion quat_msg;
+  tf2::convert(quat_tf, quat_msg);
+
+  t.rotation = quat_msg;
+  this->transform_msg.transform  = t;
   
   if(config.show_rosrun)
   {
     config.show_rosrun=false;
-    ROS_INFO("rosrun tf static_transform_publisher %f %f %f %f %f %f %s %s %f", config.x, config.y, config.z, config.yaw, config.pitch, config.roll, config.parent_id.c_str(), config.frame_id.c_str(), config.period);
+    ROS_INFO("rosrun tf2_ros static_transform_publisher %f %f %f %f %f %f %s %s", config.x, config.y, config.z, config.yaw, config.pitch, config.roll, config.parent_id.c_str(), config.frame_id.c_str());
   }
   this->config_=config;
   this->alg_.unlock();