diff --git a/src/tests/actuators/test-hbridge.cpp b/src/tests/actuators/test-hbridge.cpp
index a2aa0438aa91015c899273a37c38ff87458def55..c59c142babab6ee3b677d0d5a2d9872756da26fc 100644
--- a/src/tests/actuators/test-hbridge.cpp
+++ b/src/tests/actuators/test-hbridge.cpp
@@ -22,6 +22,7 @@
 
 #include <actuators/HBridge/HBridge.h>
 #include <miosix.h>
+#include <utils/Constants.h>
 #include <utils/Debug.h>
 
 #include <iostream>
@@ -31,7 +32,7 @@ using namespace Boardcore;
 using namespace miosix;
 using namespace std;
 
-static constexpr int PWM_DURATION = 60 * 1000;
+static constexpr int PWM_DURATION = 60 * 1000;  ///< [ms]
 
 static const TimerUtils::Channel HBRIDGE_PWM_CHANNEL =
     TimerUtils::Channel::CHANNEL_1;
@@ -41,22 +42,22 @@ GpioPin hbridgeInhibit(GPIOA_BASE, 7);  // inhibit pin for the hbridge
 
 bool print = true;  // print the elapsed time or not
 
-long long measuredTime = 0;
+long long measuredTime = 0;  ///< [ns]
 
 void wait()
 {
-    long long t  = getTick();
+    long long t  = getTime();
     long long t0 = t;
 
-    while (t < t0 + PWM_DURATION)
+    while (t < t0 + PWM_DURATION * Constants::NS_IN_MS)
     {
         Thread::sleep(50);
 
-        t = getTick();
+        t = getTime();
 
         if (print)
         {
-            TRACE("Elapsed time : %.2f \n", (t - t0) / 1000.0);
+            TRACE("Elapsed time : %.2f s\n", (t - t0) / Constants::NS_IN_S);
         }
     }
 
@@ -112,7 +113,7 @@ int main()
 
         Thread::sleep(500);
 
-        TRACE("Elapsed time: %.2f s\n", (measuredTime) / 1000.0f);
+        TRACE("Elapsed time: %.2f s\n", (measuredTime) / Constants::NS_IN_S);
         TRACE("Done!\n\n");
     }
 
diff --git a/src/tests/algorithms/NAS/test-triad-parafoil.cpp b/src/tests/algorithms/NAS/test-triad-parafoil.cpp
index d3dadc04fe00b89dfcd50293ee4f293b63c7e2c4..08cd21cebb426647f2b5717d85e5ba0b5bf3a026 100644
--- a/src/tests/algorithms/NAS/test-triad-parafoil.cpp
+++ b/src/tests/algorithms/NAS/test-triad-parafoil.cpp
@@ -47,7 +47,7 @@ int main()
     mpu = new MPU9250(spi1, sensors::mpu9250::cs::getPin());
     mpu->init();
 
-    auto lastTick = getTick();
+    auto lastTime = getTime();
     while (true)
     {
         mpu->sample();
@@ -73,7 +73,7 @@ int main()
             printf("w%fwa%fab%fbc%fc\n", kalmanState(9), kalmanState(6),
                    kalmanState(7), kalmanState(8));
 
-        Thread::sleepUntil(lastTick + 20);
-        lastTick = getTick();
+        Thread::nanoSleepUntil(lastTime + 20 * Constants::NS_IN_MS);
+        lastTime = getTime();
     }
 }
diff --git a/src/tests/algorithms/NAS/test-triad.cpp b/src/tests/algorithms/NAS/test-triad.cpp
index af38fb8562e36b60441361b22df41c31715a1645..7d3dc39d3fd4e482d601199e35ede46a95fb5388 100644
--- a/src/tests/algorithms/NAS/test-triad.cpp
+++ b/src/tests/algorithms/NAS/test-triad.cpp
@@ -46,7 +46,7 @@ int main()
     imuInit();
     bmx->init();
 
-    auto lastTick = getTick();
+    auto lastTime = getTime();
     while (true)
     {
         bmx->sample();
@@ -72,8 +72,8 @@ int main()
             printf("w%fwa%fab%fbc%fc\n", kalmanState(9), kalmanState(6),
                    kalmanState(7), kalmanState(8));
 
-        Thread::sleepUntil(lastTick + 20);
-        lastTick = getTick();
+        Thread::nanoSleepUntil(lastTime + 20 * Constants::NS_IN_MS);
+        lastTime = getTime();
     }
 }
 
diff --git a/src/tests/catch/test-eventbroker.cpp b/src/tests/catch/test-eventbroker.cpp
index 9590563db8b32f2c7694cc4dd4a287580068193d..c3492ea850f05caa8700b5d0e96af2f1e4951610 100644
--- a/src/tests/catch/test-eventbroker.cpp
+++ b/src/tests/catch/test-eventbroker.cpp
@@ -28,16 +28,18 @@
 #endif
 
 #include <events/EventBroker.h>
+#include <events/utils/EventCounter.h>
 #include <miosix.h>
 #include <utils/TestUtils/TestHelper.h>
 
 #include <catch2/catch.hpp>
 #include <cstdio>
 
