diff --git a/cfg/Bno055Imu.cfg b/cfg/Bno055Imu.cfg
index d8fb52ac510864cde06106250cd50d7e5684ad15..c52f99dabb131035e90d76e7381654f1eec7a840 100755
--- a/cfg/Bno055Imu.cfg
+++ b/cfg/Bno055Imu.cfg
@@ -53,6 +53,83 @@ gen.const("ndof_off", int_t, 11, "ndof off"),
 gen.const("ndof", int_t, 12, "ndof")
 ], "Possible operation modes.")
 
+accel = gen.add_group("Accelerometer")
+accel_range = gen.enum([ 
+gen.const("2G", int_t, 0, "+/- 2G"),
+gen.const("4G", int_t, 1, "+/- 4G"),
+gen.const("8G", int_t, 2, "+/- 8G"),
+gen.const("16G", int_t, 3, "+/- 16G")
+], "Accelerometer ranges.")
+accel_bw = gen.enum([ 
+gen.const("7_81Hz", int_t, 0, "7.81Hz"),
+gen.const("15_63Hz", int_t, 4, "15.63Hz"),
+gen.const("32_25Hz", int_t, 8, "32.25Hz"),
+gen.const("62_5Hz", int_t, 12, "62.5Hz"),
+gen.const("125Hz", int_t, 16, "125Hz"),
+gen.const("250Hz", int_t, 20, "250Hz"),
+gen.const("500Hz", int_t, 24, "500Hz"),
+gen.const("1000Hz", int_t, 28, "1000Hz")
+], "Accelerometer bandwidth.")
+accel_pwr_mode = gen.enum([ 
+gen.const("accel_normal", int_t, 0, "Normal"),
+gen.const("accel_suspend", int_t, 32, "Suspend"),
+gen.const("accel_low_pwr1", int_t, 64, "Low power 1"),
+gen.const("accel_standby", int_t, 96, "Stand by"),
+gen.const("accel_low_pwr2", int_t, 128, "Low power 2"),
+gen.const("accel_deep_suspend", int_t, 160, "Seep suspend")
+], "Accelerometer power modes.")
+
+gyro = gen.add_group("Gyroscope")
+gyro_range = gen.enum([ 
+gen.const("2000dps", int_t, 0, "+/- 2000 dps"),
+gen.const("1000dps", int_t, 1, "+/- 1000 dps"),
+gen.const("500dps", int_t, 2, "+/- 500 dps"),
+gen.const("250dps", int_t, 3, "+/- 250 dps"),
+gen.const("124dps", int_t, 4, "+/- 125 dps")
+], "Gyroscope ranges.")
+gyro_bw = gen.enum([ 
+gen.const("523Hz", int_t, 0, "523Hz"),
+gen.const("230Hz", int_t, 8, "230Hz"),
+gen.const("116Hz", int_t, 16, "116Hz"),
+gen.const("47Hz", int_t, 24, "47Hz"),
+gen.const("23Hz", int_t, 32, "23Hz"),
+gen.const("12Hz", int_t, 40, "12Hz"),
+gen.const("64Hz", int_t, 48, "64Hz"),
+gen.const("32Hz", int_t, 56, "32Hz")
+], "Gyroscope bandwidth.")
+gyro_pwr_mode = gen.enum([ 
+gen.const("gyro_normal", int_t, 0, "Normal"),
+gen.const("gyro_fast_pwr_up", int_t, 1, "Fast power up"),
+gen.const("gyro_deep_suspend", int_t, 2, "Deep suspend"),
+gen.const("gyro_suspend", int_t, 3, "Suspend"),
+gen.const("gyro_adv_pwr_save", int_t, 4, "Advanced power save"),
+], "Gyroscope power modes.")
+
+mag = gen.add_group("Magnetometer")
+mag_rate = gen.enum([ 
+gen.const("2Hz", int_t, 0, "2 Hz"),
+gen.const("6Hz", int_t, 1, "6 Hz"),
+gen.const("8Hz", int_t, 2, "8 Hz"),
+gen.const("10Hz", int_t, 3, "10 Hz"),
+gen.const("15Hz", int_t, 4, "15 Hz"),
+gen.const("20Hz", int_t, 5, "20 Hz"),
+gen.const("25Hz", int_t, 6, "25 Hz"),
+gen.const("30Hz", int_t, 7, "30 Hz")
+], "Magnetometer rates.")
+mag_op_mode = gen.enum([ 
+gen.const("low_pwr", int_t, 0, "Low power"),
+gen.const("regular", int_t, 8, "Regular"),
+gen.const("en_regular", int_t, 16, "Enhanced regular"),
+gen.const("high_acc", int_t, 24, "High accuracy")
+], "Magnetometer operation moes.")
+mag_pwr_mode = gen.enum([ 
+gen.const("mag_normal", int_t, 0, "Normal"),
+gen.const("mag_sleep", int_t, 32, "Sleep"),
+gen.const("mag_suspend", int_t, 64, "Suspend"),
+gen.const("mag_force_mode", int_t, 96, "Force mode"),
+], "Magnetometer power modes.")
+
+
 #       Name                       Type       Reconfiguration level            Description                       Default   Min   Max
 gen.add("update_rate",             double_t,  SensorLevels.RECONFIGURE_STOP,   "Data update rate in Hz",         20.0,     1.0,  100.0)
 gen.add("serial_device",           str_t,     SensorLevels.RECONFIGURE_CLOSE,  "Device serial port",             "/dev/ttyUSB1")
