diff --git a/neosensor/libraries/neocampus_modules/airquality.cpp b/neosensor/libraries/neocampus_modules/airquality.cpp
index 7cbaacc447ad423268f4ab2ebf7e07420e3d32cb..d89042303280dacc2ed69d66a20551a4778d27cd 100644
--- a/neosensor/libraries/neocampus_modules/airquality.cpp
+++ b/neosensor/libraries/neocampus_modules/airquality.cpp
@@ -4,6 +4,7 @@
  * AirQuality module to manage all kind of air quality sensors that does not
  * fit within the existing sensOCampus classes.
  *
+ * F.Thiebolt   mar.22  added support for SCD4x along with its auto-detection
  * F.Thiebolt   oct.21  added support for particle meters (e.g PMS5003)
  *                      switched to data available delivery (instead of timer based)
  * F.Thiebolt   aug.21  in loadSensoConfig, replaced StaticJsonDocument (stack)
@@ -81,27 +82,23 @@ boolean airquality::add_sensor( uint8_t adr ) {
   if( _sensors_count>=_MAX_SENSORS ) return false;
 
   bool _sensor_added=false;
-  /*
-   * check for XXXX
-   * TODO: add auto-detect for some air quality sensors !
-   *
-   * The following was left as an example:
-   * 
-  if( TSL2561::is_device( adr ) == true ) {
-    TSL2561 *cur_sensor = new TSL2561();
+
+  // check for SCD4x
+  if( SCD4x::is_device( adr ) == true ) {
+    SCD4x *cur_sensor = new SCD4x( scd4xMeasureType_t::co2 );    // because it features several sensors
     if( cur_sensor->begin( adr ) != true ) {
-      log_debug(F("\n[airquality] ###ERROR at TSL2561 startup ... removing instance ..."));log_flush();
+      log_debug(F("\n[airquality] ###ERROR at SCD4x startup ... removing instance ..."));log_flush();
       free(cur_sensor);
       cur_sensor = NULL;
     }
     else {
-      // TODO: set auto_gain ?
-      cur_sensor->powerOFF();
+      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;
+      _sensor_added=true;
     }
   }
-   */
+
   // add check for additional device here
 
   // summary
@@ -133,7 +130,7 @@ bool airquality::start( senso *sensocampus,  JsonDocument &sharedRoot ) {
   // create module's JSON structure to hold all of our data
   // [aug.21] we create a dictionnary
   variant = sharedRoot.createNestedObject(MQTT_MODULE_NAME);
-  // all sensors share the same units of values
+
   JsonObject _obj = variant.as<JsonObject>();
 
   /* [nov.21] airquality sensors feature different value units ==> we'll afford a
diff --git a/neosensor/neosensor.ino b/neosensor/neosensor.ino
index 2af73abc0abb2c94472b74c5d15eb6eb38108f87..ca535a8058f95e711be29519720553729a74b916 100644
--- a/neosensor/neosensor.ino
+++ b/neosensor/neosensor.ino
@@ -993,6 +993,11 @@ if( res!=uint8_t(0x44) ) {
       log_debug(F("\n\t\tadded humidity sensor at i2c addr = 0x"));log_debug(res,HEX); log_flush();
       _known = true;
     }
+    // is chip an airquality sensor ?
+    if( airqualityModule and airqualityModule->add_sensor(res) == true ) {
+      log_debug(F("\n\t\tadded airquality sensor at i2c addr = 0x"));log_debug(res,HEX); log_flush();
+      _known = true;
+    }
     // is chip a display ?
     if( displayModule and displayModule->add_display(res) == true ) {
       log_debug(F("\n\t\tadded display at i2c addr = 0x"));log_debug(res,HEX); log_flush();