-using miosix::getTick;
+using miosix::getTime;
 using miosix::Thread;
 
 using namespace Boardcore;
+using namespace Boardcore::Constants;
 
 // Uncertainty on the time of delivery of a delayed event, in ms
 static const unsigned int EVENT_DELAY_UNCERTAINTY = 1;
@@ -62,8 +64,8 @@ TEST_CASE("EventBroker - Posts to different topics")
     Event ev;
     EventBroker broker;
 
-    EventCounter sub1(broker);
-    EventCounter sub2(broker);
+    EventCounter sub1{broker};
+    EventCounter sub2{broker};
 
     broker.subscribe(&sub1, TOPIC_1);
     broker.subscribe(&sub2, TOPIC_2);
@@ -107,9 +109,9 @@ TEST_CASE("EventBroker - EventHandlers can unsubscribe")
     Event ev{EV_A};
     EventBroker broker;
 
-    EventCounter sub1(broker);
-    EventCounter sub2(broker);
-    EventCounter sub3(broker);
+    EventCounter sub1{broker};
+    EventCounter sub2{broker};
+    EventCounter sub3{broker};
 
     broker.subscribe(&sub1, TOPIC_1);
     broker.subscribe(&sub1, TOPIC_2);
@@ -208,21 +210,21 @@ protected:
 TEST_CASE_METHOD(EventBrokerTestFixture, "EventBroker - Events can be dalayed")
 {
     Event ev{EV_A};
-    long long start = getTick();
+    long long start = getTime();
 
     // Post delayed event by 1000 ms
     broker.postDelayed(ev, TOPIC_1, 1000);
     broker.postDelayed(ev, TOPIC_2, 3000);
 
-    REQUIRE(expectEvent(EV_A, TOPIC_1, start + 1000, 2, broker));
-    REQUIRE(expectEvent(EV_A, TOPIC_2, start + 3000, 2, broker));
+    REQUIRE(expectEvent(EV_A, TOPIC_1, start + 1 * NS_IN_S, 2, broker));
+    REQUIRE(expectEvent(EV_A, TOPIC_2, start + 3 * NS_IN_S, 2, broker));
 }
 
 TEST_CASE_METHOD(EventBrokerTestFixture,
                  "EventBroker - Delayed events can be removed")
 {
     Event ev{EV_A};
-    long long start = getTick();
+    long long start = getTime();
 
     // Post delayed event by 1000 ms
     uint16_t delayed = broker.postDelayed(ev, TOPIC_1, 1000);
@@ -233,8 +235,9 @@ TEST_CASE_METHOD(EventBrokerTestFixture,
         Thread::sleep(500);
         broker.removeDelayed(delayed);
 
-        REQUIRE_FALSE(expectEvent(EV_A, TOPIC_1, start + 1000, 2, broker));
-        REQUIRE(expectEvent(EV_A, TOPIC_2, start + 3000, 2, broker));
+        REQUIRE_FALSE(
+            expectEvent(EV_A, TOPIC_1, start + 1 * NS_IN_S, 2, broker));
+        REQUIRE(expectEvent(EV_A, TOPIC_2, start + 3 * NS_IN_S, 2, broker));
     }
 
     SECTION("All events can be removed")
@@ -242,8 +245,10 @@ TEST_CASE_METHOD(EventBrokerTestFixture,
         Thread::sleep(500);
         broker.clearDelayedEvents();
 
-        REQUIRE_FALSE(expectEvent(EV_A, TOPIC_1, start + 1000, 2, broker));
-        REQUIRE_FALSE(expectEvent(EV_A, TOPIC_2, start + 3000, 2, broker));
+        REQUIRE_FALSE(
+            expectEvent(EV_A, TOPIC_1, start + 1 * NS_IN_S, 2, broker));
+        REQUIRE_FALSE(
+            expectEvent(EV_A, TOPIC_2, start + 3 * NS_IN_S, 2, broker));
     }
 }
 
diff --git a/src/tests/drivers/canbus/CanDriver/SimpleCanManager.h b/src/tests/drivers/canbus/CanDriver/SimpleCanManager.h
index 141c5a60e2fe12c72607cd171f35231313874559..bd89caf4507d6136fe0277159943f0e4f1438f89 100644
--- a/src/tests/drivers/canbus/CanDriver/SimpleCanManager.h
+++ b/src/tests/drivers/canbus/CanDriver/SimpleCanManager.h
@@ -26,6 +26,7 @@
 #include <drivers/canbus/CanDriver/BusLoadEstimation.h>
 #include <drivers/canbus/CanDriver/CanDriver.h>
 #include <miosix.h>
+#include <utils/Constants.h>
 #include <utils/collections/SyncCircularBuffer.h>
 
 #include <cstdlib>
@@ -88,7 +89,8 @@ private:
                 }
                 Boardcore::Canbus::CanPacket p = parent.txPackets.pop();
                 parent.canbus.send(p);
-                p.timestamp = miosix::getTick();
+                p.timestamp =
+                    miosix::getTime() / Boardcore::Constants::NS_IN_MS;
                 parent.busLoad.addPacket(p);
             }
         }
diff --git a/src/tests/drivers/canbus/CanDriver/test-can-2way.cpp b/src/tests/drivers/canbus/CanDriver/test-can-2way.cpp
index 3fd1440dd945e7d2fb69dda142fe5972884fcad6..7d007e6fce6c96ed7eb42ad2a8a0c18249ab827b 100644
--- a/src/tests/drivers/canbus/CanDriver/test-can-2way.cpp
+++ b/src/tests/drivers/canbus/CanDriver/test-can-2way.cpp
@@ -84,7 +84,7 @@ void handleCanMessage(Canbus::CanRXPacket packet)
             if (msg.id == packet.packet.id)
             {
                 msg.id = 0;
-                msg.ts = getTick() - msg.ts;
+                msg.ts = getTime() / Constants::NS_IN_MS - msg.ts;
                 break;
             }
         }
@@ -114,7 +114,8 @@ void sendNewRequest()
 
     {
         Lock<FastMutex> l(mutexMsgs);
-        msgs.put({packet.id, (uint32_t)getTick()});
+        msgs.put({packet.id,
+                  static_cast<uint32_t>(getTime() / Constants::NS_IN_MS)});
     }
 
     canManager->send(packet);
@@ -128,7 +129,7 @@ public:
         unsigned int c = 0;
         while (!shouldStop())
         {
-            uint32_t tick = (uint32_t)getTick();
+            uint32_t time = getTime() / Constants::NS_IN_MS;  // [ms]
             {
                 Lock<FastMutex> l(mutexMsgs);
                 if (msgs.isFull())
@@ -138,7 +139,7 @@ public:
                 while (!msgs.isEmpty())
                 {
                     CanMsg msg = msgs.get();
-                    if (msg.id == 0 || tick - msg.ts > MSG_LOST_DEADLINE)
+                    if (msg.id == 0 || time - msg.ts > MSG_LOST_DEADLINE)
                     {
                         msgs.pop();
 
@@ -184,7 +185,7 @@ public:
                     info.loadPercent);
             }
             ++c;
-            Thread::sleepUntil(tick + MSG_DEADLINE);
+            Thread::nanoSleepUntil((time + MSG_DEADLINE) * Constants::NS_IN_MS);
         }
     }
 
