diff --git a/src/shared/sensors/LSM9DS1/LSM9DS1_AxelGyro.h b/src/shared/sensors/LSM9DS1/LSM9DS1_AxelGyro.h
index 6d9f6b947412774a1cef8bfeebb7623421b2e6c1..f1d35e83f940115ccd05962cb57e0e36591bc3c3 100644
--- a/src/shared/sensors/LSM9DS1/LSM9DS1_AxelGyro.h
+++ b/src/shared/sensors/LSM9DS1/LSM9DS1_AxelGyro.h
@@ -40,6 +40,12 @@ struct lsm9ds1XLGSample
     Vec3 gyroData;
 };
 
+struct lsm9ds1TSample
+{
+    uint64_t timestamp;
+    float tempData;
+};
+
 class LSM9DS1_XLG : public GyroSensor,
                     public AccelSensor,
                     public TemperatureSensor
@@ -317,10 +323,7 @@ public:
         }
 
         int16_t temp = tempData[0] | tempData[1] << 8;
-        mLastTemp =
-            tempZero +
-            temp /
-                tempSensistivity;  // 25°C + TEMP/S devo castare a float "temp"?
+        mLastTemp = tempZero + temp / tempSensistivity;  // 25°C + TEMP/S devo castare a float "temp"?
         return true;
     }
 
diff --git a/src/shared/sensors/LSM9DS1/LSM9DSI_Magneto.h b/src/shared/sensors/LSM9DS1/LSM9DSI_Magneto.h
index be2d6361683e76134c410e6d04c7078ca4cbfb85..5e94c7f257a18a8a8a8e89554dceed513793d4a0 100644
--- a/src/shared/sensors/LSM9DS1/LSM9DSI_Magneto.h
+++ b/src/shared/sensors/LSM9DS1/LSM9DSI_Magneto.h
@@ -32,6 +32,13 @@
 using miosix::GpioPin;
 using std::vector;
 
