diff --git a/examples/concurrency.rs b/examples/concurrency.rs
index 77a6ebb6dfbee63d5e9bea6595d418a319e75499..45739ba6a7d364f61a6bf9619e1364ece6fd856d 100644
--- a/examples/concurrency.rs
+++ b/examples/concurrency.rs
@@ -9,15 +9,19 @@ extern crate cortex_m;
 extern crate cortex_m_rtfm as rtfm;
 extern crate f3;
 
-use cast::{usize, u8};
-use cortex_m::peripheral::SystClkSource;
+use f3::Serial;
 use f3::led::{self, LEDS};
-use f3::serial::Serial;
+use f3::prelude::*;
+use f3::serial::Event;
+use f3::time::Hertz;
+use cortex_m::peripheral::SystClkSource;
+use cast::{usize, u8};
 use rtfm::{app, Threshold};
 
 // CONFIGURATION
-const BAUD_RATE: u32 = 115_200; // bits per second
-const FREQUENCY: u32 = 4; // Hz
+const BAUD_RATE: Hertz = Hertz(115_200);
+const DIVISOR: u32 = 4;
+
 
 // TASKS & RESOURCES
 app! {
@@ -42,13 +46,14 @@ app! {
 
 // INITIALIZATION PHASE
 fn init(p: init::Peripherals, _r: init::Resources) {
-    let serial = Serial(&p.USART1);
+    led::init(p.GPIOE, p.RCC);
 
-    led::init(&p.GPIOE, &p.RCC);
-    serial.init(&p.GPIOA, &p.RCC, BAUD_RATE);
+    let serial = Serial(p.USART1);
+    serial.init(BAUD_RATE.invert(), Some(p.DMA1), p.GPIOA, p.RCC);
+    serial.listen(Event::Rxne);
 
     p.SYST.set_clock_source(SystClkSource::Core);
-    p.SYST.set_reload(8_000_000 / FREQUENCY);
+    p.SYST.set_reload(8_000_000 / DIVISOR);
     p.SYST.enable_interrupt();
     p.SYST.enable_counter();
 }
@@ -63,7 +68,7 @@ fn idle() -> ! {
 
 // TASKS
 fn loopback(_t: &mut Threshold, r: USART1_EXTI25::Resources) {
-    let serial = Serial(&r.USART1);
+    let serial = Serial(&**r.USART1);
 
     if let Ok(byte) = serial.read() {
         if serial.write(byte).is_err() {
diff --git a/examples/preemption.rs b/examples/preemption.rs
index 8e480d18612315660e86d4460439e1d37c6f19ff..2a193e698d11a3e6f6ac9faff4594bf091c38b27 100644
--- a/examples/preemption.rs
+++ b/examples/preemption.rs
@@ -20,14 +20,17 @@ extern crate heapless;
 
 use cast::{usize, u8};
 use cortex_m::peripheral::SystClkSource;
+use f3::Serial;
 use f3::led::{self, LEDS};
-use f3::serial::Serial;
+use f3::prelude::*;
+use f3::serial::Event;
 use heapless::Vec;
 use rtfm::{app, Resource, Threshold};
+use f3::time::Hertz;
 
 // CONFIGURATION
-const BAUD_RATE: u32 = 115_200; // bits per second
-const FREQUENCY: u32 = 4; // Hz
+const BAUD_RATE: Hertz = Hertz(115_200);
+const DIVISOR: u32 = 4;
 
 // TASK & RESOURCES
 app!{
@@ -57,10 +60,13 @@ app!{
 // INITIALIZATION PHASE
 fn init(p: init::Peripherals, _r: init::Resources) {
     led::init(&p.GPIOE, &p.RCC);
-    Serial(&p.USART1).init(&p.GPIOA, &p.RCC, BAUD_RATE);
+
+    let serial = Serial(p.USART1);
+    serial.init(BAUD_RATE.invert(), Some(p.DMA1), p.GPIOA, p.RCC);
+    serial.listen(Event::Rxne);
 
     p.SYST.set_clock_source(SystClkSource::Core);
-    p.SYST.set_reload(8_000_000 / FREQUENCY);
+    p.SYST.set_reload(8_000_000 / DIVISOR);
     p.SYST.enable_interrupt();
     p.SYST.enable_counter();
 }
@@ -75,7 +81,7 @@ fn idle() -> ! {
 
 // TASKS
 fn receive(t: &mut Threshold, mut r: USART1_EXTI25::Resources) {
-    let serial = Serial(&r.USART1);
+    let serial = Serial(&**r.USART1);
 
     let byte = serial.read().unwrap();
     if serial.write(byte).is_err() {
diff --git a/examples/resource.rs b/examples/resource.rs
index 3959ca49fd18ccb0963dc660a1273076f8de79f6..66f35efed610b7b7e7906459e91f8851b5864754 100644
--- a/examples/resource.rs
+++ b/examples/resource.rs
@@ -23,14 +23,17 @@ extern crate heapless;
 
 use cast::{usize, u8};
 use cortex_m::peripheral::SystClkSource;
+use f3::Serial;
 use f3::led::{self, LEDS};
-use f3::serial::Serial;
+use f3::prelude::*;
+use f3::serial::Event;
+use f3::time::Hertz;
 use heapless::Vec;
 use rtfm::{app, Threshold};
 
 // CONFIGURATION
-const BAUD_RATE: u32 = 115_200; // bits per second
-const FREQUENCY: u32 = 4; // Hz
+const BAUD_RATE: Hertz = Hertz(115_200);
+const DIVISOR: u32 = 4; 
 
 // TASKS & RESOURCES
 app! {
@@ -59,10 +62,14 @@ app! {
 // INITIALIZATION PHASE
 fn init(p: init::Peripherals, _r: init::Resources) {
     led::init(&p.GPIOE, &p.RCC);
-    Serial(&p.USART1).init(&p.GPIOA, &p.RCC, BAUD_RATE);
+
+    let serial = Serial(p.USART1);
+    serial.init(BAUD_RATE.invert(), Some(p.DMA1), p.GPIOA, p.RCC);
+    serial.listen(Event::Rxne);
+
 
     p.SYST.set_clock_source(SystClkSource::Core);
-    p.SYST.set_reload(8_000_000 / FREQUENCY);
+    p.SYST.set_reload(8_000_000 / DIVISOR);
     p.SYST.enable_interrupt();
     p.SYST.enable_counter();
 }
@@ -77,7 +84,7 @@ fn idle() -> ! {
 
 // TASKS
 fn receive(_t: &mut Threshold, r: USART1_EXTI25::Resources) {
-    let serial = Serial(&r.USART1);
+    let serial = Serial(&**r.USART1);
 
     let byte = serial.read().unwrap();
 
diff --git a/examples/roulette.rs b/examples/roulette.rs
index 346f894d454b01967022d5cddef8d6d9828dccec..c3b48c6a1df315a097cb071a74ab4bfe5e3812de 100644
--- a/examples/roulette.rs
+++ b/examples/roulette.rs
@@ -15,7 +15,7 @@ use f3::led::{self, LEDS};
 use rtfm::{app, Threshold};
 
 // CONFIGURATION
-const FREQUENCY: u32 = 4;
+const DIVISOR: u32 = 4;
 
 // TASKS & RESOURCES
 app! {
@@ -38,7 +38,7 @@ fn init(p: init::Peripherals, _r: init::Resources) {
     led::init(p.GPIOE, p.RCC);
 
     p.SYST.set_clock_source(SystClkSource::Core);
-    p.SYST.set_reload(8_000_000 / FREQUENCY);
+    p.SYST.set_reload(8_000_000 / DIVISOR);
     p.SYST.enable_interrupt();
     p.SYST.enable_counter();
 }