diff --git a/src/imp/buf/block.rs b/src/imp/buf/block.rs
index b42ac8cc7d9cab099f29192c44cdf301aa4bed68..b6b7049e02593c173e51619da6db46df69a60807 100644
--- a/src/imp/buf/block.rs
+++ b/src/imp/buf/block.rs
@@ -145,7 +145,7 @@ impl BlockBuf {
 
             ret = Some(match ret.take() {
                 Some(curr) => {
-                    curr.concat(&segment)
+                    curr.concat(segment)
                 }
                 None => segment,
             });
diff --git a/src/imp/bytes/mod.rs b/src/imp/bytes/mod.rs
index e5edf8b49b8d918873eb65ca2022b42d135ba013..05c9efcc5d6fe8ea54d7c70675230824ee25ff5b 100644
--- a/src/imp/bytes/mod.rs
+++ b/src/imp/bytes/mod.rs
@@ -92,8 +92,14 @@ impl Bytes {
         }
     }
 
-    pub fn concat(&self, other: &Bytes) -> Bytes {
-        Rope::concat(self.clone(), other.clone())
+    /// Concatenate two `Bytes` together
+    pub fn concat(self, other: Bytes) -> Bytes {
+        Rope::concat(self, other)
+    }
+
+    /// Divide one `Bytes` into two at an index
+    pub fn split_at(self, mid: usize) -> (Bytes, Bytes) {
+        (self.slice_to(mid), self.slice_from(mid))
     }
 
     /// Returns a new ByteStr value containing the byte range between `begin`
diff --git a/src/lib.rs b/src/lib.rs
index 4172afb6eafd9465bb04015b3cf0fe2603802aaf..f8857fc314bb80e82f341b576ec4b3cfefd7af37 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -29,6 +29,7 @@ pub mod buf {
     pub use imp::buf::slice::SliceBuf;
     pub use imp::buf::append::AppendBuf;
     pub use imp::buf::block::{BlockBuf, BlockBufCursor};
+    pub use imp::buf::bound::{BoundBuf};
     pub use imp::buf::ring::RingBuf;
     pub use imp::buf::take::Take;
     pub use imp::bytes::BytesBuf;
diff --git a/test/test_rope.rs b/test/test_rope.rs
index e32dced57bd29b3b56830dc78385ed29e9cb0f59..8054b8be7151f46ffda762d4afcf88fde2ad0f60 100644
--- a/test/test_rope.rs
+++ b/test/test_rope.rs
@@ -57,7 +57,7 @@ pub fn test_rope_concat_two_byte_str() {
     let left = Bytes::from(TEST_BYTES_1);
     let right = Bytes::from(TEST_BYTES_2);
 
-    let both = left.concat(&right);
+    let both = left.concat(right);
 
     assert_eq!(both.len(), TEST_BYTES_1.len() + TEST_BYTES_2.len());
 
@@ -71,13 +71,13 @@ pub fn test_rope_concat_two_byte_str() {
 #[test]
 pub fn test_rope_equality() {
     let a = Bytes::from(&b"Mary had a little lamb, its fleece was white as snow; "[..])
-        .concat(&Bytes::from(&b"And everywhere that Mary went, the lamb was sure to go."[..]));
+        .concat(Bytes::from(&b"And everywhere that Mary went, the lamb was sure to go."[..]));
 
     let b = Bytes::from(&b"Mary had a little lamb, "[..])
-        .concat(&Bytes::from(&b"its fleece was white as snow; "[..]))
+        .concat(Bytes::from(&b"its fleece was white as snow; "[..]))
         .concat(
-            &Bytes::from(&b"And everywhere that Mary went, "[..])
-                .concat(&Bytes::from(&b"the lamb was sure to go."[..])));
+            Bytes::from(&b"And everywhere that Mary went, "[..])
+                .concat(Bytes::from(&b"the lamb was sure to go."[..])));
 
     assert_eq!(a, b);
 }