@@ -60,6 +137,15 @@ gen.add("cal_filename",            str_t,     SensorLevels.RECONFIGURE_STOP,   "
 gen.add("tf_prefix",               str_t,     SensorLevels.RECONFIGURE_STOP,   "TF prefix",                      "")
 gen.add("frame_id",                str_t,     SensorLevels.RECONFIGURE_STOP,   "IMU frame_id in the urdf file",  "")
 gen.add("mode",                    int_t,     SensorLevels.RECONFIGURE_STOP,   "Operation mode",                 12,       1,    12, edit_method=enum_operation_mode)
+accel.add("accel_range",           int_t,     SensorLevels.RECONFIGURE_STOP,   "Accelerometer operation range",  1,        0,    3, edit_method=accel_range)
+accel.add("accel_bandwidth",       int_t,     SensorLevels.RECONFIGURE_STOP,   "Accelerometer bandwidth",        12,       0,    28, edit_method=accel_bw)
+accel.add("accel_pwr_mode",        int_t,     SensorLevels.RECONFIGURE_STOP,   "Accelerometer power mode",       0,        0,    160, edit_method=accel_pwr_mode)
+gyro.add("gyro_range",             int_t,     SensorLevels.RECONFIGURE_STOP,   "Gyroscope operation range",      0,        0,    4, edit_method=gyro_range)
+gyro.add("gyro_bandwidth",         int_t,     SensorLevels.RECONFIGURE_STOP,   "Gyroscope bandwidth",            56,       0,    56, edit_method=gyro_bw)
+gyro.add("gyro_pwr_mode",          int_t,     SensorLevels.RECONFIGURE_STOP,   "Gyroscope power mode",           0,        0,    4, edit_method=gyro_pwr_mode)
+gyro.add("mag_rate",               int_t,     SensorLevels.RECONFIGURE_STOP,   "Magnetometer rate",              3,        0,    7, edit_method=mag_rate)
+gyro.add("mag_op_mode",            int_t,     SensorLevels.RECONFIGURE_STOP,   "Magnetometer operation mode",    1,        0,    24, edit_method=mag_op_mode)
+gyro.add("mag_pwr_mode",           int_t,     SensorLevels.RECONFIGURE_STOP,   "Magnetometer power mode",        0,        0,    96, edit_method=mag_pwr_mode)
 #gen.add("velocity_scale_factor",  double_t,  SensorLevels.RECONFIGURE_STOP,   "Maximum velocity scale factor",  0.5,      0.0,  1.0)
 
 exit(gen.generate(PACKAGE, "Bno055ImuDriver", "Bno055Imu"))
diff --git a/src/bno055_imu_ros_driver.cpp b/src/bno055_imu_ros_driver.cpp
index e5a3b3fbdb0d06f5aa711938e6d66b6e8a68075a..1b03935cb095e0ef26bdd2ac6071998b2982e6f9 100644
--- a/src/bno055_imu_ros_driver.cpp
+++ b/src/bno055_imu_ros_driver.cpp
@@ -108,6 +108,10 @@ void Bno055ImuDriver::config_update(Config& new_cfg, uint32_t level)
     case iri_base_driver::OPENED:
       this->imu_device->set_data_rate(new_cfg.update_rate);
       this->frame_id=new_cfg.tf_prefix+"/"+new_cfg.frame_id;
+      // change configuration
+      this->imu_device->set_accel_config(new_cfg.accel_range,new_cfg.accel_bandwidth,new_cfg.accel_pwr_mode);
+      this->imu_device->set_gyro_config(new_cfg.gyro_range,new_cfg.gyro_bandwidth,new_cfg.gyro_pwr_mode);
+      this->imu_device->set_mag_config(new_cfg.mag_rate,new_cfg.mag_op_mode,new_cfg.mag_pwr_mode);
       break;
 
     case iri_base_driver::RUNNING: