diff --git a/src/entrypoints/anakin-test-dma.cpp b/src/entrypoints/anakin-test-dma.cpp
index 72350005f70eb4d065bfa89f2d1978a53085ce28..8242bfaee52a0918ea52c037d6348866f1c19ac4 100644
--- a/src/entrypoints/anakin-test-dma.cpp
+++ b/src/entrypoints/anakin-test-dma.cpp
@@ -27,6 +27,35 @@
 
 using namespace miosix;
 
+void fifoQueueSz(void *arg)
+{
+    const SPIDriver& spi = SPIDriver::instance();
+    int tx_accum = 0, rx_accum = 0, sz_ctr = 0;
+
+    sLog->logString("Thread started");
+
+    while(1)
+    {
+        DMAFIFOStatus tx = spi.getTxFIFOStatus();
+        DMAFIFOStatus rx = spi.getRxFIFOStatus();
+
+        if(tx > -1 && rx > -1)
+        {
+            tx_accum += tx;
+            rx_accum += rx;
+            if(++sz_ctr == 100)
+            {
+                float tx1 = tx_accum / (float)(DFS_100 - DFS_EE + 1) * 255.0f;
+                float rx1 = rx_accum / (float)(DFS_100 - DFS_EE + 1) * 255.0f;
+                tx_accum = rx_accum = sz_ctr = 0;
+                sLog->logLimitedInt(17, 0, 255, tx1);
+                sLog->logLimitedInt(18, 0, 255, rx1);
+                sLog->logUInt32(19, spi.getFIFOFaultCtr());
+            }
+        }
+        Thread::sleep(1);
+    }
+}
 
 int main()
 {
@@ -39,9 +68,7 @@ int main()
     const std::vector<SingleSensor>& data = sBoard->debugGetSensors();
     int ctr=0;
 
-    char buf[128] = {0};
-
-    const SPIDriver& spi = SPIDriver::instance();
+    Thread::create(fifoQueueSz, 1024);
     while(1)
     {
         for(const auto& s : data)
@@ -58,13 +85,8 @@ int main()
                     break;
             }
         }
-        DMAFIFOStatus tx = spi.getTxFIFOStatus();
-        DMAFIFOStatus rx = spi.getRxFIFOStatus();
-
-        if(tx > -1) sLog->logLimitedInt(17, DFS_EE, DFS_100, tx);
-        if(rx > -1) sLog->logLimitedInt(18, DFS_EE, DFS_100, rx);
     
-        Thread::sleep(1);
+        Thread::sleep(10);
     }
 
     // NOT EXECUTED
diff --git a/src/shared/DMA/DMA.cpp b/src/shared/DMA/DMA.cpp
index 14a8df2024954e5a6264c0568593543bab75e195..43581c8261cf1dcf42ec7b7575d38d21b7e3632a 100644
--- a/src/shared/DMA/DMA.cpp
+++ b/src/shared/DMA/DMA.cpp
@@ -35,6 +35,7 @@ static Thread *waiting = nullptr;
 static vector<SPIRequest> *requestVector = nullptr;
 static size_t requestIndex = 0;
 static bool error = false;
