diff --git a/use-based-refs/interpreter/src/eval.rs b/use-based-refs/interpreter/src/eval.rs
index 422ce90d43cb77fd7c787f7cc4cd9923e31ae5e4..f185d54a2ff155caed89233582f7c827636bd360 100644
--- a/use-based-refs/interpreter/src/eval.rs
+++ b/use-based-refs/interpreter/src/eval.rs
@@ -20,12 +20,9 @@ fn eval_ctx(ast: Node, ctx: &mut HashMap<String, Value>) -> Result<Value> {
             ctx.insert(ident.clone(), value);
             Value::Unit
         }
-        crate::Node::Ident(ident) => ctx
-            .get(&ident)
-            .ok_or(Error::Eval(format!(
-                "Ident error: `{ident}` is not defined"
-            )))?
-            .clone(),
+        crate::Node::Ident(ident) => *ctx.get(&ident).ok_or(Error::Eval(format!(
+            "Ident error: `{ident}` is not defined"
+        )))?,
     })
 }
 
diff --git a/use-based-refs/interpreter/src/lib.rs b/use-based-refs/interpreter/src/lib.rs
index 0c724e5d76cd08ab5815b077a223eb64ba7ef48e..4b2b8890012eaa24d745c3345b1b8f47a31f65ed 100644
--- a/use-based-refs/interpreter/src/lib.rs
+++ b/use-based-refs/interpreter/src/lib.rs
@@ -27,7 +27,7 @@ pub enum Node {
 }
 
 /// `λ_UR` value, result of a computation.
-#[derive(Debug, PartialEq, Eq, Clone)]
+#[derive(Debug, PartialEq, Eq, Clone, Copy)]
 pub enum Value {
     Num(u32),
     Unit,
diff --git a/use-based-refs/interpreter/src/typecheck.rs b/use-based-refs/interpreter/src/typecheck.rs
index 659533b6fb5e1e9a46086c04ab91bc1856b082a3..15c7186ba555d9db22456dfd988ffea93036c025 100644
--- a/use-based-refs/interpreter/src/typecheck.rs
+++ b/use-based-refs/interpreter/src/typecheck.rs
@@ -13,7 +13,7 @@ fn typecheck_ctx(ast: &Node, ctx: &mut HashMap<String, Type>) -> Result<Type> {
             // because a Seq contains at least one element
             .try_fold(Type::Diverging, |_, n| typecheck_ctx(n, ctx))?,
         Node::Let { ident, expr, ty } => {
-            let expr_ty = typecheck_ctx(&expr, ctx)?;
+            let expr_ty = typecheck_ctx(expr, ctx)?;
             // If we have some type annotation, it may not be different from the type of `expr`
             if let Some(true) = ty.map(|ty| ty != expr_ty) {
                 return Err(Error::Type(format!(
@@ -27,10 +27,9 @@ fn typecheck_ctx(ast: &Node, ctx: &mut HashMap<String, Type>) -> Result<Type> {
                 ))))?;
             Type::Unit
         }
-        Node::Ident(ident) => ctx
+        Node::Ident(ident) => *ctx
             .get(ident)
-            .ok_or(Error::Name(format!("`{ident}` is not defined")))?
-            .clone(),
+            .ok_or(Error::Name(format!("`{ident}` is not defined")))?,
     })
 }