diff --git a/src/can/virtual_can.cpp b/src/can/virtual_can.cpp
index 22e0f9732f8a82944946b3ffd99a23a008b1edaf..22d444021626047debc8a8681045ea122e0b94a8 100755
--- a/src/can/virtual_can.cpp
+++ b/src/can/virtual_can.cpp
@@ -27,6 +27,7 @@ CVirtualCAN::CVirtualCAN(const std::string &comm_id) : CComm(comm_id)
   this->event_server->create_event(this->data_requested_event_id);
   this->finish_can_thread_event_id=comm_id + "_finish_can_thread_event_id";
   this->event_server->create_event(this->finish_can_thread_event_id);
+  this->update_rate_hz=1000;
 }
 
 void CVirtualCAN::hard_open(void *comm_dev)
@@ -94,7 +95,7 @@ int CVirtualCAN::hard_get_num_data(void)
 
 int CVirtualCAN::hard_wait_comm_event(void)
 {
-  usleep(1000);// publish can packets at 1KHz
+  usleep(1000000/this->update_rate_hz);// publish can packets at 1KHz
   return 1;
 }
 
@@ -155,6 +156,19 @@ void CVirtualCAN::open(const std::string &dump_filename)
   this->config();
 }
 
+void CVirtualCAN::set_update_rate(double rate_hz)
+{
+  if(rate_hz<10.0 || rate_hz>10000.0)
+    throw CCommException(_HERE_,"Invalid update rate. Supported rate range between 10 Hz and 10 kHz.",this->comm_id);
+  else
+    this->update_rate_hz=rate_hz;
+}
+
+double CVirtualCAN::get_update_rate(void)
+{
+  return this->update_rate_hz;
+}
+
 std::string CVirtualCAN::get_new_frame_event_id(void)
 {
   return this->new_frame_event_id;
diff --git a/src/can/virtual_can.h b/src/can/virtual_can.h
index 83283affb55ab9420f4724686d3f6fa37b5422c0..8eb81ecc5d10a222025fb51122eda0f6d65bf693 100755
--- a/src/can/virtual_can.h
+++ b/src/can/virtual_can.h
@@ -46,6 +46,8 @@ class CVirtualCAN : protected CComm
     struct can_filter *rx_filters;
     unsigned int num_filters;
     CMutex can_access;
+    // desired rate 
+    double update_rate_hz;
   protected:
      /**
       * \brief Function to actually open the device
@@ -198,6 +200,14 @@ class CVirtualCAN : protected CComm
      *                 class.
      */
     CVirtualCAN(const std::string &comm_id);
+    /** 
+     * \brief
+     */
+    void set_update_rate(double rate_hz);
+    /** 
+     * \brief
+     */
+    double get_update_rate(void);
     /** 
      * \brief
      */
diff --git a/src/examples/test_virtual_can_rx.cpp b/src/examples/test_virtual_can_rx.cpp
index cb0943c2c05f3ceced3b428b6c959bba6d1e31d1..ec8e5fe7ccb1356923b699c18be562f299b3f2ef 100755
--- a/src/examples/test_virtual_can_rx.cpp
+++ b/src/examples/test_virtual_can_rx.cpp
@@ -28,6 +28,7 @@ int main(int argc,char *argv[])
   events.push_back(can_port.get_new_frame_event_id());
   try{
     can_port.open(dump_file);
+    can_port.set_update_rate(100);
     can_port.add_id_filter(0x010,0x0F0,false);
     while(1)
     {