+// data Structs
+struct lsm9ds1MSample
+{
+    uint64_t timestamp;
+    Vec3 magData;
+};
+
 class LSM9DS1_M : public CompassSensor
 {
     public:
diff --git a/src/tests/drivers/test-lsm9ds1-fifo.cpp b/src/tests/drivers/test-lsm9ds1-fifo.cpp
index 407cb2a4c899c1169269fe3b80786f8d1cc3ae05..83a65c72a673b9c32890fe11583b15f47e0d08e1 100644
--- a/src/tests/drivers/test-lsm9ds1-fifo.cpp
+++ b/src/tests/drivers/test-lsm9ds1-fifo.cpp
@@ -26,6 +26,7 @@
 #include "drivers/HardwareTimer.h"
 #include "drivers/spi/SPIDriver.h"
 #include "sensors/LSM9DS1/LSM9DS1_AxelGyro.h"
+#include "sensors/LSM9DS1/LSM9DSI_Magneto.h"
 #include "diagnostic/CpuMeter.h"
 #include "logger/Logger.h"
 
@@ -41,6 +42,7 @@ typedef Gpio<GPIOC_BASE, 13> GpioINT1; //INT1 A/G
 // SPI
 SPIBus bus(SPI1);
 GpioPin cs_XLG(GPIOE_BASE, 7);
+GpioPin cs_M(GPIOE_BASE, 9);
 
 // LED just for init
 GpioPin LED1(GPIOD_BASE, 15);
@@ -58,6 +60,8 @@ volatile bool flagSPIReadRequest = false;
 static const bool FIFO_ENABLED      = true;
 static const uint8_t FIFO_WATERMARK = 20;
 static const uint16_t FIFO_SAMPLES   = 1000;
+static const uint16_t MAG_SAMPLING_PERIOD = 10; //100Hz
+static const uint16_t TEMP_SAMPLING_PERIOD = 100; //10Hz 
 
 // High Resolution hardware timer using TIM5
 HardwareTimer<uint32_t> hrclock(
@@ -68,14 +72,8 @@ volatile uint32_t last_tick;
 volatile uint32_t delta;
 
 // LSM9DS1 obj
-LSM9DS1_XLG* lsm9ds1 = nullptr;
-
-//struct for the logger
-struct IMUSample
-{
-    lsm9ds1XLGSample sample;
-    float avgCPU;
-};
+LSM9DS1_XLG* lsm9ds1_xlg = nullptr;
+LSM9DS1_M*   lsm9ds1_m   = nullptr; 
 
 // Interrupt handlers
 void __attribute__((naked)) EXTI13_IRQHandler()
@@ -112,13 +110,10 @@ uint16_t fifo_counter = 0;
 int main()
 {
 
-    
     uint32_t dt;
-    uint64_t timestamp = 0;
-
-    printf("stat_toolarge,stat_dropped,stat_queued,stat_buf_filled,"
-           "stat_buf_written,stat_w_failed,stat_w_time,stat_max_time,"
-           "stat_last_error\n");
+    uint64_t XLGtimestamp = 0;
+    uint64_t lastMagtick = 0;
+    uint64_t lastTemptick = 0;
 
     Thread::create(printStats,4096);
 
@@ -129,35 +124,58 @@ int main()
     timer5Config();
     EXTI1Config();
 
-    lsm9ds1 = new LSM9DS1_XLG(
-        bus, cs_XLG, LSM9DS1_XLG::AxelFSR::FS_8, LSM9DS1_XLG::GyroFSR::FS_245,
-        LSM9DS1_XLG::ODR::ODR_238, FIFO_ENABLED, FIFO_WATERMARK);
+    lsm9ds1_xlg = new LSM9DS1_XLG(bus, cs_XLG, LSM9DS1_XLG::AxelFSR::FS_8, 
+                            LSM9DS1_XLG::GyroFSR::FS_245,LSM9DS1_XLG::ODR::ODR_238, 
+                            FIFO_ENABLED, FIFO_WATERMARK);
 
-    while (!lsm9ds1->init());
+    lsm9ds1_m = new LSM9DS1_M(bus,cs_M, LSM9DS1_M::MagFSR::FS_8,LSM9DS1_M::ODR::ODR_40);
+
+    while (!lsm9ds1_xlg->init());
+    while (!lsm9ds1_m->init());
     LED2.high(); //init OK
     
-    lsm9ds1->clearFIFO();  //just to be sure to intercept the first interrupt
+    lsm9ds1_xlg->clearFIFO();  //just to be sure to intercept the first interrupt
 
     //start sampling
     while(!PUSHBUTTON.value())
     {
-        if (flagSPIReadRequest)
+
+        if(flagSPIReadRequest)
         {
             flagSPIReadRequest = false;
             dt = hrclock.toMicroSeconds(delta)/FIFO_WATERMARK; //delta of each sample
-            lsm9ds1->onSimpleUpdate();
+            lsm9ds1_xlg->onSimpleUpdate();
             for(int i=0 ; i < FIFO_WATERMARK; i++)
             {
-                IMUSample s; 
-                s.sample = lsm9ds1->getLsm9ds1FIFO()[i];
-                timestamp += dt; 
-                s.sample.timestamp = timestamp; 
-                s.avgCPU = averageCpuUtilization();
-                logger.log(s);
+                lsm9ds1XLGSample XLGsample = lsm9ds1_xlg->getLsm9ds1FIFO()[i];
+                XLGtimestamp += dt; 
+                XLGsample.timestamp = XLGtimestamp; 
+                logger.log(XLGsample);
             }
             LED1.low();
             fifo_counter++;
         }
+
+        if(miosix::getTick() - lastMagtick >= MAG_SAMPLING_PERIOD)
+        {
+            lastMagtick = miosix::getTick();
+            lsm9ds1_m->onSimpleUpdate();
+            lsm9ds1MSample MAGsample;
+            MAGsample.magData = *(lsm9ds1_m->compassDataPtr());
+            MAGsample.timestamp = lastMagtick;
+            logger.log(MAGsample);
+        }
+
+        if(miosix::getTick() - lastTemptick >= TEMP_SAMPLING_PERIOD)
+        {
+            lastTemptick = miosix::getTick();
+            lsm9ds1_xlg->temperatureUpdate();
+            lsm9ds1TSample Tsample;
+            Tsample.tempData = *(lsm9ds1_xlg->tempDataPtr());
+            Tsample.timestamp = lastTemptick;
+            logger.log(Tsample);
+        }
+
     }
 
     logger.stop();
@@ -194,6 +212,7 @@ void gpioConfig()
 
         // Select GPIO mode for Chip Select
         cs_XLG.mode(Mode::OUTPUT);
+        cs_M.mode(Mode::OUTPUT);
 
         // Select GPIO mode for INTERRUPT (PULL-DOWN because there's no
         // pull-down in HW)
@@ -252,7 +271,6 @@ void EXTI1Config()  // PC13
 void printStats(void*)
 {   
     Logger& log=Logger::instance();
-    printf("Thread spawned\n");
     while(!log.isStarted());
     while(log.isStarted())
     {
@@ -261,8 +279,6 @@ void printStats(void*)
         stats.setTimestamp(miosix::getTick());
         log.log(stats);
 
-        printf("stats logged\n");
-
         if(stats.statWriteError)
         {
             LED3.high();