diff --git a/crates/ra_hir/src/code_model_api.rs b/crates/ra_hir/src/code_model_api.rs
index 691cd57982b..53e84429c3e 100644
--- a/crates/ra_hir/src/code_model_api.rs
+++ b/crates/ra_hir/src/code_model_api.rs
@@ -24,7 +24,7 @@ use crate::{
 /// root module.
 #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
 pub struct Crate {
-    pub crate_id: CrateId,
+    pub(crate) crate_id: CrateId,
 }
 
 #[derive(Debug)]
diff --git a/crates/ra_ide_api/src/impls.rs b/crates/ra_ide_api/src/impls.rs
index 16a05758ad1..469d56d63ac 100644
--- a/crates/ra_ide_api/src/impls.rs
+++ b/crates/ra_ide_api/src/impls.rs
@@ -14,9 +14,8 @@ pub(crate) fn goto_implementation(
     let file = db.parse(position.file_id);
     let syntax = file.syntax();
 
-    let krate_id = db.crate_for(position.file_id).pop()?;
-    let krate = hir::Crate { crate_id: krate_id };
     let module = source_binder::module_from_position(db, position)?;
+    let krate = module.krate(db)?;
 
     let node = find_node_at_offset::<ast::NominalDef>(syntax, position.offset)?;
     let ty = match node.kind() {