diff --git a/drivers/at86rf2xx/at86rf2xx.c b/drivers/at86rf2xx/at86rf2xx.c
index 75da3e77fc90f35456ab01531b0eea8b0ddcd283..6ec20a1fb4017f8475f5b39ddaba283185f5baa6 100644
--- a/drivers/at86rf2xx/at86rf2xx.c
+++ b/drivers/at86rf2xx/at86rf2xx.c
@@ -220,13 +220,9 @@ void at86rf2xx_tx_prepare(at86rf2xx_t *dev)
     do {
         state = at86rf2xx_get_status(dev);
     }
-    while (state == AT86RF2XX_STATE_BUSY_TX_ARET);
-
-    /* if receiving cancel */
-    if(state == AT86RF2XX_STATE_BUSY_RX_AACK) {
-        at86rf2xx_force_trx_off(dev);
-        dev->idle_state = AT86RF2XX_STATE_RX_AACK_ON;
-    } else if (state != AT86RF2XX_STATE_TX_ARET_ON) {
+    while (state == AT86RF2XX_STATE_BUSY_RX_AACK ||
+           state == AT86RF2XX_STATE_BUSY_TX_ARET);
+    if (state != AT86RF2XX_STATE_TX_ARET_ON) {
         dev->idle_state = state;
     }
     at86rf2xx_set_state(dev, AT86RF2XX_STATE_TX_ARET_ON);
diff --git a/drivers/at86rf2xx/at86rf2xx_getset.c b/drivers/at86rf2xx/at86rf2xx_getset.c
index faf9ab58783a276d7150d0db67419965d180acc6..abe2982bec39f9512d8d572837ee7cd8dfce962d 100644
--- a/drivers/at86rf2xx/at86rf2xx_getset.c
+++ b/drivers/at86rf2xx/at86rf2xx_getset.c
@@ -407,6 +407,12 @@ static inline void _set_state(at86rf2xx_t *dev, uint8_t state)
     dev->state = state;
 }
 
+static inline void _force_trx_off(at86rf2xx_t *dev)
+{
+    at86rf2xx_reg_write(dev, AT86RF2XX_REG__TRX_STATE, AT86RF2XX_TRX_STATE__FORCE_TRX_OFF);
+    while (at86rf2xx_get_status(dev) != AT86RF2XX_STATE_TRX_OFF);
+}
+
 void at86rf2xx_set_state(at86rf2xx_t *dev, uint8_t state)
 {
     uint8_t old_state = at86rf2xx_get_status(dev);
@@ -437,7 +443,7 @@ void at86rf2xx_set_state(at86rf2xx_t *dev, uint8_t state)
 
     if (state == AT86RF2XX_STATE_SLEEP) {
         /* First go to TRX_OFF */
-        at86rf2xx_force_trx_off(dev);
+        _force_trx_off(dev);
         /* Discard all IRQ flags, framebuffer is lost anyway */
         at86rf2xx_reg_read(dev, AT86RF2XX_REG__IRQ_STATUS);
         /* Go to SLEEP mode from TRX_OFF */
@@ -459,5 +465,5 @@ void at86rf2xx_reset_state_machine(at86rf2xx_t *dev)
         old_state = at86rf2xx_get_status(dev);
     } while (old_state == AT86RF2XX_STATE_IN_PROGRESS);
 
-    at86rf2xx_force_trx_off(dev);
+    _force_trx_off(dev);
 }
diff --git a/drivers/at86rf2xx/at86rf2xx_internal.c b/drivers/at86rf2xx/at86rf2xx_internal.c
index fc9ea8d40398b2fb8a242c2ab5b6aa6b727cc50f..4a9ef5c0bc771d7a81815716bf6c54b421943a3d 100644
--- a/drivers/at86rf2xx/at86rf2xx_internal.c
+++ b/drivers/at86rf2xx/at86rf2xx_internal.c
@@ -135,11 +135,3 @@ void at86rf2xx_hardware_reset(at86rf2xx_t *dev)
     gpio_set(dev->reset_pin);
     xtimer_usleep(AT86RF2XX_RESET_DELAY);
 }
-
-void at86rf2xx_force_trx_off(const at86rf2xx_t *dev)
-{
-    at86rf2xx_reg_write(dev,
-                        AT86RF2XX_REG__TRX_STATE,
-                        AT86RF2XX_TRX_STATE__FORCE_TRX_OFF);
-    while (at86rf2xx_get_status(dev) != AT86RF2XX_STATE_TRX_OFF);
-}
diff --git a/drivers/at86rf2xx/include/at86rf2xx_internal.h b/drivers/at86rf2xx/include/at86rf2xx_internal.h
index 863f1fedf3dc1cc135cd748965c399f5536666a0..616181bbab171a09f8e9cfb0237aaae58b7ee2f3 100644
--- a/drivers/at86rf2xx/include/at86rf2xx_internal.h
+++ b/drivers/at86rf2xx/include/at86rf2xx_internal.h
@@ -107,13 +107,6 @@ void at86rf2xx_sram_write(const at86rf2xx_t *dev,
 void at86rf2xx_fb_read(const at86rf2xx_t *dev,
                        uint8_t *data, const size_t len);
 
-/**
- * @brief   Cancel ongoing transactions and switch to TRX_OFF state
- *
- * @param[in] dev       device to manipulate
- */
-void at86rf2xx_force_trx_off(const at86rf2xx_t *dev);
-
 /**
  * @brief   Convenience function for reading the status of the given device
  *