diff --git a/examples/rtic_bare5.rs b/examples/rtic_bare5.rs
index 5686e1b7a24c32db2f45dd120b87c33605af10ee..ce321696bb4376d82c20c370237539c99f061ca4 100644
--- a/examples/rtic_bare5.rs
+++ b/examples/rtic_bare5.rs
@@ -59,6 +59,16 @@ mod stm32f40x {
         #[inline(always)]
         pub fn modify(&self, offset: u8, width: u8, value: u32) {
             // your code here
+            let current = self.read();
+            let mut mask = 0;
+            for _ in 0..width {
+                mask = (mask << 1 | 1);
+            }
+            //mask = mask << offset;
+            let test = (current & !(mask << offset));
+            let test2 = ((value & (mask))<<offset);
+            let modified = (current & !(mask << offset)) | ((value & (mask))<<offset);
+            self.write(modified);
         }
     }
 
@@ -170,14 +180,18 @@ const APP: () = {
         let gpioa = unsafe { &mut *GPIOA::get() }; // get the reference to GPIOA in memory
 
         // 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
+
+        rcc.AHB1ENR.modify(0, 1, 1);
 
         // 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
+
+        gpioa.MODER.modify(5*2, 2, 0b01);
 
-        // test_modify();
+        //test_modify();
 
         loop {
             // set PA5 high
@@ -241,6 +255,6 @@ const APP: () = {
 //    What if we could automatically generate that from Vendors specifications (SVD files)?
 //    Wouldn't that be great?
 //
-//    ** your answer here **
+//    Yes.
 //
 //    Commit your answers (bare5_2)