diff --git a/examples/borrow.rs b/examples/borrow.rs
index 3999f25758aa0e21c3fcd9a61f4b30d1729fe6ac..7e40ef0b4b7602100030e39753b6e14c2f36b25a 100644
--- a/examples/borrow.rs
+++ b/examples/borrow.rs
@@ -1,6 +1,6 @@
+fn f(a: &i32, b: &mut bool) {}
 fn main() {
     let mut a = 1;
-    let b = &mut a;
-    let c = &mut a;
-    let c: &mut i32 = b;
+    let mut b = false;
+    f(&a, &mut b)
 }
diff --git a/examples/borrow2.rs b/examples/borrow2.rs
new file mode 100644
index 0000000000000000000000000000000000000000..3adba68694e927e9b7ce5d5eb714cf065673ccf3
--- /dev/null
+++ b/examples/borrow2.rs
@@ -0,0 +1,5 @@
+fn f(a: &i32, b: &mut i32) {}
+fn main() {
+    let mut a = 1;
+    f(&a, &mut a)
+}
diff --git a/src/check.rs b/src/check.rs
index 9a0fac4274d84e961058562b5c1673e79faf52e2..97c8248f8d98a0f9b2306fee53442682fee15048 100644
--- a/src/check.rs
+++ b/src/check.rs
@@ -160,12 +160,12 @@ fn expr_type(
         // Convert Expr::Ref to Type::Ref
         Ref(ref_e) => {
             let t = expr_type(ref_e, fn_env, type_env, var_env)?;
-            trace!("ref_e {}, t {}", ref_e, t);
-            let t = match t {
-                Type::Mut(t) => t.clone(),
-                t => Box::new(t),
-            };
-            Ok(Type::Ref(t))
+            trace!("ref_e {}: type {}", ref_e, t);
+
+            let t = strip_mut(t);
+            trace!("after ref_e {}: type {}", ref_e, t);
+
+            Ok(Type::Ref(Box::new(t)))
         }
 
         // Convert Expr::Mut to Type::Mut
@@ -373,6 +373,7 @@ pub fn check_stmts(
     type_env: &TypeEnv,
     var_env: &mut VarEnv,
 ) -> Result<Type, Error> {
+    trace!("check_stmts: var_env: {:?}", var_env);
     var_env.push_empty_scope();
 
     let t = stmts
diff --git a/tests/test_check.rs b/tests/test_check.rs
index 2c5e71d0525b83df22eb024929b10933c193143a..484e5c8ef3aaba922a25438f891aca34fc9cddba 100644
--- a/tests/test_check.rs
+++ b/tests/test_check.rs
@@ -175,3 +175,8 @@ fn wip() {
 fn borrow() {
     check(&read_file::parse("examples/borrow.rs")).unwrap();
 }
+
+#[test]
+fn borrow2() {
+    check(&read_file::parse("examples/borrow2.rs")).unwrap();
+}