diff --git a/src/demo_tasks.rs b/src/demo_tasks.rs
index 1559a64011bb017c85b0119756e89c67127673bc..ab643fa4f60f82d9f31e39574960f0a5c04d35cd 100644
--- a/src/demo_tasks.rs
+++ b/src/demo_tasks.rs
@@ -1,6 +1,5 @@
 use crate::flow3r::{captouch::CaptouchHandler, display::Display, imu::ImuHandler};
-use bmi270::AxisData;
-use embassy_futures::select::{select, select3, select_array, Either, Either3};
+use embassy_futures::select::{select, select3, Either, Either3};
 use embassy_time::{Duration, Timer};
 use embedded_graphics::{
     image::Image,
@@ -109,7 +108,7 @@ pub async fn draw_start_screen(display: &mut Display) {
     display.set_backlight(100).unwrap();
 }
 
-pub async fn imu_demo(display: &mut Display /*imu: &mut ImuHandler*/) {
+pub async fn imu_demo(display: &mut Display, imu: &mut ImuHandler) {
     let input = InputHandler;
     let mut inputs = input.split();
 
@@ -125,8 +124,7 @@ pub async fn imu_demo(display: &mut Display /*imu: &mut ImuHandler*/) {
     let mut offset = (0i32, 0i32);
     loop {
         match select(inputs.sw2_center.wait_for_press(), async {
-            //let imu_value = imu.rotation().unwrap();
-            let imu_value = AxisData { x: 5, y: 5, z: 0 };
+            let imu_value = imu.rotation().unwrap();
             offset = (
                 (-80).max(80.min(offset.0 + imu_value.x as i32)),
                 (-80).max(80.min(offset.1 + imu_value.y as i32)),
diff --git a/src/flow3r/imu.rs b/src/flow3r/imu.rs
index 2b06347ec9c4d2e5cfdd8b64b17aa7d443e541dc..f61ed7e0897b1220f991b5532079f89d30a678a8 100644
--- a/src/flow3r/imu.rs
+++ b/src/flow3r/imu.rs
@@ -11,10 +11,11 @@ impl ImuHandler {
     pub fn new(i2c: I2cProxy<'static, XtensaMutex<I2C<'static, I2C0>>>) -> Self {
         let mut bmi270 = Bmi270::new_i2c(i2c, bmi270::I2cAddr::Default, bmi270::Burst::Max);
 
-        let chip_id = bmi270.get_chip_id().unwrap();
-        println!("imu chip id: {}", chip_id);
+        if let Some(chip_id) = bmi270.get_chip_id().ok() {
+            println!("imu chip id: {}", chip_id);
+        }
 
-        bmi270.init().unwrap();
+        bmi270.init().ok();
 
         let pwr_ctrl = PwrCtrl {
             aux_en: false,
@@ -22,7 +23,7 @@ impl ImuHandler {
             acc_en: true,
             temp_en: false,
         };
-        bmi270.set_pwr_ctrl(pwr_ctrl).unwrap();
+        bmi270.set_pwr_ctrl(pwr_ctrl).ok();
         Self { imu: bmi270 }
     }
 
diff --git a/src/flow3r/mod.rs b/src/flow3r/mod.rs
index 691711fefb361ec1f01fe29079f2f20cf1caab4b..a2f881955f8ecf30f077a1dd8e3cd1becb1b96bc 100644
--- a/src/flow3r/mod.rs
+++ b/src/flow3r/mod.rs
@@ -1,7 +1,7 @@
 use self::badgelink::BadgeLink;
 use self::captouch::CaptouchHandler;
 use self::display::Display;
-//use self::imu::ImuHandler;
+use self::imu::ImuHandler;
 use self::input::InputHandler;
 use self::leds::Leds;
 
@@ -18,7 +18,7 @@ pub struct Flow3r {
     pub badgelink: BadgeLink,
     pub captouch: CaptouchHandler,
     pub display: Display,
-    //pub imu: ImuHandler,
+    pub imu: ImuHandler,
     pub inputs: InputHandler,
     pub leds: Leds,
 }
@@ -28,7 +28,7 @@ impl Flow3r {
         badgelink: BadgeLink,
         captouch: CaptouchHandler,
         display: Display,
-        //imu: ImuHandler,
+        imu: ImuHandler,
         inputs: InputHandler,
         leds: Leds,
     ) -> Self {
@@ -36,7 +36,7 @@ impl Flow3r {
             badgelink,
             captouch,
             display,
-            //imu,
+            imu,
             inputs,
             leds,
         }
diff --git a/src/flow3r/ui/main_menu.rs b/src/flow3r/ui/main_menu.rs
index aefd1b3f479ba4f60749163e1d99071b489ada7d..9440c0cd5c4baa6153c4b99784682ef3e1a1e3b4 100644
--- a/src/flow3r/ui/main_menu.rs
+++ b/src/flow3r/ui/main_menu.rs
@@ -9,10 +9,10 @@ use embedded_graphics::{
 
 use crate::{
     demo_tasks::{display_demo, imu_demo, captouch_demo},
-    flow3r::{display::Display, input::InputHandler},
+    flow3r::{display::Display, input::InputHandler, imu::ImuHandler},
 };
 
-pub async fn main_menu(mut display: Display, inputs: InputHandler) -> ! {
+pub async fn main_menu(mut display: Display, inputs: InputHandler, mut imu: ImuHandler) -> ! {
     let mut inputs = inputs.split();
 
     let apps = ["input_test", "imu_test", "captouch_test"];
@@ -39,7 +39,7 @@ pub async fn main_menu(mut display: Display, inputs: InputHandler) -> ! {
         .await
         {
             Either3::First(_) => {
-                start_current_app(apps[selected], &mut display).await;
+                start_current_app(apps[selected], &mut display, &mut imu).await;
                 display
                     .fill_solid(&display.bounding_box(), Rgb565::BLACK)
                     .unwrap();
@@ -103,10 +103,10 @@ async fn play_transition_animation<'a>(
     }
 }
 
-async fn start_current_app(app: &str, display: &mut Display) {
+async fn start_current_app(app: &str, display: &mut Display, imu: &mut ImuHandler) {
     match app {
         "input_test" => display_demo(display).await,
-        "imu_test" => imu_demo(display).await,
+        "imu_test" => imu_demo(display, imu).await,
         "captouch_test" => captouch_demo(display).await,
         _ => (),
     }
diff --git a/src/main.rs b/src/main.rs
index 1dff389d14fb6b0a44c009e167b13224b8cab0af..9e3ddf291f989e622d5bb1da9ab0a23748b0bc7c 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -29,9 +29,8 @@ async fn main(mut flow3r: Flow3r) -> ! {
 
     let spawner = Spawner::for_current_executor().await;
     spawner.spawn(demo_tasks::leds_fade(flow3r.leds)).ok();
-    // spawner.spawn(demo_tasks::display_demo(flow3r.display)).ok();
 
     Timer::after(Duration::from_secs(3)).await;
 
-    main_menu(flow3r.display, flow3r.inputs).await
+    main_menu(flow3r.display, flow3r.inputs, flow3r.imu).await
 }
diff --git a/src/runtime.rs b/src/runtime.rs
index 456dd2dbfb2390d3fdc56bd8a6ab1708ecfa8f75..2228e93e777c8db3b631c5e81026a54b3b211c05 100644
--- a/src/runtime.rs
+++ b/src/runtime.rs
@@ -19,8 +19,8 @@ use static_cell::StaticCell;
 use crate::flow3r::{
     badgelink::BadgeLink,
     captouch::{captouch_controller, CaptouchHandler},
-    display::{display_refresh, Display},
-    //imu::ImuHandler,
+    display::Display,
+    imu::ImuHandler,
     input::{input_controller, InputHandler},
     leds::init_leds,
     Flow3r,
@@ -31,7 +31,7 @@ const READ_BUF_SIZE: usize = 64;
 
 static RNG: StaticCell<Rng> = StaticCell::new();
 static EXECUTOR: StaticCell<Executor> = StaticCell::new();
-static APP_CORE_EXECUTOR: StaticCell<Executor> = StaticCell::new();
+//static APP_CORE_EXECUTOR: StaticCell<Executor> = StaticCell::new();
 static CLOCKS: StaticCell<Clocks> = StaticCell::new();
 
 pub fn start_runtime() -> ! {
@@ -44,10 +44,10 @@ pub fn start_runtime() -> ! {
 #[embassy_executor::task]
 async fn start_app_core(mut cpu_control: CpuControl) -> ! {
     let mut app_core_function = || {
-        let executor = APP_CORE_EXECUTOR.init(Executor::new());
+        /*let executor = APP_CORE_EXECUTOR.init(Executor::new());
         executor.run(|spawner| {
             spawner.spawn(display_refresh()).ok();
-        })
+        })*/
     };
     let _guard = cpu_control.start_app_core(&mut app_core_function).unwrap();
     loop {
@@ -176,12 +176,12 @@ async fn init_runtime() {
     // Init Flow3r components
 
     let badgelink = BadgeLink::new(i2c_busmanager.acquire_i2c());
-    //let imu = ImuHandler::new(i2c_busmanager.acquire_i2c());
+    let imu = ImuHandler::new(i2c_busmanager.acquire_i2c());
     let inputs = InputHandler;
     let captouch = CaptouchHandler;
     let leds = init_leds(pulse.channel0, io.pins.gpio14);
 
-    let flow3r = Flow3r::new(badgelink, captouch, display, inputs, leds);
+    let flow3r = Flow3r::new(badgelink, captouch, display, imu, inputs, leds);
 
     // Spawn background tasks