diff --git a/CHANGELOG.md b/CHANGELOG.md
index 84bbf87d29c..bc8a0a14ffb 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,9 @@
 # Change Log
 All notable changes to this project will be documented in this file.
 
+## 0.0.91 — 2016-09-28
+* Rustup to *rustc 1.13.0-nightly (d0623cf7b 2016-09-26)*
+
 ## 0.0.90 — 2016-09-09
 * Rustup to *rustc 1.13.0-nightly (f1f40f850 2016-09-09)*
 
diff --git a/Cargo.toml b/Cargo.toml
index 80f821a1b41..ce3a60c05be 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "clippy"
-version = "0.0.90"
+version = "0.0.91"
 authors = [
 	"Manish Goregaokar <manishsmail@gmail.com>",
 	"Andre Bogus <bogusandre@gmail.com>",
@@ -25,7 +25,7 @@ test = false
 
 [dependencies]
 # begin automatic update
-clippy_lints = { version = "0.0.90", path = "clippy_lints" }
+clippy_lints = { version = "0.0.91", path = "clippy_lints" }
 # end automatic update
 
 [dev-dependencies]
diff --git a/clippy_lints/Cargo.toml b/clippy_lints/Cargo.toml
index a7e863c2968..7d08732ee27 100644
--- a/clippy_lints/Cargo.toml
+++ b/clippy_lints/Cargo.toml
@@ -1,7 +1,7 @@
 [package]
 name = "clippy_lints"
 # begin automatic update
-version = "0.0.90"
+version = "0.0.91"
 # end automatic update
 authors = [
 	"Manish Goregaokar <manishsmail@gmail.com>",
diff --git a/clippy_lints/src/enum_glob_use.rs b/clippy_lints/src/enum_glob_use.rs
index 21439005475..fc15be2476a 100644
--- a/clippy_lints/src/enum_glob_use.rs
+++ b/clippy_lints/src/enum_glob_use.rs
@@ -4,7 +4,6 @@ use rustc::hir::*;
 use rustc::hir::def::Def;
 use rustc::hir::map::Node::NodeItem;
 use rustc::lint::{LateLintPass, LintPass, LateContext, LintArray, LintContext};
-use rustc::middle::cstore::DefLike;
 use syntax::ast::NodeId;
 use syntax::codemap::Span;
 use utils::span_lint;
@@ -61,7 +60,7 @@ impl EnumGlobUse {
                     } else {
                         let child = cx.sess().cstore.item_children(def.full_def().def_id());
                         if let Some(child) = child.first() {
-                            if let DefLike::DlDef(Def::Variant(..)) = child.def {
+                            if let Some(Def::Variant(..)) = cx.tcx.sess.cstore.describe_def(child.def_id) {
                                 span_lint(cx, ENUM_GLOB_USE, item.span, "don't use glob imports for enum variants");
                             }
                         }
diff --git a/clippy_lints/src/len_zero.rs b/clippy_lints/src/len_zero.rs
index 1d81b6dba22..68dff355332 100644
--- a/clippy_lints/src/len_zero.rs
+++ b/clippy_lints/src/len_zero.rs
@@ -1,6 +1,6 @@
 use rustc::lint::*;
 use rustc::hir::def_id::DefId;
-use rustc::ty::{self, MethodTraitItemId, ImplOrTraitItemId};
+use rustc::ty::{self, ImplOrTraitItem};
 use rustc::hir::*;
 use syntax::ast::{Lit, LitKind, Name};
 use syntax::codemap::{Span, Spanned};
@@ -184,23 +184,20 @@ fn check_len_zero(cx: &LateContext, span: Span, name: &Name, args: &[P<Expr>], l
 /// Check if this type has an `is_empty` method.
 fn has_is_empty(cx: &LateContext, expr: &Expr) -> bool {
     /// Get an `ImplOrTraitItem` and return true if it matches `is_empty(self)`.
-    fn is_is_empty(cx: &LateContext, id: &ImplOrTraitItemId) -> bool {
-        if let MethodTraitItemId(def_id) = *id {
-            if let ty::MethodTraitItem(ref method) = cx.tcx.impl_or_trait_item(def_id) {
-                method.name.as_str() == "is_empty" && method.fty.sig.skip_binder().inputs.len() == 1
-            } else {
-                false
-            }
+    fn is_is_empty(item: &ImplOrTraitItem) -> bool {
+        if let ty::MethodTraitItem(ref method) = *item {
+            method.name.as_str() == "is_empty" && method.fty.sig.skip_binder().inputs.len() == 1
         } else {
             false
         }
     }
 
     /// Check the inherent impl's items for an `is_empty(self)` method.
-    fn has_is_empty_impl(cx: &LateContext, id: &DefId) -> bool {
-        let impl_items = cx.tcx.impl_items.borrow();
-        cx.tcx.inherent_impls.borrow().get(id).map_or(false, |ids| {
-            ids.iter().any(|iid| impl_items.get(iid).map_or(false, |iids| iids.iter().any(|i| is_is_empty(cx, i))))
+    fn has_is_empty_impl(cx: &LateContext, id: DefId) -> bool {
+        cx.tcx.inherent_impls.borrow()[&id].iter().any(|imp| {
+            cx.tcx.impl_or_trait_items(*imp).iter().any(|item| {
+                is_is_empty(&cx.tcx.impl_or_trait_item(*item))
+            })
         })
     }
 
@@ -208,13 +205,12 @@ fn has_is_empty(cx: &LateContext, expr: &Expr) -> bool {
     match ty.sty {
         ty::TyTrait(_) => {
             cx.tcx
-              .trait_item_def_ids
-              .borrow()
-              .get(&ty.ty_to_def_id().expect("trait impl not found"))
-              .map_or(false, |ids| ids.iter().any(|i| is_is_empty(cx, i)))
+              .impl_or_trait_items(ty.ty_to_def_id().expect("trait impl not found"))
+              .iter()
+              .any(|item| is_is_empty(&cx.tcx.impl_or_trait_item(*item)))
         }
-        ty::TyProjection(_) => ty.ty_to_def_id().map_or(false, |id| has_is_empty_impl(cx, &id)),
-        ty::TyAdt(id, _) => has_is_empty_impl(cx, &id.did),
+        ty::TyProjection(_) => ty.ty_to_def_id().map_or(false, |id| has_is_empty_impl(cx, id)),
+        ty::TyAdt(id, _) => has_is_empty_impl(cx, id.did),
         ty::TyArray(..) | ty::TyStr => true,
         _ => false,
     }
diff --git a/clippy_lints/src/loops.rs b/clippy_lints/src/loops.rs
index 66ae404221b..8c033a2d4ab 100644
--- a/clippy_lints/src/loops.rs
+++ b/clippy_lints/src/loops.rs
@@ -755,7 +755,10 @@ impl<'v, 't> Visitor<'v> for VarVisitor<'v, 't> {
                     if let Some(def) = def_map.get(&seqexpr.id) {
                         match def.base_def {
                             Def::Local(..) | Def::Upvar(..) => {
-                                let extent = self.cx.tcx.region_maps.var_scope(def.base_def.var_id());
+                                let def_id = def.base_def.def_id();
+                                let node_id = self.cx.tcx.map.as_local_node_id(def_id).unwrap();
+
+                                let extent = self.cx.tcx.region_maps.var_scope(node_id);
                                 self.indexed.insert(seqvar.segments[0].name, Some(extent));
                                 return;  // no need to walk further
                             }
@@ -1040,7 +1043,8 @@ impl<'v, 't> Visitor<'v> for InitializeVisitor<'v, 't> {
 
 fn var_def_id(cx: &LateContext, expr: &Expr) -> Option<NodeId> {
     if let Some(path_res) = cx.tcx.def_map.borrow().get(&expr.id) {
-        if let Def::Local(_, node_id) = path_res.base_def {
+        if let Def::Local(def_id) = path_res.base_def {
+            let node_id = cx.tcx.map.as_local_node_id(def_id).expect("That DefId should be valid");
             return Some(node_id);
         }
     }
diff --git a/clippy_lints/src/misc.rs b/clippy_lints/src/misc.rs
index 5526c8660f4..afe9a6fee0b 100644
--- a/clippy_lints/src/misc.rs
+++ b/clippy_lints/src/misc.rs
@@ -443,7 +443,9 @@ fn in_attributes_expansion(cx: &LateContext, expr: &Expr) -> bool {
 /// Test whether `def` is a variable defined outside a macro.
 fn non_macro_local(cx: &LateContext, def: &def::Def) -> bool {
     match *def {
-        def::Def::Local(_, id) | def::Def::Upvar(_, id, _, _) => {
+        def::Def::Local(id) | def::Def::Upvar(id, _, _) => {
+            let id = cx.tcx.map.as_local_node_id(id).expect("That DefId should be valid");
+
             if let Some(span) = cx.tcx.map.opt_span(id) {
                 !in_macro(cx, span)
             } else {
diff --git a/clippy_lints/src/types.rs b/clippy_lints/src/types.rs
index b240fb6199c..897df4e6170 100644
--- a/clippy_lints/src/types.rs
+++ b/clippy_lints/src/types.rs
@@ -127,18 +127,21 @@ declare_lint! {
 fn check_let_unit(cx: &LateContext, decl: &Decl) {
     if let DeclLocal(ref local) = decl.node {
         let bindtype = &cx.tcx.pat_ty(&local.pat).sty;
-        if *bindtype == ty::TyTuple(&[]) {
-            if in_external_macro(cx, decl.span) || in_macro(cx, local.pat.span) {
-                return;
+        match *bindtype {
+            ty::TyTuple(slice) if slice.is_empty() => {
+                if in_external_macro(cx, decl.span) || in_macro(cx, local.pat.span) {
+                    return;
+                }
+                if higher::is_from_for_desugar(decl) {
+                    return;
+                }
+                span_lint(cx,
+                          LET_UNIT_VALUE,
+                          decl.span,
+                          &format!("this let-binding has unit value. Consider omitting `let {} =`",
+                                   snippet(cx, local.pat.span, "..")));
             }
-            if higher::is_from_for_desugar(decl) {
-                return;
-            }
-            span_lint(cx,
-                      LET_UNIT_VALUE,
-                      decl.span,
-                      &format!("this let-binding has unit value. Consider omitting `let {} =`",
-                               snippet(cx, local.pat.span, "..")));
+            _ => (),
         }
     }
 }
@@ -193,18 +196,23 @@ impl LateLintPass for UnitCmp {
         }
         if let ExprBinary(ref cmp, ref left, _) = expr.node {
             let op = cmp.node;
-            let sty = &cx.tcx.expr_ty(left).sty;
-            if *sty == ty::TyTuple(&[]) && op.is_comparison() {
-                let result = match op {
-                    BiEq | BiLe | BiGe => "true",
-                    _ => "false",
-                };
-                span_lint(cx,
-                          UNIT_CMP,
-                          expr.span,
-                          &format!("{}-comparison of unit values detected. This will always be {}",
-                                   op.as_str(),
-                                   result));
+            if op.is_comparison() {
+                let sty = &cx.tcx.expr_ty(left).sty;
+                match *sty {
+                    ty::TyTuple(slice) if slice.is_empty() => {
+                        let result = match op {
+                            BiEq | BiLe | BiGe => "true",
+                            _ => "false",
+                        };
+                        span_lint(cx,
+                                  UNIT_CMP,
+                                  expr.span,
+                                  &format!("{}-comparison of unit values detected. This will always be {}",
+                                           op.as_str(),
+                                           result));
+                    }
+                    _ => ()
+                }
             }
         }
     }
diff --git a/clippy_lints/src/utils/mod.rs b/clippy_lints/src/utils/mod.rs
index 2a86d0af380..0f5afde9508 100644
--- a/clippy_lints/src/utils/mod.rs
+++ b/clippy_lints/src/utils/mod.rs
@@ -1,9 +1,8 @@
 use reexport::*;
 use rustc::hir::*;
-use rustc::hir::def_id::DefId;
+use rustc::hir::def_id::{DefId, CRATE_DEF_INDEX};
 use rustc::hir::map::Node;
 use rustc::lint::{LintContext, LateContext, Level, Lint};
-use rustc::middle::cstore;
 use rustc::session::Session;
 use rustc::traits::Reveal;
 use rustc::traits;
@@ -216,13 +215,14 @@ pub fn match_path_ast(path: &ast::Path, segments: &[&str]) -> bool {
 
 /// Get the definition associated to a path.
 /// TODO: investigate if there is something more efficient for that.
-pub fn path_to_def(cx: &LateContext, path: &[&str]) -> Option<cstore::DefLike> {
+pub fn path_to_def(cx: &LateContext, path: &[&str]) -> Option<def::Def> {
     let cstore = &cx.tcx.sess.cstore;
 
     let crates = cstore.crates();
     let krate = crates.iter().find(|&&krate| cstore.crate_name(krate) == path[0]);
     if let Some(krate) = krate {
-        let mut items = cstore.crate_top_level_items(*krate);
+        let krate = DefId { krate: *krate, index: CRATE_DEF_INDEX };
+        let mut items = cstore.item_children(krate);
         let mut path_it = path.iter().skip(1).peekable();
 
         loop {
@@ -234,16 +234,10 @@ pub fn path_to_def(cx: &LateContext, path: &[&str]) -> Option<cstore::DefLike> {
             for item in &mem::replace(&mut items, vec![]) {
                 if item.name.as_str() == *segment {
                     if path_it.peek().is_none() {
-                        return Some(item.def);
+                        return cx.tcx.sess.cstore.describe_def(item.def_id);
                     }
 
-                    let def_id = match item.def {
-                        cstore::DefLike::DlDef(def) => def.def_id(),
-                        cstore::DefLike::DlImpl(def_id) => def_id,
-                        _ => panic!("Unexpected {:?}", item.def),
-                    };
-
-                    items = cstore.item_children(def_id);
+                    items = cstore.item_children(item.def_id);
                     break;
                 }
             }
@@ -261,7 +255,7 @@ pub fn get_trait_def_id(cx: &LateContext, path: &[&str]) -> Option<DefId> {
     };
 
     match def {
-        cstore::DlDef(def::Def::Trait(trait_id)) => Some(trait_id),
+        def::Def::Trait(trait_id) => Some(trait_id),
         _ => None,
     }
 }
diff --git a/tests/consts.rs b/tests/consts.rs
index 47ea4d874b6..4639e473935 100644
--- a/tests/consts.rs
+++ b/tests/consts.rs
@@ -9,7 +9,7 @@ extern crate syntax;
 use clippy_lints::consts::{constant_simple, Constant, FloatWidth};
 use rustc_const_math::ConstInt;
 use rustc::hir::*;
-use syntax::ast::{LitIntType, LitKind, StrStyle};
+use syntax::ast::{LitIntType, LitKind, NodeId, StrStyle};
 use syntax::codemap::{Spanned, COMMAND_LINE_SP};
 use syntax::parse::token::InternedString;
 use syntax::ptr::P;
@@ -24,7 +24,7 @@ fn spanned<T>(t: T) -> Spanned<T> {
 
 fn expr(n: Expr_) -> Expr {
     Expr {
-        id: 1,
+        id: NodeId::new(1),
         node: n,
         span: COMMAND_LINE_SP,
         attrs: ThinVec::new(),