diff --git a/src/dma.rs b/src/dma.rs
index 6b9e5e4b6d9541197b18bec0af2e049cd64cbbae..2a5bdc8a31d1ee3c4610904a1d9d42a4c0235d6d 100644
--- a/src/dma.rs
+++ b/src/dma.rs
@@ -167,15 +167,53 @@ pub mod dma1 {
 
     pub struct Streams(pub S4<C0>, pub S5<C0>);
 
-    // impl  {
-    //                         pub fn listen(&mut self, event: Event) {
-    //                             match event {
-    //                                 Event::HalfTransfer => self.ccr().modify(|_, w| w.htie().set_bit()),
-    //                                 Event::TransferComplete => {
-    //                                     self.ccr().modify(|_, w| w.tcie().set_bit())
-    //                                 }
-    //                             }
-    //                         }
+    impl<CHANNEL> S5<CHANNEL> {
+        pub fn listen(&mut self, event: Event) {
+            match event {
+                Event::HalfTransfer => (), // self.ccr().modify(|_, w| w.htie().set_bit()),
+                Event::TransferComplete => {
+                    //           self.ccr().modify(|_, w| w.tcie().set_bit())
+                }
+            }
+        }
+    }
+
+    // hifcr 	high interrupt flag clear register
+    // hisr 	high interrupt status register
+    // lifcr 	low interrupt flag clear register
+    // lisr 	low interrupt status register
+
+    impl<CHANNEL> S5<CHANNEL> {
+        // sXcr 	stream x configuration register
+        pub(crate) fn cr(&mut self) -> &dma2::S5CR {
+            unsafe { &(*DMA1::ptr()).s5cr }
+        }
+
+        // sXfcr 	stream x FIFO control register
+        pub(crate) fn fcr(&mut self) -> &dma2::S5FCR {
+            unsafe { &(*DMA1::ptr()).s5fcr }
+        }
+
+        // sXm0ar 	stream x memory 0 address register
+        pub(crate) fn m0ar(&mut self) -> &dma2::S5M0AR {
+            unsafe { &(*DMA1::ptr()).s5m0ar }
+        }
+
+        // sXm1ar 	stream x memory 0 address register
+        pub(crate) fn m1ar(&mut self) -> &dma2::S5M1AR {
+            unsafe { &(*DMA1::ptr()).s5m1ar }
+        }
+
+        // sXndtr 	stream x number of data register
+        pub(crate) fn ndtr(&mut self) -> &dma2::S5NDTR {
+            unsafe { &(*DMA1::ptr()).s5ndtr }
+        }
+
+        // s0par 	stream x peripheral address register
+        pub(crate) fn par(&mut self) -> &dma2::S5PAR {
+            unsafe { &(*DMA1::ptr()).s5par }
+        }
+    }
 
     impl DmaExt for DMA1 {
         type Streams = Streams;