diff --git a/src/visual_gps_alg_node.cpp b/src/visual_gps_alg_node.cpp
index 4b37121b7e183a1c729101f9d0c196e57d689226..1247e25e857563efe87e2289cab43432ce6a6bd9 100644
--- a/src/visual_gps_alg_node.cpp
+++ b/src/visual_gps_alg_node.cpp
@@ -8,7 +8,7 @@ VisualGpsAlgNode::VisualGpsAlgNode(void) :
   //init class attributes if necessary
   double rate;
   this->private_node_handle_.param<double>("framerate", rate, 10.0);
-  this->loop_rate_ = rate;//in [Hz]
+  this->setRate(rate);//in [Hz]
 
   // [init publishers]
   this->pose_publisher_ = this->private_node_handle_.advertise<geometry_msgs::PoseStamped>("pose", 1);
@@ -304,7 +304,12 @@ void VisualGpsAlgNode::set_exposure_mutex_exit(void)
 void VisualGpsAlgNode::node_config_update(Config &config, uint32_t level)
 {
   this->alg_.lock();
-  this->loop_rate_ = config.framerate;
+  static double last_rate=1;
+  if(last_rate!=config.framerate)
+  {
+    this->setRate(config.framerate);
+    last_rate=config.framerate;
+  }
   
   this->config_=config;
   this->alg_.unlock();