diff --git a/src/libstd/hashmap.rs b/src/libstd/hashmap.rs
index 2d3e6431b0cd7..5654fa51a07c6 100644
--- a/src/libstd/hashmap.rs
+++ b/src/libstd/hashmap.rs
@@ -17,7 +17,7 @@
 
 use container::{Container, Mutable, Map, MutableMap, Set, MutableSet};
 use clone::Clone;
-use cmp::{Eq, Equiv};
+use cmp::{Eq, Equiv, TotalEq};
 use default::Default;
 use hash::Hash;
 use iter::{Iterator, FromIterator, Extendable};
@@ -513,6 +513,12 @@ impl<K:Hash + Eq,V:Eq> Eq for HashMap<K, V> {
     fn ne(&self, other: &HashMap<K, V>) -> bool { !self.eq(other) }
 }
 
+impl<K:Hash + Eq,V:Eq> TotalEq for HashMap<K, V> {
+  fn equals(&self, other: &HashMap<K, V>) -> bool {
+    self == other
+  }
+}
+
 impl<K:Hash + Eq + Clone,V:Clone> Clone for HashMap<K,V> {
     fn clone(&self) -> HashMap<K,V> {
         let mut new_map = HashMap::with_capacity(self.len());