diff --git a/examples/bare8.rs b/examples/bare8.rs
index b889d6c41671797308d5359078bf4141eb1d7230..33690a3bc493fd2fa6b204ec9fba60bba04cf69e 100644
--- a/examples/bare8.rs
+++ b/examples/bare8.rs
@@ -14,7 +14,7 @@
 
 extern crate panic_halt;
 
-use cortex_m::{asm, iprintln};
+use cortex_m::iprintln;
 use nb::block;
 
 extern crate stm32f4xx_hal as hal;
@@ -24,16 +24,21 @@ use hal::stm32::{ITM, USART2};
 
 use rtfm::app;
 
-#[app(device = hal::stm32)]
+#[app(device = hal::stm32, peripherals = true)]
 const APP: () = {
-    // Late resources
-    static mut TX: Tx<USART2> = ();
-    static mut RX: Rx<USART2> = ();
-    static mut ITM: ITM = ();
+    struct Resources {
+        // Late resources
+        TX: Tx<USART2>,
+        RX: Rx<USART2>,
+        ITM: ITM,
+    }
 
     // init runs in an interrupt free section
     #[init]
-    fn init() {
+    fn init(cx: init::Context) -> init::LateResources {
+        let mut core = cx.core;
+        let device = cx.device;
+
         let stim = &mut core.ITM.stim[0];
         iprintln!(stim, "bare8");
 
@@ -45,9 +50,7 @@ const APP: () = {
         let gpioa = device.GPIOA.split();
 
         let tx = gpioa.pa2.into_alternate_af7();
-        let rx = gpioa.pa3.into_alternate_af7(); 
-
-        asm::bkpt();
+        let rx = gpioa.pa3.into_alternate_af7();
 
         let serial = Serial::usart2(
             device.USART2,
@@ -61,23 +64,25 @@ const APP: () = {
         let (tx, rx) = serial.split();
 
         // Late resources
-        TX = tx;
-        RX = rx;
-        ITM = core.ITM;
+        init::LateResources {
+            TX: tx,
+            RX: rx,
+            ITM: core.ITM,
+        }
     }
 
-    // idle may be interrupted by other interrupt/tasks in the system
+    // idle may be interrupted by other interrupts/tasks in the system
     #[idle(resources = [RX, TX, ITM])]
-    fn idle() -> ! {
-        let rx = resources.RX;
-        let tx = resources.TX;
-        let stim = &mut resources.ITM.stim[0];
+    fn idle(cx: idle::Context) -> ! {
+        let rx = cx.resources.RX;
+        let tx = cx.resources.TX;
+        let stim = &mut cx.resources.ITM.stim[0];
 
         loop {
             match block!(rx.read()) {
                 Ok(byte) => {
                     iprintln!(stim, "Ok {:?}", byte);
-                    tx.write(byte).unwrap(); 
+                    tx.write(byte).unwrap();
                 }
                 Err(err) => {
                     iprintln!(stim, "Error {:?}", err);
@@ -87,32 +92,13 @@ const APP: () = {
     }
 };
 
-
+// Optional assignment
 // 0. Compile and run the example. Notice, we use the default 16MHz clock.
 //
-//    > cargo build --example bare7 --features "hal rtfm"
+//    > cargo build --example bare8 --features "rtfm"
 //    (or use the vscode build task)
 //
-//    The "hal" feature enables the optional dependencies stm32f4xx-hal and rtfm".
-//
-//    Cargo.toml:
-// 
-//    [dependencies.cortex-m-rtfm]
-//    version = "0.4.0"
-//    optional = true
-// 
-//    [dependencies.stm32f4xx-hal]
-//    git = "https://github.com/stm32-rs/stm32f4xx-hal.git"
-//    version = "0.2.8"
-//    features = ["stm32f413", "rt"]
-//    optional = true
-//
-//    [features]
-//    pac = ["stm32f4"]
-//    hal = ["stm32f4xx-hal"]
-//    rtfm = ["cortex-m-rtfm"]
-//
-// 1. Our CPU now runs slower, did it effect the behavior?
+// 1. What is the behavior in comparison to bare7.4 and bare7.5
 //
 //    ** your answer here **
 //
@@ -129,7 +115,7 @@ const APP: () = {
 //    (are you know loosing more data)?
 //
 //    ** your answer here **
-// 
+//
 //    Commit your answer (bare8_3)
 //
 // 4. *Optional
@@ -140,6 +126,5 @@ const APP: () = {
 //    How did the optimized build compare to the debug build (performance/lost bytes)
 //
 //    ** your answer here **
-// 
+//
 //    Commit your answer (bare8_4)
-