diff --git a/src/shared/sensors/LIS3MDL/LIS3MDL.cpp b/src/shared/sensors/LIS3MDL/LIS3MDL.cpp
index 23ba605df1426ca9d25cfbcfd115eecd0ed50940..d19af0f6f0a7587d7926165c67db6d291f87149e 100644
--- a/src/shared/sensors/LIS3MDL/LIS3MDL.cpp
+++ b/src/shared/sensors/LIS3MDL/LIS3MDL.cpp
@@ -31,6 +31,7 @@ LIS3MDL::LIS3MDL(SPIBusInterface& bus, miosix::GpioPin pin,
                  SPIBusConfig spiConfig, Config config)
     : slave(bus, pin, spiConfig), configuration(config)
 {
+    spiConfig.byteOrder = SPI::Order::LSB_FIRST;
 }
 
 bool LIS3MDL::init()
@@ -213,38 +214,23 @@ LIS3MDLData LIS3MDL::sampleImpl()
 
     SPITransaction spi(slave);
     LIS3MDLData newData;
-    int16_t val;
     tempCounter++;
     if (configuration.temperatureDivider != 0 &&
         tempCounter % configuration.temperatureDivider == 0)
     {
-        val = spi.readRegister(TEMP_OUT_H);
-        val = (val << 8);
-        val |= spi.readRegister(TEMP_OUT_L);
 
         newData.temperatureTimestamp = TimestampTimer::getTimestamp();
-        newData.temperature =
-            static_cast<float>(val) * DEG_PER_LSB + REFERENCE_TEMPERATURE;
+        newData.temperature = spi.readRegister16(TEMP_OUT_L) * DEG_PER_LSB +
+                              REFERENCE_TEMPERATURE;
     }
     else
     {
         newData.temperature = lastSample.temperature;
     }
 
-    val = spi.readRegister(OUT_X_H);
-    val = (val << 8);
-    val |= spi.readRegister(OUT_X_L);
-    newData.magneticFieldX = currentUnit * val;
-
-    val = spi.readRegister(OUT_Y_H);
-    val = (val << 8);
-    val |= spi.readRegister(OUT_Y_L);
-    newData.magneticFieldY = currentUnit * val;
-
-    val = spi.readRegister(OUT_Z_H);
-    val = (val << 8);
-    val |= spi.readRegister(OUT_Z_L);
-    newData.magneticFieldZ = currentUnit * val;
+    newData.magneticFieldX = spi.readRegister16(OUT_X_L) * currentUnit;
+    newData.magneticFieldY = spi.readRegister16(OUT_Y_L) * currentUnit;
+    newData.magneticFieldZ = spi.readRegister16(OUT_Z_L) * currentUnit;
 
     return newData;
 }