diff --git a/src/tests/drivers/canbus/CanDriver/test-can-filters.cpp b/src/tests/drivers/canbus/CanDriver/test-can-filters.cpp
index b6c3f6b667ffcac3ff1021d99634f5430ec08b78..52ff89eac8ddc0093a7474870e74d1be78c54e0f 100644
--- a/src/tests/drivers/canbus/CanDriver/test-can-filters.cpp
+++ b/src/tests/drivers/canbus/CanDriver/test-can-filters.cpp
@@ -109,7 +109,7 @@ int main()
 
     for (;;)
     {
-        p.timestamp = miosix::getTick();
+        p.timestamp = miosix::getTime() / Constants::NS_IN_MS;
 
         p.id = 365854720;
         c->send(p);
diff --git a/src/tests/drivers/canbus/CanDriver/test-can-loopback.cpp b/src/tests/drivers/canbus/CanDriver/test-can-loopback.cpp
index 06559020e6eaee2e933d2ce66696ec2a1c5baf44..e4ae29ebc5a3a8029174ec1bc45a7ba023dc8f3e 100644
--- a/src/tests/drivers/canbus/CanDriver/test-can-loopback.cpp
+++ b/src/tests/drivers/canbus/CanDriver/test-can-loopback.cpp
@@ -64,14 +64,14 @@ public:
     {
         while (!shouldStop())
         {
-            long long start                     = miosix::getTick();
+            long long start                     = miosix::getTime();
             BusLoadEstimation::BusLoadInfo info = ble.getLoadInfo();
             LOG_INFO(l,
                      "payload rate: {:.2f} kbps, total rate: {:.2f} kbps, "
                      "utilization: {:.2f}%",
                      info.payloadBitRate / 1000.0f, info.totalBitRate / 1000.0f,
                      info.loadPercent);
-            Thread::sleepUntil(start + 1000);
+            Thread::nanoSleepUntil(start + 1000 * Constants::NS_IN_MS);
         }
     }
 
@@ -122,7 +122,7 @@ int main()
     {
 
         // printPacket("TX", p);
-        p.timestamp = miosix::getTick();
+        p.timestamp = miosix::getTime() / Constants::NS_IN_MS;
         c->send(p);
         load.addPacket(p);
         // Thread::sleep(1);
diff --git a/src/tests/drivers/test-dsgamma.cpp b/src/tests/drivers/test-dsgamma.cpp
index 1445ae8a674aaa467b3713faf1f8eef368ab9694..e1f8d47dd7c05b93da744dd8cffdcaa9aa697f6e 100644
--- a/src/tests/drivers/test-dsgamma.cpp
+++ b/src/tests/drivers/test-dsgamma.cpp
@@ -33,7 +33,7 @@ using miosix::Gpio;
 using miosix::Thread;
 
 // Protocol config
-//#define DATA_LEN 16384
+// #define DATA_LEN 16384
 
 /* DISCOVERY F429I*/
 typedef Gpio<GPIOA_BASE, 0> button;
@@ -78,7 +78,7 @@ int main()
     int state = ST_STARTING;
     bool end  = false;
 
-    uint32_t startT, endT;
+    long long startT{}, endT{};
 
     while (1)
     {
@@ -95,12 +95,12 @@ int main()
                     if (c == 255)
                     {
                         TRACE("Starting!\n", 0);
-                        startT = miosix::getTick();
+                        startT = miosix::getTime();
                         // printf("%c", c);
                         //  inputBuf[index] = c;
                         ++index;
                         state = ST_WAIT_END_FRAME;
-                        endT  = miosix::getTick();
+                        endT  = miosix::getTime();
                     }
                     break;
                 }
@@ -140,7 +140,7 @@ int main()
                         printf("Packet end %d. lost: %d\n", pktCount,
                                lostBytes);
                         ++pktCount;
-                        // endT = miosix::getTick();
+                        // endT = miosix::getTime();
                         state = ST_WAIT_START_FRAME;
                     }
 
@@ -156,7 +156,7 @@ int main()
                 }
                 case ST_SEND_DATA:
                 {
-                    endT = miosix::getTick();
+                    endT = miosix::getTime();
                     end  = true;
                     break;
                     /*  uint8_t buf[] = {0x23, 0x23, 0x23, 0x23, 0x23};
@@ -169,12 +169,10 @@ int main()
             }
         }
 
+        int time = (endT - startT) / Constants::NS_IN_MS;  // [ms]
         printf("Bytes received: %d\nDropped: %d,Time:%d ms\n", index, lostBytes,
-               // cppcheck-suppress uninitvar
-               (int)(endT - startT));
-        printf("Speed: %.3f KB/s\n",
-               // cppcheck-suppress uninitvar
-               index / ((endT - startT) / 1024.0f) / 1024.0f);
+               time);
+        printf("Speed: %.3f KB/s\n", index / (time / 1024.0f) / 1024.0f);
         /*  for (int i = 0; i < index; i++)
           {
               printf("%c", inputBuf[i]);
diff --git a/src/tests/drivers/test-mavlink.cpp b/src/tests/drivers/test-mavlink.cpp
index 8e70f5a51d734894a0d0a4d42dd0d9a97964c744..16d1a846c38755fcaa2f51ce2d60c20892f91f92 100644
--- a/src/tests/drivers/test-mavlink.cpp
+++ b/src/tests/drivers/test-mavlink.cpp
@@ -63,7 +63,8 @@ int main()
     {
         // Create a Mavlink message
         mavlink_message_t pingMsg;
-        mavlink_msg_ping_tc_pack(1, 1, &pingMsg, miosix::getTick());
+        mavlink_msg_ping_tc_pack(1, 1, &pingMsg,
+                                 miosix::getTime() / Constants::NS_IN_MS);
 
         // Send the message
         mavlink->enqueueMsg(pingMsg);
diff --git a/src/tests/drivers/timer/test-counted-pwm.cpp b/src/tests/drivers/timer/test-counted-pwm.cpp
index 497f33a868dc16002ab73a87f5e23613fa1eaeca..15895deb58c24171233b95db5a15e49b4c25f4ad 100644
--- a/src/tests/drivers/timer/test-counted-pwm.cpp
+++ b/src/tests/drivers/timer/test-counted-pwm.cpp
@@ -22,6 +22,7 @@
 
 #include <drivers/timer/CountedPWM.h>
 #include <miosix.h>
+#include <utils/Constants.h>
 
 #include <thread>
 
@@ -55,8 +56,9 @@ int main()
         {
             while (true)
             {
+                float time = (float)getTime() / Constants::NS_IN_S;  // [s]
                 printf("[%.2f] Counter: %d\tTarget: %ld\tIs generating: %d\n",
-                       getTick() / 1000.0, pwm.getCurrentCount(), TIM4->CCR1,
+                       time, pwm.getCurrentCount(), TIM4->CCR1,
                        pwm.isGenerating());
                 Thread::sleep(250);
             }
diff --git a/src/tests/drivers/timer/test-timestamptimer.cpp b/src/tests/drivers/timer/test-timestamptimer.cpp
index 3ba13168412061eafaff618405be23b7e1ecc240..7d024c459f6eb890195ba1d1125378a654890171 100644
--- a/src/tests/drivers/timer/test-timestamptimer.cpp
+++ b/src/tests/drivers/timer/test-timestamptimer.cpp
@@ -23,6 +23,7 @@
 #include <drivers/timer/TimerUtils.h>
 #include <drivers/timer/TimestampTimer.h>
 #include <miosix.h>
+#include <utils/Constants.h>
 
 using namespace miosix;
 using namespace Boardcore;
@@ -43,15 +44,15 @@ int main()
 
     for (int i = 0; i < 10; i++)
     {
-        long long prevTick = getTick();
+        long long prevTime = getTime();
 
         uint64_t timestamp = TimestampTimer::getTimestamp();
 
         // cppcheck-suppress invalidPrintfArgType_uint
-        printf("%12llu us, %12.3f ms, %12.6f s, %12lld tick \n", timestamp,
-               timestamp / 1e3, timestamp / 1e6, prevTick);
+        printf("%12llu us, %12.3f ms, %12.6f s, %12lld time \n", timestamp,
+               timestamp / 1e3, timestamp / 1e6, prevTime);
 
-        Thread::sleepUntil(prevTick + 1000);
+        Thread::nanoSleepUntil(prevTime + 1 * Constants::NS_IN_S);
     }
 
     printf("Now resetting the TimestampTimer\n");
@@ -60,15 +61,15 @@ int main()
 
     while (true)
     {
-        long long prevTick = getTick();
+        long long prevTime = getTime();
 
         uint64_t timestamp = TimestampTimer::getTimestamp();
 
         // cppcheck-suppress invalidPrintfArgType_uint
-        printf("%12llu us, %12.3f ms, %12.6f s, %12lld tick \n", timestamp,
-               timestamp / 1e3, timestamp / 1e6, prevTick);
+        printf("%12llu us, %12.3f ms, %12.6f s, %12lld time \n", timestamp,
+               timestamp / 1e3, timestamp / 1e6, prevTime);
 
-        Thread::sleepUntil(prevTick + 1000);
+        Thread::nanoSleepUntil(prevTime + 1 * Constants::NS_IN_S);
     }
 }
 
diff --git a/src/tests/drivers/xbee/XbeeTransceiver.h b/src/tests/drivers/xbee/XbeeTransceiver.h
index 3e41850e557367880e47fde90bcd57fc11788527..ffec1ee1a79087eda27f95fbaaa16c5aaca62063 100644
--- a/src/tests/drivers/xbee/XbeeTransceiver.h
+++ b/src/tests/drivers/xbee/XbeeTransceiver.h
@@ -35,7 +35,6 @@
 #include "ActiveObject.h"
 #include "XbeeTestData.h"
 
-using miosix::getTick;
 using std::bind;
 using std::function;
 
@@ -66,6 +65,9 @@ void memset32(uint8_t* buf, uint32_t val, int bufSize)
 
 struct SendIntervalBase
 {
+    /**
+     * @brief Get the interval in milliseconds
+     */
     virtual unsigned int getInterval() const = 0;
 };
 
