diff --git a/porting/npl/riot/include/nimble/nimble_npl_os.h b/porting/npl/riot/include/nimble/nimble_npl_os.h
index 854fd06..d279d25 100644
--- a/porting/npl/riot/include/nimble/nimble_npl_os.h
+++ b/porting/npl/riot/include/nimble/nimble_npl_os.h
@@ -24,8 +24,8 @@
 #include <stdbool.h>
 #include "event/callback.h"
 #include "mutex.h"
-#include "semaphore.h"
-#include "xtimer.h"
+#include "sema.h"
+#include "ztimer.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -50,8 +50,8 @@
 };
 
 struct ble_npl_callout {
-    xtimer_t timer;
-    uint64_t target_us;
+    ztimer_t timer;
+    ble_npl_time_t ticks;
     struct ble_npl_event e;
     event_queue_t *q;
 };
@@ -61,7 +61,7 @@
 };
 
 struct ble_npl_sem {
-    sem_t sem;
+    sema_t sem;
 };
 
 static inline bool
@@ -100,8 +100,9 @@
     } else if (tmo == BLE_NPL_TIME_FOREVER) {
         return (struct ble_npl_event *)event_wait(&evq->q);
     } else {
-        return (struct ble_npl_event *)event_wait_timeout64(&evq->q,
-                                                            tmo * US_PER_MS);
+        return (struct ble_npl_event *)event_wait_timeout_ztimer(&evq->q,
+                                                                 ZTIMER_MSEC,
+                                                                 (uint32_t)tmo);
     }
 }
 
@@ -174,49 +175,39 @@
 static inline ble_npl_error_t
 ble_npl_sem_init(struct ble_npl_sem *sem, uint16_t tokens)
 {
-    int rc;
-
-    rc = sem_init(&sem->sem, 0, tokens);
-
-    return rc == 0 ? BLE_NPL_OK : BLE_NPL_ERROR;
+    sema_create(&sem->sem, (unsigned)tokens);
+    return BLE_NPL_OK;
 }
 
 static inline ble_npl_error_t
 ble_npl_sem_release(struct ble_npl_sem *sem)
 {
-    int rc;
-
-    rc = sem_post(&sem->sem);
-
-    return rc == 0 ? BLE_NPL_OK : BLE_NPL_ERROR;
+    int rc = sema_post(&sem->sem);
+    return (rc == 0) ? BLE_NPL_OK : BLE_NPL_ERROR;
 }
 
 static inline uint16_t
 ble_npl_sem_get_count(struct ble_npl_sem *sem)
 {
-    int val = 0;
-
-    sem_getvalue(&sem->sem, &val);
-
-    return (uint16_t)val;
+    return (uint16_t)sema_get_value(&sem->sem);
 }
 
 static inline void
 ble_npl_callout_stop(struct ble_npl_callout *co)
 {
-    xtimer_remove(&co->timer);
+    ztimer_remove(ZTIMER_MSEC, &co->timer);
 }
 
 static inline bool
 ble_npl_callout_is_active(struct ble_npl_callout *c)
 {
-    return (c->timer.offset || c->timer.long_offset);
+    return ztimer_is_set(ZTIMER_MSEC, &c->timer);
 }
 
 static inline ble_npl_time_t
 ble_npl_callout_get_ticks(struct ble_npl_callout *co)
 {
-    return (ble_npl_time_t)(co->target_us / US_PER_MS);
+    return co->ticks;
 }
 
 static inline void
@@ -228,7 +219,7 @@
 static inline ble_npl_time_t
 ble_npl_time_get(void)
 {
-    return (ble_npl_time_t)(xtimer_now_usec64() / US_PER_MS);
+    return (ble_npl_time_t)ztimer_now(ZTIMER_MSEC);
 }
 
 static inline ble_npl_error_t
@@ -260,7 +251,7 @@
 static inline void
 ble_npl_time_delay(ble_npl_time_t ticks)
 {
-    xtimer_usleep64(ticks * US_PER_MS);
+    ztimer_sleep(ZTIMER_MSEC, (uint32_t)ticks);
 }
 
 static inline uint32_t
diff --git a/porting/npl/riot/src/npl_os_riot.c b/porting/npl/riot/src/npl_os_riot.c
index 2f4efd8..71c130f 100644
--- a/porting/npl/riot/src/npl_os_riot.c
+++ b/porting/npl/riot/src/npl_os_riot.c
@@ -35,18 +35,8 @@
 ble_npl_error_t
 ble_npl_sem_pend(struct ble_npl_sem *sem, ble_npl_time_t timeout)
 {
-    int rc;
-    struct timespec abs;
-    uint64_t time;
-
-    time = xtimer_now_usec64() +
-        (ble_npl_time_ticks_to_ms32(timeout) * US_PER_MS);
-    abs.tv_sec = (time_t)(time / US_PER_SEC);
-    abs.tv_nsec = (long)((time % US_PER_SEC) * NS_PER_US);
-
-    rc = sem_timedwait(&sem->sem, &abs);
-
-    return rc == 0 ? BLE_NPL_OK : BLE_NPL_ENOENT;
+    int rc = sema_wait_timed_ztimer(&sem->sem, ZTIMER_MSEC, timeout);
+    return (rc == 0) ? BLE_NPL_OK : BLE_NPL_ENOENT;
 }
 
 void
@@ -62,19 +52,18 @@
 ble_npl_error_t
 ble_npl_callout_reset(struct ble_npl_callout *c, ble_npl_time_t ticks)
 {
-    /* Use critical section to ensure matching target_us and xtimer value. */
+    /* Use critical section to ensure matching target_us and ztimer value. */
     uint32_t crit_state = ble_npl_hw_enter_critical();
-    uint64_t now = xtimer_now_usec64();
-    c->target_us = now  + ticks * US_PER_MS;
-    xtimer_set64(&c->timer, ticks * US_PER_MS);
+    c->ticks = ztimer_now(ZTIMER_MSEC) + ticks;
+    ztimer_set(ZTIMER_MSEC, &c->timer, ticks);
     ble_npl_hw_exit_critical(crit_state);
     return BLE_NPL_OK;
 }
 
-uint32_t
+ble_npl_time_t
 ble_npl_callout_remaining_ticks(struct ble_npl_callout *co,
                                 ble_npl_time_t time)
 {
-    uint64_t now = xtimer_now_usec64();
-    return (uint32_t)((co->target_us - now) / US_PER_MS);
+    ztimer_now_t now = ztimer_now(ZTIMER_MSEC);
+    return (ble_npl_time_t)(co->ticks - now);
 }
