diff --git a/firmware/os/drivers/bosch_bmp280/bosch_bmp280.c b/firmware/os/drivers/bosch_bmp280/bosch_bmp280.c
index d6c040c..fbdc97c 100644
--- a/firmware/os/drivers/bosch_bmp280/bosch_bmp280.c
+++ b/firmware/os/drivers/bosch_bmp280/bosch_bmp280.c
@@ -25,12 +25,13 @@
 #include <nanohubPacket.h>
 #include <sensors.h>
 #include <seos.h>
+#include <slab.h>
 #include <timer.h>
 #include <util.h>
 
 #define BMP280_APP_ID APP_ID_MAKE(NANOHUB_VENDOR_GOOGLE, 5)
 
-#define BMP280_APP_VERSION 2
+#define BMP280_APP_VERSION 3
 
 #define I2C_BUS_ID                      0
 #define I2C_SPEED                       400000
@@ -48,6 +49,10 @@
 #define BOSCH_BMP280_MAX_PENDING_I2C_REQUESTS   4
 #define BOSCH_BMP280_MAX_I2C_TRANSFER_SIZE      24
 
+// This defines how many baro events we could handle being backed up in the
+// queue. Use this to size our slab
+#define MAX_BARO_EVENTS  4
+
 // temp: 2x oversampling, baro: 16x oversampling, power: normal
 #define CTRL_ON    ((2 << 5) | (5 << 2) | 3)
 // temp: 2x oversampling, baro: 16x oversampling, power: sleep
@@ -94,6 +99,8 @@
 {
     struct BMP280CompParams comp;
 
+    struct SlabAllocator *evtSlab;
+
     uint32_t id;
     uint32_t baroHandle;
     uint32_t tempHandle;
@@ -189,6 +196,31 @@
     return (ret == 0);
 }
 
+static bool baroAllocateEvt(struct SingleAxisDataEvent **evPtr, float sample, uint64_t time)
+{
+    struct SingleAxisDataEvent *ev;
+
+    *evPtr = slabAllocatorAlloc(mTask.evtSlab);
+
+    ev = *evPtr;
+    if (!ev) {
+        osLog(LOG_ERROR, "[BMP280] slabAllocatorAlloc() failed\n");
+        return false;
+    }
+
+    memset(&ev->samples[0].firstSample, 0x00, sizeof(struct SensorFirstSample));
+    ev->referenceTime = time;
+    ev->samples[0].firstSample.numSamples = 1;
+    ev->samples[0].fdata = sample;
+
+    return true;
+}
+
+static void baroFreeEvt(void *ptr)
+{
+    slabAllocatorFree(mTask.evtSlab, ptr);
+}
+
 /* sensor callbacks from nanohub */
 
 static void i2cCallback(void *cookie, size_t tx, size_t rx, int err)
@@ -344,7 +376,7 @@
     .sensorName = "Pressure",
     .supportedRates = baroSupportedRates,
     .sensorType = SENS_TYPE_BARO,
-    .numAxis = NUM_AXIS_EMBEDDED,
+    .numAxis = NUM_AXIS_ONE,
     .interrupt = NANOHUB_INT_NONWAKEUP,
     .minSamples = 300
 };
@@ -425,7 +457,9 @@
 
 static void handleI2cEvent(struct I2cTransfer *xfer)
 {
-    union EmbeddedDataPoint sample;
+    union EmbeddedDataPoint embeddedSample;
+    struct SingleAxisDataEvent *baroSample;
+
     struct I2cTransfer *newXfer;
 
     switch (xfer->state) {
@@ -507,14 +541,17 @@
 
                     writeRegister(BOSCH_BMP280_REG_CTRL_MEAS, CTRL_SLEEP, STATE_IDLE);
                 } else {
-                    sample.fdata = pressure_Pa * 0.01f;
-                    osEnqueueEvt(sensorGetMyEventType(SENS_TYPE_BARO), sample.vptr, NULL);
+                    if (baroAllocateEvt(&baroSample, pressure_Pa * 0.01f, sensorGetTime())) {
+                        if (!osEnqueueEvtOrFree(EVENT_TYPE_BIT_DISCARDABLE | sensorGetMyEventType(SENS_TYPE_BARO), baroSample, baroFreeEvt)) {
+                            osLog(LOG_ERROR, "[BMP280] failed to enqueue baro sample\n");
+                        }
+                    }
                 }
             }
 
             if (mTask.tempOn && mTask.tempReading) {
-                sample.fdata = temp_centigrade;
-                osEnqueueEvt(sensorGetMyEventType(SENS_TYPE_TEMP), sample.vptr, NULL);
+                embeddedSample.fdata = temp_centigrade;
+                osEnqueueEvt(sensorGetMyEventType(SENS_TYPE_TEMP), embeddedSample.vptr, NULL);
             }
 
             mTask.baroReading = false;
@@ -592,6 +629,12 @@
     mTask.baroHandle = sensorRegister(&sensorInfoBaro, &sensorOpsBaro, NULL, false);
     mTask.tempHandle = sensorRegister(&sensorInfoTemp, &sensorOpsTemp, NULL, false);
 
+    mTask.evtSlab = slabAllocatorNew(sizeof(struct SingleAxisDataEvent) + sizeof(struct SingleAxisDataPoint), 4, MAX_BARO_EVENTS);
+    if (!mTask.evtSlab) {
+        osLog(LOG_ERROR, "[BMP280] slabAllocatorNew() failed\n");
+        return false;
+    }
+
     osEventSubscribe(taskId, EVT_APP_START);
 
     return true;
@@ -599,7 +642,7 @@
 
 static void endTask(void)
 {
-
+    slabAllocatorDestroy(mTask.evtSlab);
 }
 
 INTERNAL_APP_INIT(BMP280_APP_ID, BMP280_APP_VERSION, startTask, endTask, handleEvent);
