diff --git a/examples/bare5.rs b/examples/bare5.rs
index f3e63082833b990f4779a864fb5a4bb4646ea904..8d5b12289f0f3d46886ab5822808c360f9b7e5e3 100644
--- a/examples/bare5.rs
+++ b/examples/bare5.rs
@@ -128,24 +128,25 @@ fn main() {
 
 // user application
 fn idle(rcc: &mut RCC, gpioa: &mut GPIOA) {
+    let rcc_copy = &rcc;
     // power on GPIOA
-    let r = (*rcc).AHB1ENR.read(); // read
-    (*rcc).AHB1ENR.write(r | 1 << (0)); // set enable
+    let r = rcc.AHB1ENR.read(); // read
+    rcc.AHB1ENR.write(r | 1 << (0)); // set enable
 
     // configure PA5 as output
-    let r = (*gpioa).MODER.read() & !(0b11 << (5 * 2)); // read and mask
-    (*gpioa).MODER.write(r | 0b01 << (5 * 2)); // set output mode
+    let r = gpioa.MODER.read() & !(0b11 << (5 * 2)); // read and mask
+    gpioa.MODER.write(r | 0b01 << (5 * 2)); // set output mode
 
     // and alter the data output through the BSRR register
     // this is more efficient as the read register is not needed.
 
     loop {
         // set PA5 high
-        (*gpioa).BSRRH.write(1 << 5); // set bit, output hight (turn on led)
+        gpioa.BSRRH.write(1 << 5); // set bit, output hight (turn on led)
         wait(10_000);
 
         // set PA5 low
-        (*gpioa).BSRRL.write(1 << 5); // clear bit, output low (turn off led)
+        gpioa.BSRRL.write(1 << 5); // clear bit, output low (turn off led)
         wait(10_000);
     }
 }
@@ -157,8 +158,22 @@ fn idle(rcc: &mut RCC, gpioa: &mut GPIOA) {
 // provided by ST (and other companies). Actually, the file presesnted here is mostly a
 // cut/paste/replace of the stm32f40x.h, just Rustified.
 //
-// Here all peripheral access is unsafe, (as we are dereferencing raw pointers). In the code
-// we have fairly large unsafe blocks. Your task here is to
+// I this case we pass mutable pointer to the `idle`.
+//
+// Rewrite the accesses in the loop to use the data registerf directly (and make a read/modify/write).
+//
+// Run and see that the program behaves the same.
+//
+// commit your answers (bare5_1)
+//
+// 2.
+// Extend the read/write API with a modify, taking the address, field offsbet, field width, and value.
+//
+// Change the code into using your new API.
+//
+// Run and see that the program behaves the same.
+//
+// commit your answers (bare5_2)
 
 // As we are not using interrupts, we just register a dummy catch all handler
 #[link_section = ".vector_table.interrupts"]