diff --git a/conf/airframes/booz2_flixr.xml b/conf/airframes/booz2_flixr.xml
index c0a5b0c7f8..38255e1429 100644
--- a/conf/airframes/booz2_flixr.xml
+++ b/conf/airframes/booz2_flixr.xml
@@ -16,6 +16,7 @@
+
diff --git a/conf/autopilot/rotorcraft.makefile b/conf/autopilot/rotorcraft.makefile
index e42d413483..5ffb0f8d73 100644
--- a/conf/autopilot/rotorcraft.makefile
+++ b/conf/autopilot/rotorcraft.makefile
@@ -23,13 +23,6 @@
#
#
-#
-# Expected from board file or overriden as xml param :
-#
-# MODEM_PORT
-# MODEM_BAUD
-#
-
CFG_SHARED=$(PAPARAZZI_SRC)/conf/autopilot/subsystems/shared
CFG_ROTORCRAFT=$(PAPARAZZI_SRC)/conf/autopilot/subsystems/rotorcraft
@@ -92,20 +85,11 @@ endif
#
# Telemetry/Datalink
#
+# include subsystems/rotorcraft/telemetry_transparent.makefile
+# or
+# include subsystems/rotorcraft/telemetry_xbee_api.makefile
+#
ap.srcs += $(SRC_ARCH)/mcu_periph/uart_arch.c
-ap.CFLAGS += -DDOWNLINK -DDOWNLINK_TRANSPORT=PprzTransport
-ap.CFLAGS += -DDOWNLINK_DEVICE=$(MODEM_PORT)
-ap.srcs += $(SRC_FIRMWARE)/telemetry.c
-ap.srcs += downlink.c
-ap.srcs += pprz_transport.c
-ap.CFLAGS += -DDATALINK=PPRZ
-ap.CFLAGS += -DPPRZ_UART=$(MODEM_PORT)
-ap.srcs += $(SRC_FIRMWARE)/datalink.c
-ap.CFLAGS += -DUSE_$(MODEM_PORT) -D$(MODEM_PORT)_BAUD=$(MODEM_BAUD)
-
-ifeq ($(ARCH), lpc21)
-ap.CFLAGS += -D$(MODEM_PORT)_VIC_SLOT=6
-endif
ap.srcs += $(SRC_BOOZ)/booz2_commands.c
diff --git a/conf/autopilot/subsystems/rotorcraft/telemetry_transparent.makefile b/conf/autopilot/subsystems/rotorcraft/telemetry_transparent.makefile
new file mode 100644
index 0000000000..fbc1b89c2e
--- /dev/null
+++ b/conf/autopilot/subsystems/rotorcraft/telemetry_transparent.makefile
@@ -0,0 +1,18 @@
+#
+# Expected from board file or overriden as xml param :
+#
+# MODEM_PORT
+# MODEM_BAUD
+#
+
+ap.CFLAGS += -DUSE_$(MODEM_PORT)
+ap.CFLAGS += -D$(MODEM_PORT)_BAUD=$(MODEM_BAUD)
+
+ap.CFLAGS += -DDOWNLINK -DDOWNLINK_DEVICE=$(MODEM_PORT) -DPPRZ_UART=$(MODEM_PORT)
+ap.CFLAGS += -DDOWNLINK_TRANSPORT=PprzTransport -DDATALINK=PPRZ
+ap.srcs += downlink.c pprz_transport.c
+ap.srcs += $(SRC_FIRMWARE)/datalink.c $(SRC_FIRMWARE)/telemetry.c
+
+ifeq ($(ARCH), lpc21)
+ap.CFLAGS += -D$(MODEM_PORT)_VIC_SLOT=6
+endif
diff --git a/conf/autopilot/subsystems/rotorcraft/telemetry_xbee_api.makefile b/conf/autopilot/subsystems/rotorcraft/telemetry_xbee_api.makefile
new file mode 100644
index 0000000000..a10f3fa95e
--- /dev/null
+++ b/conf/autopilot/subsystems/rotorcraft/telemetry_xbee_api.makefile
@@ -0,0 +1,19 @@
+# XBee modems in API mode
+#
+# Expected from board file or overriden as xml param :
+#
+# MODEM_PORT
+# MODEM_BAUD
+#
+
+ap.CFLAGS += -DUSE_$(MODEM_PORT)
+ap.CFLAGS += -D$(MODEM_PORT)_BAUD=$(MODEM_BAUD)
+
+ap.CFLAGS += -DDOWNLINK -DDOWNLINK_DEVICE=$(MODEM_PORT) -DXBEE_UART=$(MODEM_PORT)
+ap.CFLAGS += -DDOWNLINK_TRANSPORT=XBeeTransport -DDATALINK=XBEE
+ap.srcs += downlink.c xbee.c
+ap.srcs += $(SRC_FIRMWARE)/datalink.c $(SRC_FIRMWARE)/telemetry.c
+
+ifeq ($(ARCH), lpc21)
+ap.CFLAGS += -D$(MODEM_PORT)_VIC_SLOT=6
+endif
diff --git a/sw/airborne/datalink.h b/sw/airborne/datalink.h
index 690b06462a..9baa824a92 100644
--- a/sw/airborne/datalink.h
+++ b/sw/airborne/datalink.h
@@ -78,8 +78,8 @@ EXTERN void dl_parse_msg(void);
#elif DATALINK == XBEE
#define DatalinkEvent() { \
- if (XbeeBuffer()) { \
- ReadXbeeBuffer(); \
+ if (XBeeBuffer()) { \
+ ReadXBeeBuffer(); \
if (xbee_msg_received) { \
xbee_parse_payload(); \
xbee_msg_received = FALSE; \
diff --git a/sw/airborne/firmwares/rotorcraft/main.c b/sw/airborne/firmwares/rotorcraft/main.c
index 60205f57e1..dc84985b20 100644
--- a/sw/airborne/firmwares/rotorcraft/main.c
+++ b/sw/airborne/firmwares/rotorcraft/main.c
@@ -32,6 +32,7 @@
#include "downlink.h"
#include "firmwares/rotorcraft/telemetry.h"
#include "datalink.h"
+#include "xbee.h"
#include "booz2_commands.h"
#include "firmwares/rotorcraft/actuators.h"
@@ -100,6 +101,10 @@ STATIC_INLINE void main_init( void ) {
actuators_init();
radio_control_init();
+#if DATALINK == XBEE
+ xbee_init();
+#endif
+
booz2_analog_init();
baro_init();