@@ -111,22 +113,22 @@ public:
 protected:
     void run() override
     {
-        long long loopStartTs = miosix::getTick();
+        long long loopStartTs = miosix::getTime();
         while (!shouldStop())
         {
-            data.timeSinceLastSend = miosix::getTick() - loopStartTs;
-            loopStartTs            = miosix::getTick();
+            data.timeSinceLastSend = miosix::getTime() - loopStartTs;
+            loopStartTs            = miosix::getTime();
 
             // Create packet
             memcpy(buf, &PACKET_FIRST_INT, sizeof(uint32_t));
             memset32(buf + sizeof(uint32_t), packetCounter++,
                      data.packetSize - sizeof(uint32_t));
 
-            long long sendStartTs = miosix::getTick();
+            long long sendStartTs = miosix::getTime();
 
             bool result = xbee.send(buf, data.packetSize);
 
-            data.timeToSend = miosix::getTick() - sendStartTs;
+            data.timeToSend = miosix::getTime() - sendStartTs;
             data.timestamp  = sendStartTs;
 
             if (result)
@@ -141,7 +143,8 @@ protected:
 
             logger.log(data);
 
-            miosix::Thread::sleepUntil(loopStartTs + interval.getInterval());
+            miosix::Thread::nanoSleepUntil(
+                loopStartTs + (interval.getInterval() * Constants::NS_IN_MS));
         }
     }
 
