diff --git a/src/libextra/uuid.rs b/src/libextra/uuid.rs
index 9e48c3e7a73ed..cf40a59a8c507 100644
--- a/src/libextra/uuid.rs
+++ b/src/libextra/uuid.rs
@@ -65,6 +65,7 @@ use std::rand;
 use std::rand::Rng;
 use std::cmp::Eq;
 use std::cast::{transmute,transmute_copy};
+use std::to_bytes::{IterBytes, Cb};
 
 use serialize::{Encoder, Encodable, Decoder, Decodable};
 
@@ -104,6 +105,11 @@ pub struct Uuid {
     /// The 128-bit number stored in 16 bytes
     bytes: UuidBytes
 }
+impl IterBytes for Uuid {
+    fn iter_bytes(&self, _: bool, f: Cb) -> bool {
+        f(self.bytes.slice_from(0))
+    }
+}
 
 /// A UUID stored as fields (identical to UUID, used only for conversions)
 struct UuidFields {
@@ -796,6 +802,17 @@ mod test {
         let u2 = Decodable::decode(&mut ebml::reader::Decoder(doc));
         assert_eq!(u, u2);
     }
+
+    #[test]
+    fn test_iterbytes_impl_for_uuid() {
+        use std::hashmap::HashSet;
+        let mut set = HashSet::new();
+        let id1 = Uuid::new_v4();
+        let id2 = Uuid::new_v4();
+        set.insert(id1);
+        assert!(set.contains(&id1));
+        assert!(!set.contains(&id2));
+    }
 }
 
 #[cfg(test)]