diff --git a/src/imp/buf/append.rs b/src/imp/buf/append.rs
index 13a11c89c9227b19ab4d3d852c7072546128301f..30f326c402321b4d91dea2ac7aa16b57ded9debd 100644
--- a/src/imp/buf/append.rs
+++ b/src/imp/buf/append.rs
@@ -99,7 +99,7 @@ impl MutBuf for AppendBuf {
     }
 
     #[inline]
-    unsafe fn mut_bytes<'a>(&'a mut self) -> &'a mut [u8] {
+    unsafe fn mut_bytes(&mut self) -> &mut [u8] {
         let wr = self.wr as usize;
         let cap = self.cap as usize;
         self.mem.mut_bytes_slice(wr, cap)
diff --git a/src/imp/buf/byte.rs b/src/imp/buf/byte.rs
index 2b1474411e3ade097c9a44b13b013c58c29b712b..5120fd2a2debef8c2db7aae7f55076f6ed2e38c6 100644
--- a/src/imp/buf/byte.rs
+++ b/src/imp/buf/byte.rs
@@ -133,7 +133,7 @@ impl Buf for ByteBuf {
     }
 
     #[inline]
-    fn bytes<'a>(&'a self) -> &'a [u8] {
+    fn bytes(&self) -> &[u8] {
         unsafe { &self.mem.bytes()[self.pos()..self.lim()] }
     }
 
@@ -212,7 +212,7 @@ impl MutByteBuf {
         cnt
     }
 
-    pub fn bytes<'a>(&'a self) -> &'a [u8] {
+    pub fn bytes(&self) -> &[u8] {
         unsafe { &self.buf.mem.bytes()[..self.buf.pos()] }
     }
 }
@@ -224,9 +224,9 @@ impl MutBuf for MutByteBuf {
 
     unsafe fn advance(&mut self, cnt: usize) {
         self.buf.advance(cnt)
-    }
 
-    unsafe fn mut_bytes<'a>(&'a mut self) -> &'a mut [u8] {
+    }
+    unsafe fn mut_bytes(&mut self) -> &mut [u8] {
         let pos = self.buf.pos();
         let lim = self.buf.lim();
         &mut self.buf.mem.mut_bytes()[pos..lim]
diff --git a/src/imp/buf/mod.rs b/src/imp/buf/mod.rs
index 53c6c0545cb96c8d9bef5d619e61dc64cc019000..7a82aa6ed83e0dd2cb431c42d936d859f8820670 100644
--- a/src/imp/buf/mod.rs
+++ b/src/imp/buf/mod.rs
@@ -201,7 +201,7 @@ pub trait MutBuf {
     /// length between 0 and `MutBuf::remaining()`.
     ///
     /// The returned byte slice may represent uninitialized memory.
-    unsafe fn mut_bytes<'a>(&'a mut self) -> &'a mut [u8];
+    unsafe fn mut_bytes(&mut self) -> &mut [u8];
 
     fn copy_from<S: Source>(&mut self, src: S) -> usize
             where Self: Sized {
@@ -617,7 +617,7 @@ impl<T: AsMut<[u8]> + AsRef<[u8]>> MutBuf for io::Cursor<T> {
     /// length between 0 and `MutBuf::remaining()`.
     ///
     /// The returned byte slice may represent uninitialized memory.
-    unsafe fn mut_bytes<'a>(&'a mut self) -> &'a mut [u8] {
+    unsafe fn mut_bytes(&mut self) -> &mut [u8] {
         let pos = self.position() as usize;
         &mut (self.get_mut().as_mut())[pos..]
     }
diff --git a/src/imp/buf/take.rs b/src/imp/buf/take.rs
index 69ab443a362ad88c7923ad62c05ab6df8a4af53c..e9f760ca1dd98378ad6b1123b099a41855e536cf 100644
--- a/src/imp/buf/take.rs
+++ b/src/imp/buf/take.rs
@@ -41,7 +41,7 @@ impl<T: Buf> Buf for Take<T> {
         cmp::min(self.inner.remaining(), self.limit)
     }
 
-    fn bytes<'a>(&'a self) -> &'a [u8] {
+    fn bytes(&self) -> &[u8] {
         &self.inner.bytes()[..self.limit]
     }
 
@@ -57,7 +57,7 @@ impl<T: MutBuf> MutBuf for Take<T> {
         cmp::min(self.inner.remaining(), self.limit)
     }
 
-    unsafe fn mut_bytes<'a>(&'a mut self) -> &'a mut [u8] {
+    unsafe fn mut_bytes(&mut self) -> &mut [u8] {
         &mut self.inner.mut_bytes()[..self.limit]
     }
 
diff --git a/src/lib.rs b/src/lib.rs
index 4169766665d3b299f2a1d01c55353647158913c8..cf153ea000354bd5626df52ef506fb73d8984982 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -14,6 +14,8 @@ pub use imp::buf::{Buf, MutBuf};
 pub use imp::bytes::Bytes;
 
 pub mod buf {
+    //! Traits, helpers, and type definitions for working with buffers.
+
     pub use imp::buf::{
         Source,
         Sink,