+static uint32_t fifoFaultCtr = 0;
 
 /**
  * DMA RX end of transfer
@@ -52,10 +53,16 @@ void __attribute__((naked)) DMA2_Stream0_IRQHandler()
 void __attribute__((used)) SPI1rxDmaHandlerImpl()
 {
     if(DMA2->LISR & (DMA_LISR_TEIF0 | DMA_LISR_DMEIF0 | DMA_LISR_FEIF0)) 
+    {
         error = true;
-    if(DMA2->HISR & (DMA_HISR_TEIF5 | DMA_HISR_DMEIF5 | DMA_HISR_FEIF5)) 
+        fifoFaultCtr++;
+    }
+    if(DMA2->HISR & (DMA_HISR_TEIF5 | DMA_HISR_DMEIF5)) 
+    {
         error = true;
-    
+        fifoFaultCtr++;
+    }
+
     DMA2->LIFCR = DMA_LIFCR_CTCIF0
                 | DMA_LIFCR_CTEIF0
                 | DMA_LIFCR_CDMEIF0
@@ -66,6 +73,7 @@ void __attribute__((used)) SPI1rxDmaHandlerImpl()
                 | DMA_HIFCR_CDMEIF5
                 | DMA_HIFCR_CFEIF5;
     
+    
     if(requestVector==nullptr) return;
     (*requestVector)[requestIndex].IRQendTransaction();
 
@@ -171,6 +179,11 @@ SPIDriver::SPIDriver()
     }
 }
 
+uint32_t SPIDriver::getFIFOFaultCtr() const
+{
+    return fifoFaultCtr;
+}
+
 //
 // class SPIRequest
 //
@@ -193,7 +206,6 @@ void SPIRequest::IRQbeginTransaction()
                        | DMA_SxFCR_FTH_1;
 
     DMA2_Stream0->CR   = DMA_SxCR_CHSEL_1 | DMA_SxCR_CHSEL_0 // Channel 3
-                       | DMA_SxCR_MBURST_0 //Read 4 byte at a time from RAM
                        | DMA_SxCR_PL_1     //High priority because fifo disabled
                        | DMA_SxCR_MINC     //Increment memory pointer
                        | DMA_SxCR_TCIE     //Interrupt on transfer complete
@@ -214,7 +226,6 @@ void SPIRequest::IRQbeginTransaction()
                        | DMA_SxFCR_FTH_1;
 
     DMA2_Stream5->CR   = DMA_SxCR_CHSEL_1 | DMA_SxCR_CHSEL_0 // Channel 3
-                       | DMA_SxCR_MBURST_0 //Read 4 byte at a time from RAM
                        | DMA_SxCR_PL_1     //High priority because fifo disabled
                        | DMA_SxCR_MINC     //Increment memory pointer
                        | DMA_SxCR_DIR_0    //Memory to peripheral
diff --git a/src/shared/DMA/DMA.h b/src/shared/DMA/DMA.h
index f5f929e407303add384847fb2fe9cac67defd093..dbaba8eba2f05ae8ea45be917ce045f909ed9e85 100644
--- a/src/shared/DMA/DMA.h
+++ b/src/shared/DMA/DMA.h
@@ -54,6 +54,7 @@ public:
     {
         return intToFIFOStatus((DMA2_Stream0->FCR & DMA_SxFCR_FS) >> 3);
     }
+    uint32_t getFIFOFaultCtr() const;
 
 private:
     SPIDriver();
diff --git a/src/shared/DMA/SensorSampling.h b/src/shared/DMA/SensorSampling.h
index fcb9accbbcb0289cd2cfc796cb414de6449e0b9d..10ac318587d884ced8990df9d92fc2eec4293cea 100644
--- a/src/shared/DMA/SensorSampling.h
+++ b/src/shared/DMA/SensorSampling.h
@@ -24,6 +24,7 @@
 
 #include <Common.h>
 #include <DMA/DMA.h>
+#include <log/Log.h>
 
 class Sensor;
 class DMASensorSampler
@@ -45,10 +46,11 @@ public:
     void Update()
     {
         auto& driver = SPIDriver::instance(); 
-        driver.transaction(mRequests);
+        bool ret = driver.transaction(mRequests);
 
-        for(size_t i=0; i< mSensors.size(); i++)
-            mSensors[i]->onDMAUpdate(mRequests[i]);
+        if(ret)
+            for(size_t i=0; i< mSensors.size(); i++)
+                mSensors[i]->onDMAUpdate(mRequests[i]);
     }
 private:
     std::vector<Sensor*> mSensors;
diff --git a/src/shared/boards/AnakinBoard.cpp b/src/shared/boards/AnakinBoard.cpp
index 283fa7ec5c7a5ee1e313a48474bf1b41c06ae9a1..4a0a5be177b870a76e3cabfe6f566f8c2f374f96 100644
--- a/src/shared/boards/AnakinBoard.cpp
+++ b/src/shared/boards/AnakinBoard.cpp
@@ -49,26 +49,27 @@ bool AnakinBoard::init()
     INIT_AND_CHECK(mS_LPS331AP);
     INIT_AND_CHECK(mS_MS580);
 
-    AddSensor(MPU9250_ACCEL,    DATA_VEC3,     mS_MPU9250->accelDataPtr());
-    AddSensor(MPU9250_GYRO,     DATA_VEC3,     mS_MPU9250->gyroDataPtr());
-    AddSensor(MPU9250_COMPASS,  DATA_VEC3,     mS_MPU9250->compassDataPtr());
-    AddSensor(MPU9250_TEMP,     DATA_FLOAT,    mS_MPU9250->tempDataPtr());
-
-    AddSensor(INEMO_ACCEL,      DATA_VEC3,     mS_INEMO->accelDataPtr());
-    AddSensor(INEMO_GYRO,       DATA_VEC3,     mS_INEMO->gyroDataPtr());
-    AddSensor(INEMO_COMPASS,    DATA_VEC3,     mS_INEMO->compassDataPtr());
-    AddSensor(INEMO_TEMP,       DATA_FLOAT,    mS_INEMO->tempDataPtr());
-    AddSensor(FXAS21002_GYRO,   DATA_VEC3,     mS_FXAS->gyroDataPtr());
-
-    AddSensor(LPS331AP_PRESS,   DATA_FLOAT,    mS_LPS331AP->pressureDataPtr());
-    AddSensor(LPS331AP_TEMP,    DATA_FLOAT,    mS_LPS331AP->tempDataPtr());
-
-    AddSensor(MAX21105_ACCEL,   DATA_VEC3,     mS_MAX21105->accelDataPtr());
-    AddSensor(MAX21105_GYRO,    DATA_VEC3,     mS_MAX21105->gyroDataPtr());
-    AddSensor(MAX21105_TEMP,    DATA_FLOAT,    mS_MAX21105->tempDataPtr());
-
-    AddSensor(MS580_PRESSURE,   DATA_FLOAT,    mS_MS580->pressureDataPtr());
-    AddSensor(MS580_TEMP,       DATA_FLOAT,    mS_MS580->tempDataPtr());
+    AddSensor(ACCEL_MPU9250,    DATA_VEC3,     mS_MPU9250->accelDataPtr());
+    AddSensor(GYRO_MPU9250,     DATA_VEC3,     mS_MPU9250->gyroDataPtr());
+    AddSensor(COMPASS_MPU9250,  DATA_VEC3,     mS_MPU9250->compassDataPtr());
+    AddSensor(TEMP_MPU9250,     DATA_FLOAT,    mS_MPU9250->tempDataPtr());
+
+    AddSensor(ACCEL_INEMO,      DATA_VEC3,     mS_INEMO->accelDataPtr());
+    AddSensor(GYRO_INEMO,       DATA_VEC3,     mS_INEMO->gyroDataPtr());
+    AddSensor(COMPASS_INEMO,    DATA_VEC3,     mS_INEMO->compassDataPtr());
+    AddSensor(TEMP_INEMO,       DATA_FLOAT,    mS_INEMO->tempDataPtr());
+
+    AddSensor(GYRO_FXAS21002,   DATA_VEC3,     mS_FXAS->gyroDataPtr());
+
+    AddSensor(PRESS_LPS331AP,   DATA_FLOAT,    mS_LPS331AP->pressureDataPtr());
+    AddSensor(TEMP_LPS331AP,    DATA_FLOAT,    mS_LPS331AP->tempDataPtr());
+
+    AddSensor(ACCEL_MAX21105,   DATA_VEC3,     mS_MAX21105->accelDataPtr());
+    AddSensor(GYRO_MAX21105,    DATA_VEC3,     mS_MAX21105->gyroDataPtr());
+    AddSensor(TEMP_MAX21105,    DATA_FLOAT,    mS_MAX21105->tempDataPtr());
+
+    AddSensor(PRESS_MS580,      DATA_FLOAT,    mS_MS580->pressureDataPtr());
+    AddSensor(TEMP_MS580,       DATA_FLOAT,    mS_MS580->tempDataPtr());
 
     sLog->logString("Adding sensors to 100Hz DMA sampler\n");
     m100HzDMA.AddSensor(mS_MPU9250);
diff --git a/src/shared/boards/AnakinBoard.h b/src/shared/boards/AnakinBoard.h
index 10e6ee347619efff4e82fa74dddaae94827172cd..87a24080af08e4ea06f38ecd0bb380549978c2ae 100644
--- a/src/shared/boards/AnakinBoard.h
+++ b/src/shared/boards/AnakinBoard.h
@@ -38,27 +38,30 @@ typedef MS580301BA07<spiMS580301BA07> ms580_t;
 // AnakinSensor numbers must be in range 0 <= x <= 65535 (uint16_t)
 enum AnakinSensor
 {
-    MPU9250_ACCEL    = 0,
-    MPU9250_GYRO     = 1,
-    MPU9250_COMPASS  = 2,
-    MPU9250_TEMP     = 3,
-
-    INEMO_ACCEL      = 4,
-    INEMO_GYRO       = 5,
-    INEMO_COMPASS    = 6,
-    INEMO_TEMP       = 7,
-
-    FXAS21002_GYRO   = 8,
-
-    LPS331AP_PRESS   = 9,
-    LPS331AP_TEMP    = 10,
-
-    MAX21105_ACCEL   = 11,
-    MAX21105_GYRO    = 12,
-    MAX21105_TEMP    = 13,
-
-    MS580_PRESSURE   = 14,
-    MS580_TEMP       = 15,
+    ACCEL_MPU9250    = 0,
+    ACCEL_INEMO      = 1,
+    ACCEL_MAX21105   = 2,
+
+    GYRO_MPU9250     = 3,
+    GYRO_INEMO       = 4,
+    GYRO_FXAS21002   = 5,
+    GYRO_MAX21105    = 6,
+
+    COMPASS_MPU9250  = 7,
+    COMPASS_INEMO    = 8,
+
+    TEMP_MPU9250     = 9,
+    TEMP_INEMO       = 10,
+    TEMP_LPS331AP    = 11,
+    TEMP_MAX21105    = 12,
+    TEMP_MS580       = 13,
+
+    PRESS_LPS331AP   = 14,
+    PRESS_MS580      = 15,
+
+    UNUSED_16        = 16,
+    RESERVED_17      = 17,
+    RESERVED_18      = 18,
 };
 
 class AnakinBoard : public Singleton<AnakinBoard>, public Board
diff --git a/src/shared/events/Scheduler.cpp b/src/shared/events/Scheduler.cpp
index 634bbe76fae90f1e65c347ad0b6ba8fbc36c6132..350f8a8de2f0191142bb74b3dff190617ffa3ac2 100644
--- a/src/shared/events/Scheduler.cpp
+++ b/src/shared/events/Scheduler.cpp
@@ -102,9 +102,7 @@ void EventScheduler::run() {
             } else tasks.erase(e.task);
         } else {
             Unlock<FastMutex> u(l);
-            leds::led9::high();
             Thread::sleepUntil(nextTick);
-            leds::led9::low();
         }
     }
 }
diff --git a/src/shared/log/Log.h b/src/shared/log/Log.h
index e16f217a52c27c3a47a53e237746ba86de8f1b3b..6e691edf4c30814b28adff5fd2e728c757e6dbf3 100644
--- a/src/shared/log/Log.h
+++ b/src/shared/log/Log.h
@@ -21,6 +21,7 @@ class Log : public Singleton<Log>, ActiveObject
         DATA_INT    = 3,
         DATA_STRING = 4,
         DATA_LIMITED_INT = 5,
+        DATA_UINT32 = 6,
     };
 
     friend class Singleton<Log>;
@@ -50,6 +51,16 @@ public:
         queue(std::move(buf));
     }
 
+    void logUInt32(uint8_t id, uint32_t data)
+    {
+        std::vector<uint8_t> buf(2 + sizeof(uint32_t));
+        buf[0] = DATA_UINT32;
+        buf[1] = id;
+        memcpy(&buf[2], &data, sizeof(uint32_t));
+
+        queue(std::move(buf));
+    }
+
     void logLimitedInt(uint8_t id, int min, int max, int data)
     {
         assert(max > min);