diff --git a/src/comp/middle/typeck.rs b/src/comp/middle/typeck.rs
index afafde4e916..ee3ca30095b 100644
--- a/src/comp/middle/typeck.rs
+++ b/src/comp/middle/typeck.rs
@@ -52,16 +52,10 @@ import middle::tstate::ann::ts_ann;
 type ty_table = hashmap[ast::def_id, ty::t];
 type fn_purity_table = hashmap[ast::def_id, ast::purity];
 
-type unify_cache_entry = tup(ty::t,ty::t,vec[mutable ty::t]);
-type unify_cache = hashmap[unify_cache_entry,ty::unify::result];
-
 type obj_info = rec(vec[ast::obj_field] obj_fields, ast::def_id this_obj);
 
 type crate_ctxt = rec(mutable vec[obj_info] obj_infos,
                       @fn_purity_table fn_purity_table,
-                      unify_cache unify_cache,
-                      mutable uint cache_hits,
-                      mutable uint cache_misses,
                       ty::ctxt tcx);
 
 type fn_ctxt = rec(ty::t ret_ty,
@@ -820,22 +814,9 @@ mod collect {
 mod unify {
     fn simple(&@fn_ctxt fcx, &ty::t expected, &ty::t actual)
             -> ty::unify::result {
-        /*auto cache_key = tup(expected, actual, param_substs);
-        alt (fcx.ccx.unify_cache.find(cache_key)) {
-            case (some(?r)) {
-                fcx.ccx.cache_hits += 1u;
-                ret r;
-            }
-            case (none) {
-                fcx.ccx.cache_misses += 1u;
-            }
-        }*/
-
         auto result = ty::unify::unify(expected, actual, fcx.var_bindings,
                                        fcx.ccx.tcx);
 
-        //fcx.ccx.unify_cache.insert(cache_key, result);
-
         // FIXME: Shouldn't be necessary, but is until we remove pushdown.
         alt (result) {
             case (ures_ok(?typ)) {
@@ -2856,37 +2837,6 @@ fn check_item(@crate_ctxt ccx, &@ast::item it) {
     }
 }
 
-// Utilities for the unification cache
-
-fn hash_unify_cache_entry(&unify_cache_entry uce) -> uint {
-    auto h = ty::hash_ty(uce._0);
-    h += h << 5u + ty::hash_ty(uce._1);
-
-    auto i = 0u;
-    auto tys_len = vec::len(uce._2);
-    while (i < tys_len) {
-        h += h << 5u + ty::hash_ty(uce._2.(i));
-        i += 1u;
-    }
-
-    ret h;
-}
-
-fn eq_unify_cache_entry(&unify_cache_entry a, &unify_cache_entry b) -> bool {
-    if (!ty::eq_ty(a._0, b._0) || !ty::eq_ty(a._1, b._1)) { ret false; }
-
-    auto i = 0u;
-    auto tys_len = vec::len(a._2);
-    if (vec::len(b._2) != tys_len) { ret false; }
-
-    while (i < tys_len) {
-        if (!ty::eq_ty(a._2.(i), b._2.(i))) { ret false; }
-        i += 1u;
-    }
-
-    ret true;
-}
-
 fn mk_fn_purity_table(&@ast::crate crate) -> @fn_purity_table {
     auto res = @new_def_hash[ast::purity]();
 
@@ -2914,26 +2864,16 @@ fn check_crate(&ty::ctxt tcx, &@ast::crate crate) {
 
     let vec[obj_info] obj_infos = [];
 
-    auto hasher = hash_unify_cache_entry;
-    auto eqer = eq_unify_cache_entry;
-    auto unify_cache =
-        map::mk_hashmap[unify_cache_entry,ty::unify::result](hasher, eqer);
     auto fpt = mk_fn_purity_table(crate); // use a variation on collect
 
     auto ccx = @rec(mutable obj_infos=obj_infos,
                     fn_purity_table=fpt,
-                    unify_cache=unify_cache,
-                    mutable cache_hits=0u,
-                    mutable cache_misses=0u,
                     tcx=tcx);
 
     auto visit = rec(visit_item_pre = bind check_item(ccx, _)
                      with walk::default_visitor());
 
     walk::walk_crate(visit, *crate);
-
-    log #fmt("cache hit rate: %u/%u", ccx.cache_hits,
-             ccx.cache_hits + ccx.cache_misses);
 }
 
 //