@@ -183,11 +186,11 @@ protected:
     {
         while (!shouldStop())
         {
-            long long start = miosix::getTick();
+            long long start = miosix::getTime();
 
             size_t len = xbee.receive(buf, RCV_BUF_SIZE);
 
-            data.lastPacketTimestamp = miosix::getTick();
+            data.lastPacketTimestamp = miosix::getTime();
             data.timestamp           = start;
 
             ++data.rcvCount;
diff --git a/src/tests/drivers/xbee/gui/StatusScreen.h b/src/tests/drivers/xbee/gui/StatusScreen.h
index 1c7a40b5c196ffe7ab85fbe6e87eddaa8265dc79..bd66dc8ce7af32b4f25bb2dad9e1d70e4f5cb870 100644
--- a/src/tests/drivers/xbee/gui/StatusScreen.h
+++ b/src/tests/drivers/xbee/gui/StatusScreen.h
@@ -42,19 +42,20 @@ namespace Boardcore
 {
 
 /**
- * @brief Converts tick in milliseconds to the HH:MM:SS format
+ * @brief Converts nanoseconds to the HH:MM:SS format
  */
-std::string tickToHMS(long long tick)
+std::string nanosToHMS(long long nanos)
 {
-    char buf[15];
+    long long millis = nanos / Constants::NS_IN_MS;
+    char buf[20];
 
-    int h = tick / (1000 * 3600);
-    tick -= h * (1000 * 3600);
-    int m = tick / (1000 * 60);
-    tick -= m * (1000 * 60);
-    int s = tick / 1000;
+    lldiv_t hours   = std::div(millis, 3600000ll);
+    long long h     = hours.quot;
+    lldiv_t minutes = std::div(hours.rem, 60000ll);
+    long long m     = minutes.quot;
+    long long s     = (minutes.rem / 1000);
 
-    snprintf(buf, 15, "%02d:%02d:%02d", h, m, s);
+    snprintf(buf, 20, "%02lld:%02lld:%02lld", h, m, s);
 
     return string(buf);
 }
@@ -255,7 +256,7 @@ struct StatusScreen
         tvRxPps.setText(strBuf);
 
         tvRxTimeSinceLastRx.setText(
-            tickToHMS(miosix::getTick() - rxd.lastPacketTimestamp));
+            nanosToHMS(miosix::getTime() - rxd.lastPacketTimestamp));
     }
 
     VerticalLayout root{10};
diff --git a/src/tests/drivers/xbee/test-xbee-bidir.cpp b/src/tests/drivers/xbee/test-xbee-bidir.cpp
index def6764fda67deaf5aa1bae13881ea50e9ccdf03..1897ce239516c33e714bc20dfbd0f90332ddae05 100644
--- a/src/tests/drivers/xbee/test-xbee-bidir.cpp
+++ b/src/tests/drivers/xbee/test-xbee-bidir.cpp
@@ -161,7 +161,7 @@ int main()
     config.packetSize   = 256;
     config.sendInterval = 333;
     config.txEnabled    = RUN_SENDER;
-    config.timestamp    = getTick();
+    config.timestamp    = getTime();
 
     configure();
 
@@ -209,7 +209,7 @@ int main()
     // cppcheck-suppress knownConditionTrueFalse
     while (getUserBtnValue() == 0)
     {
-        long long loopStart = getTick();
+        long long loopStart = getTime();
 
         DataRateResult resRcv = trans->getReceiver().getDataRate();
         DataRateResult resSnd = trans->getSender().getDataRate();
@@ -220,10 +220,10 @@ int main()
         logger.log(xbeeDriver->getStatus());
         logger.log(logger.getStats());
 
-        long long tick = getTick();
-        unsigned int h = tick / (1000 * 3600);
-        unsigned int m = (tick - h * 1000 * 3600) / (1000 * 60);
-        float s        = (tick - h * 1000 * 3600 - m * 1000 * 60) / 1000.0f;
+        long long millis = getTime() / Constants::NS_IN_MS;
+        unsigned int h   = millis / (1000 * 3600);
+        unsigned int m   = (millis - h * 1000 * 3600) / (1000 * 60);
+        float s          = (millis - h * 1000 * 3600 - m * 1000 * 60) / 1000.0f;
 
         printf("%02u:%02u:%06.3f\n", h, m, s);
         if (RUN_SENDER)
@@ -245,7 +245,7 @@ int main()
         }
         printf("\n");
 
-        Thread::sleepUntil(loopStart + 1000);
+        Thread::nanoSleepUntil(loopStart + 1 * Constants::NS_IN_S);
     }
 
     trans->stop();
diff --git a/src/tests/drivers/xbee/test-xbee-gui.cpp b/src/tests/drivers/xbee/test-xbee-gui.cpp
index bc0d694aa9c2b460f7304bdb4d213ea7c169235b..070351f04d56be34042909ab317a3fe6eed7aea9 100644
--- a/src/tests/drivers/xbee/test-xbee-gui.cpp
+++ b/src/tests/drivers/xbee/test-xbee-gui.cpp
@@ -105,7 +105,7 @@ protected:
 
                 gui->screenEnergy.updateScan(scan);
 
-                EnergyScanData data{getTick(), scan};
+                EnergyScanData data{getTime(), scan};
                 logger.log(data);
             }
         }
@@ -180,7 +180,7 @@ int main()
     // Main loop: updates the information in the GUI
     for (;;)
     {
-        long long start = getTick();
+        long long start = getTime();
         // Update display values
         switch (gui->screenManager.getScreen())
         {
@@ -209,7 +209,7 @@ int main()
         }
 
         logger.log(logger.getStats());
-        Thread::sleepUntil(start + 500);
+        Thread::nanoSleepUntil(start + (500 * Constants::NS_IN_MS));
     }
 }
 
