diff --git a/examples/rtic_bare9.rs b/examples/rtic_bare9.rs
index a1fc61c6b3a97855fc50f1fb85419a0bfe7c27ce..6c3d4bb1ca3fad125f0c1fa80b03b591ba58245c 100644
--- a/examples/rtic_bare9.rs
+++ b/examples/rtic_bare9.rs
@@ -13,17 +13,23 @@ use stm32f4xx_hal::{
     prelude::*,
     serial::{config::Config, Event, Rx, Serial, Tx},
     stm32::USART2,
+    nb::block,
 };
 
 use rtic::app;
 use rtt_target::{rprintln, rtt_init_print};
 
+
 #[app(device = stm32f4xx_hal::stm32, peripherals = true)]
 const APP: () = {
     struct Resources {
         // Late resources
         TX: Tx<USART2>,
         RX: Rx<USART2>,
+        #[init(0)]
+        fel: u32,
+        #[init(0)]
+        corr: u32,
     }
 
     // init runs in an interrupt free section
@@ -59,7 +65,7 @@ const APP: () = {
         let (tx, rx) = serial.split();
 
         // Late resources
-        init::LateResources { TX: tx, RX: rx }
+        init::LateResources { TX: tx, RX: rx}
     }
 
     // idle may be interrupted by other interrupts/tasks in the system
@@ -71,23 +77,51 @@ const APP: () = {
     }
 
     // capacity sets the size of the input buffer (# outstanding messages)
-    #[task(resources = [TX], priority = 1, capacity = 128)]
-    fn rx(cx: rx::Context, data: u8) {
+    #[task(resources = [TX], priority = 2, capacity = 128)]
+    fn rx(cx: rx::Context,data:u8) {
         let tx = cx.resources.TX;
         tx.write(data).unwrap();
+    }
+
+    #[task(priority = 1,resources = [fel,corr])]
+    fn trace(cx: trace::Context, worked: bool,data:u8,){
+        match worked{
+            true => {
+                *cx.resources.corr +=1;
+                rprintln!("Ok {:?}", data);
+            }
+            false =>{
+                *cx.resources.fel +=1;
+                rprintln!("some error");
+            }
+        }
+        rprintln!("correct {}", cx.resources.corr);
+        rprintln!("errors {}", cx.resources.fel);
         rprintln!("data {}", data);
     }
 
     // Task bound to the USART2 interrupt.
-    #[task(binds = USART2,  priority = 2, resources = [RX], spawn = [rx])]
+    #[task(binds = USART2,  priority = 3, resources = [RX], spawn = [rx,trace])]
     fn usart2(cx: usart2::Context) {
         let rx = cx.resources.RX;
-        let data = rx.read().unwrap();
+        let data;
+        match (rx.read()) {
+            Ok(byte) => {
+                data = byte;
+                let result = cx.spawn.trace(true,byte);
+            }
+            Err(err) => {
+                data = 0;
+                rprintln!("Error {:?}", err);
+                cx.spawn.trace(false,data).unwrap();
+            }
+        }
         cx.spawn.rx(data).unwrap();
     }
 
     extern "C" {
         fn EXTI0();
+        fn USART1();
     }
 };
 
@@ -148,7 +182,7 @@ const APP: () = {
 //
 //    Were you able to crash it?
 //
-//    ** your answer here **
+//        Yes
 //
 //    Notice, the input tracing in `moserial` seems broken, and may loose data.
 //    So don't be alarmed if data is missing, its a GUI tool after all.