diff --git a/neosensor/libraries/neocampus_drivers/SCD4x.cpp b/neosensor/libraries/neocampus_drivers/SCD4x.cpp
index a8bc977b332965bd9816098161d4df0060bd940e..8e0010bee9d264134d2a20dd491dfdc187a9c5f8 100644
--- a/neosensor/libraries/neocampus_drivers/SCD4x.cpp
+++ b/neosensor/libraries/neocampus_drivers/SCD4x.cpp
@@ -281,7 +281,7 @@ boolean SCD4x::getRH( float *pval ) {
   _tmp = (625 * _tmp) >> 12;
   *pval = (float)_tmp / 100.0f;
 
-  _rh_sensor = false;
+  _rh_sensor_valid = false;
 
   return true;
 }
@@ -295,11 +295,16 @@ boolean SCD4x::getRH( float *pval ) {
  * Software reset through I2C command
  */
 void SCD4x::sw_reset( uint8_t adr ) {
+
   log_debug(F("\n[SCD4x] SOFT RESET action started ..."));log_flush();
+  
+  _writeCmd( adr, static_cast<uint16_t>(scd4xCmd_t::stop_periodic_measurement) );
+  delay(500);
+  _periodic_measure = false;
+
   _writeCmd( adr, static_cast<uint16_t>(scd4xCmd_t::reinit) );
   delay( 20 );
 
-  _periodic_measure = false;
 }
 
 
diff --git a/neosensor/libraries/neocampus_drivers/TSL2561.cpp b/neosensor/libraries/neocampus_drivers/TSL2561.cpp
index a8185a43b85a75c41397bc66f3c3ca9fa8f3b64a..44be5d65e58ca1d946e35281a3262e13db868dbc 100644
--- a/neosensor/libraries/neocampus_drivers/TSL2561.cpp
+++ b/neosensor/libraries/neocampus_drivers/TSL2561.cpp
@@ -142,14 +142,12 @@ boolean TSL2561::begin( uint8_t addr=INVALID_I2CADDR ) {
 
 void TSL2561::powerON(void)
 {
-  // Enable the device by setting the control bit to 0x03
-  write8(_i2caddr, TSL2561_COMMAND_BIT | TSL2561_CLEAR_BIT | TSL2561_REGISTER_CONTROL, TSL2561_CONTROL_POWERON);
+  _powerON( _i2caddr );
 }
 
 void TSL2561::powerOFF(void)
 {
-  // Disable the device by setting the control bit to 0x03
-  write8(_i2caddr, TSL2561_COMMAND_BIT | TSL2561_CLEAR_BIT | TSL2561_REGISTER_CONTROL, TSL2561_CONTROL_POWEROFF);
+  _powerOFF( _i2caddr );
 }
 
 
@@ -193,11 +191,28 @@ void TSL2561::setTiming(tsl2561IntegrationTime_t integration) {
  * Private methods 
  */
 
+/*
+ * static PowerON/OFF (for static acquire)
+ */
+void TSL2561::_powerON( uint8_t a ) {
+  // Enable the device by setting the control bit to 0x03
+  write8( a, TSL2561_COMMAND_BIT | TSL2561_CLEAR_BIT | TSL2561_REGISTER_CONTROL, TSL2561_CONTROL_POWERON);
+}
+
+void TSL2561::_powerOFF( uint8_t a ) {
+  // Disable the device by setting the control bit to 0x03
+  write8( a, TSL2561_COMMAND_BIT | TSL2561_CLEAR_BIT | TSL2561_REGISTER_CONTROL, TSL2561_CONTROL_POWEROFF);
+}
+
 /*
  * Check that device identity is what we expect!
  */
 bool TSL2561::_check_identity( uint8_t a ) {
 
+  // stop'n start device
+  _powerOFF(a); delay(10);
+  _powerON(a); delay(10);
+
   // check Register ID
   uint8_t _res = read8(a,TSL2561_REGISTER_ID);
   if( (_res&0xF0)!=REGISTER_ID_TSL2561 and (_res&0xF0)!=0x00  ) return false;
diff --git a/neosensor/libraries/neocampus_drivers/TSL2561.h b/neosensor/libraries/neocampus_drivers/TSL2561.h
index 37ebcd0367ebb8706e3abd571746769cf1de1dec..d604bf507840cc2b93a662e070a15421e546bbbf 100644
--- a/neosensor/libraries/neocampus_drivers/TSL2561.h
+++ b/neosensor/libraries/neocampus_drivers/TSL2561.h
@@ -221,6 +221,8 @@ class TSL2561 : public generic_driver {
     static const char *units;
 
     // methods
+    static void _powerON( uint8_t );          // power UP device
+    static void _powerOFF( uint8_t );         // power DOWN device
     static bool _check_identity( uint8_t );   // check device is what we expect!
     void _getData( uint16_t *broadband, uint16_t *ir );
 };
diff --git a/neosensor/libraries/neocampus_modules/humidity.cpp b/neosensor/libraries/neocampus_modules/humidity.cpp
index b1522848524ce2f7c0ef9edb494a16b188444583..badd125cbbb9a10123c528e1ea1de5524b82ca6e 100644
--- a/neosensor/libraries/neocampus_modules/humidity.cpp
+++ b/neosensor/libraries/neocampus_modules/humidity.cpp
@@ -108,6 +108,21 @@ boolean humidity::add_sensor( uint8_t adr ) {
       _sensor_added=true;
     }
   }
+  // check for SCD4x
+  else if( SCD4x::is_device( adr ) == true ) {
+    SCD4x *cur_sensor = new SCD4x( scd4xMeasureType_t::humidity );    // because it features several sensors
+    if( cur_sensor->begin( adr ) != true ) {
+      log_debug(F("\n[temperature] ###ERROR at SCD4x startup ... removing instance ..."));log_flush();
+      free(cur_sensor);
+      cur_sensor = NULL;
+    }
+    else {
+      cur_sensor->powerON();  // remember that device is shared across several modules
+      cur_sensor->powerOFF(); // remember that device is shared across several modules
+      _sensor[_sensors_count++] = cur_sensor;
+      _sensor_added=true;
+    }
+  }
 
   // add check for additional device here
 
diff --git a/neosensor/libraries/neocampus_modules/humidity.h b/neosensor/libraries/neocampus_modules/humidity.h
index 1f28471e7e8320e88137d7d3b32cab341ac99a1f..f9d4ce7e14aad2f5e1a1400930fe99be0ab53637 100644
--- a/neosensor/libraries/neocampus_modules/humidity.h
+++ b/neosensor/libraries/neocampus_modules/humidity.h
@@ -25,6 +25,7 @@
 #include "generic_driver.h"
 #include "SHT2x.h"
 #include "SHT3x.h"
+#include "SCD4x.h"        // Sensirion SCD4X CO2 sensor including temp + hygro
 
 
 
diff --git a/neosensor/libraries/neocampus_modules/temperature.cpp b/neosensor/libraries/neocampus_modules/temperature.cpp
index 9d90dc546183880f3e6391c5b91cd009d04315c1..b9fad5feb5377e808bd525165540525b8fe96860 100644
--- a/neosensor/libraries/neocampus_modules/temperature.cpp
+++ b/neosensor/libraries/neocampus_modules/temperature.cpp
@@ -129,7 +129,7 @@ boolean temperature::add_sensor( uint8_t adr ) {
       _sensor_added=true;
     }
   }
-  // check for SHT3x
+  // check for SCD4x
   else if( SCD4x::is_device( adr ) == true ) {
     SCD4x *cur_sensor = new SCD4x( scd4xMeasureType_t::temperature );    // because it features several sensors
     if( cur_sensor->begin( adr ) != true ) {