@@ -219,7 +219,7 @@ void onStartButtonClick(View* btn __attribute__((unused)), Interaction action)
     {
 
         XbeeConfig cfg = gui->screenConfig.config;
-        cfg.timestamp  = getTick();
+        cfg.timestamp  = getTime();
         logger.log(cfg);
 
         gui->screenConfig.btnStart.setText("Starting...");
@@ -265,7 +265,7 @@ void onMarkButtonClick(View* btn __attribute__((unused)), Interaction action)
 {
     if (action == Interaction::CLICK)
     {
-        Mark m{getTick(), markCounter++};
+        Mark m{getTime(), markCounter++};
         logger.log(m);
 
         TextView* tvBtn = dynamic_cast<TextView*>(btn);
diff --git a/src/tests/logger/test-logger.cpp b/src/tests/logger/test-logger.cpp
index a22753780bcfb70d7ef88080e3474cc7cd4898fe..ad79280e6dee0fae7441d57b3b03615901f773d0 100644
--- a/src/tests/logger/test-logger.cpp
+++ b/src/tests/logger/test-logger.cpp
@@ -24,18 +24,20 @@
 
 #include <diagnostic/CpuMeter/CpuMeter.h>
 #include <logger/Logger.h>
+#include <utils/Constants.h>
 
 using namespace Boardcore;
+using namespace Boardcore::Constants;
 using namespace std;
 using namespace miosix;
 
 void logThread(void*)
 {
     Logger& log      = Logger::getInstance();
-    const int period = 5;
-    for (auto t = getTick();; t += period)
+    const int period = 5 * NS_IN_MS;
+    for (auto t = getTime();; t += period)
     {
-        Thread::sleepUntil(t);
+        Thread::nanoSleepUntil(t);
         for (int i = 0; i < 5; i++)
         {
             Dummy d;
diff --git a/src/tests/logger/test-logger.h b/src/tests/logger/test-logger.h
index 3bfddd562b1bb6f859b245ef9b3b023c0a649b1d..56f8e9be241f4f056bcd0e24a60fe7dbf927ef67 100644
--- a/src/tests/logger/test-logger.h
+++ b/src/tests/logger/test-logger.h
@@ -38,7 +38,7 @@ public:
     Dummy()
     {
 #ifdef _MIOSIX
-        timestamp = miosix::getTick();
+        timestamp = miosix::getTime();
 #else   //_MIOSIX
         timestamp = 0;
 #endif  //_MIOSIX
diff --git a/src/tests/radio/sx1278/fsk/test-sx1278-mavlink.cpp b/src/tests/radio/sx1278/fsk/test-sx1278-mavlink.cpp
index 794a7378cbfa51eb08e0afd0f2ff19040e215d9b..3cdafff28c71966cc36a9b8b647d9059161c6552 100644
--- a/src/tests/radio/sx1278/fsk/test-sx1278-mavlink.cpp
+++ b/src/tests/radio/sx1278/fsk/test-sx1278-mavlink.cpp
@@ -176,7 +176,7 @@ void flightTmLoop()
 
     while (1)
     {
-        long long start = miosix::getTick;
+        long long start = miosix::getTime();
 
         {
             Lock<FastMutex> l(mutex);
@@ -204,7 +204,7 @@ void flightTmLoop()
 
         channel->enqueueMsg(msg);
 
-        Thread::sleepUntil(start + FLIGHT_TM_PERIOD);
+        Thread::nanoSleepUntil(start + FLIGHT_TM_PERIOD * Constants::NS_IN_MS);
         i += 1;
     }
 }
diff --git a/src/tests/radio/sx1278/lora/test-sx1278-mavlink.cpp b/src/tests/radio/sx1278/lora/test-sx1278-mavlink.cpp
index 38398038442bab4e9df06774eef23d7be96ca75b..ae08b9d7bde03cf65bb74b2bc06891263052406c 100644
--- a/src/tests/radio/sx1278/lora/test-sx1278-mavlink.cpp
+++ b/src/tests/radio/sx1278/lora/test-sx1278-mavlink.cpp
@@ -136,7 +136,7 @@ void flightTmLoop()
 {
     while (1)
     {
-        long long start = miosix::getTick();
+        long long start = miosix::getTime();
 
         mavlink_message_t msg;
         mavlink_rocket_flight_tm_t tm = {0};
@@ -145,7 +145,7 @@ void flightTmLoop()
         channel->enqueueMsg(msg);
         printf("Enqueued flight_tm_tm!\n");
 
-        Thread::sleepUntil(start + FLIGHT_TM_PERIOD);
+        Thread::nanoSleepUntil(start + FLIGHT_TM_PERIOD * Constants::NS_IN_MS);
     }
 }
 
@@ -153,7 +153,7 @@ void statsTmLoop()
 {
     while (1)
     {
-        long long start = miosix::getTick();
+        long long start = miosix::getTime();
 
         mavlink_message_t msg;
         mavlink_rocket_stats_tm_t tm = {0};
@@ -162,7 +162,7 @@ void statsTmLoop()
         channel->enqueueMsg(msg);
         printf("Enqueued stats_tm!\n");
 
-        Thread::sleepUntil(start + STATS_TM_PERIOD);
+        Thread::nanoSleepUntil(start + STATS_TM_PERIOD * Constants::NS_IN_MS);
     }
 }
 
diff --git a/src/tests/radio/sx1278/sx1278-init.h b/src/tests/radio/sx1278/sx1278-init.h
index 068d7eb2861cebae47f831591a7f11c3767680aa..0c8cf6632e2d0be1271a137709b535f1f97103db 100644
--- a/src/tests/radio/sx1278/sx1278-init.h
+++ b/src/tests/radio/sx1278/sx1278-init.h
@@ -76,8 +76,8 @@ using sck  = miosix::radio::sck;
 using miso = miosix::radio::miso;
 using mosi = miosix::radio::mosi;
 
-using txen = miosix::radio::txEn;
-using rxen = miosix::radio::rxEn;
+using txen                         = miosix::radio::txEn;
+using rxen                         = miosix::radio::rxEn;
 
 #define SX1278_SPI SPI4
 
@@ -208,11 +208,11 @@ bool initRadio()
 #elif defined SX1278_IS_SKYWARD433
     printf("[sx1278] Confuring Skyward 433 frontend...\n");
     std::unique_ptr<Boardcore::SX1278::ISX1278Frontend> frontend(
-        new Boardcore::Skyward433Frontend());
+              new Boardcore::Skyward433Frontend());
 #else
     printf("[sx1278] Confuring RA01 frontend...\n");
     std::unique_ptr<Boardcore::SX1278::ISX1278Frontend> frontend(
-        new Boardcore::RA01Frontend());
+         new Boardcore::RA01Frontend());
 #endif
 
     // Initialize actual radio driver
@@ -240,14 +240,14 @@ bool initRadio()
     Boardcore::SX1278Fsk::Error err;
 
     sx1278 = new Boardcore::SX1278Fsk(sx1278_bus, cs::getPin(), dio0::getPin(),
-                                      dio1::getPin(), dio3::getPin(),
-                                      Boardcore::SPI::ClockDivider::DIV_256,
-                                      std::move(frontend));
+                                            dio1::getPin(), dio3::getPin(),
+                                            Boardcore::SPI::ClockDivider::DIV_256,
+                                            std::move(frontend));
 
     printf("\n[sx1278] Configuring sx1278 fsk...\n");
     if ((err = sx1278->init(config)) != Boardcore::SX1278Fsk::Error::NONE)
     {
-        // FIXME: Why does clang-format put this line up here?
+              // FIXME: Why does clang-format put this line up here?
         printf("[sx1278] sx1278->init error\n");
         return false;
     }
diff --git a/src/tests/sensors/test-l3gd20-fifo.cpp b/src/tests/sensors/test-l3gd20-fifo.cpp
index faa927dbb0f1cbd1b7791821286eb5f06fa0a2e0..4f687306568d0ead82a8ba35c7e485219a058d5e 100644
--- a/src/tests/sensors/test-l3gd20-fifo.cpp
+++ b/src/tests/sensors/test-l3gd20-fifo.cpp
@@ -54,6 +54,7 @@
 #include <drivers/timer/GeneralPurposeTimer.h>
 #include <drivers/timer/TimestampTimer.h>
 #include <sensors/L3GD20/L3GD20.h>
+#include <utils/Constants.h>
 
 #include <array>
 
@@ -166,7 +167,7 @@ int main()
     int fifoNum = 0;
     while (dataCounter < NUM_SAMPLES)
     {
-        long lastTick = miosix::getTick();
+        long lastTime = miosix::getTime();
 
         // Read the fifo
         uint64_t update = TimestampTimer::getTimestamp();
@@ -207,7 +208,8 @@ int main()
         // we have 7 samples (~ 9 ms) of wiggle room before we start losing
         // data, in case we sleep a bit too much (may happen if an higher
         // priority thread has a long task to perform)
-        Thread::sleepUntil(lastTick + 25.5 * 1000 / SAMPLE_FREQUENCY);
+        Thread::nanoSleepUntil(lastTime + (25.5 * 1000 / SAMPLE_FREQUENCY) *
+                                              Constants::NS_IN_MS);
     }
 
     // Dump buffer content as CSV on the serial (might take a while)
diff --git a/src/tests/sensors/test-l3gd20.cpp b/src/tests/sensors/test-l3gd20.cpp
index 1ce300bf7a435490c3afc4ecb11e284d40d2bbf3..69482937e85c68b819c04bd720dbf5df3dbb06b1 100644
--- a/src/tests/sensors/test-l3gd20.cpp
+++ b/src/tests/sensors/test-l3gd20.cpp
@@ -33,6 +33,7 @@
 #include <drivers/spi/SPIDriver.h>
 #include <drivers/timer/TimestampTimer.h>
 #include <sensors/L3GD20/L3GD20.h>
+#include <utils/Constants.h>
 
 #include <array>
 
@@ -138,7 +139,7 @@ int main()
     // Collect NUM_SAMPLE samples
     while (dataCounter < NUM_SAMPLES)
     {
-        long lastTick = miosix::getTick();
+        long lastTime = miosix::getTime();
 
         // Read data from the sensor
         gyro->sample();
@@ -152,7 +153,8 @@ int main()
 
         // Wait until SAMPLE_PERIOD milliseconds from the start of this
         // iteration have passed (SAMPLE_PERIOD = 1000 / SAMPLE_RATE)
-        Thread::sleepUntil(lastTick + 1000 / SAMPLE_RATE);
+        Thread::nanoSleepUntil(lastTime +
+                               (1000 / SAMPLE_RATE) * Constants::NS_IN_MS);
     }
 
     // Dump buffer content as CSV on the serial (might take a while)