diff --git a/src/completion.rs b/src/completion.rs
index 0c9ebbd416b34a1e78e31f6a402b49e7860e5fb4..9b656354b0be8febbafa53c775f5a70ab08e1818 100644
--- a/src/completion.rs
+++ b/src/completion.rs
@@ -159,11 +159,11 @@ pub fn extract_word<'l>(line: &'l str,
     }
 }
 
-pub fn longest_common_prefix(candidates: &[String]) -> Option<String> {
+pub fn longest_common_prefix(candidates: &[String]) -> Option<&str> {
     if candidates.is_empty() {
         return None;
     } else if candidates.len() == 1 {
-        return Some(candidates[0].clone());
+        return Some(&candidates[0]);
     }
     let mut longest_common_prefix = 0;
     'o: loop {
@@ -183,7 +183,7 @@ pub fn longest_common_prefix(candidates: &[String]) -> Option<String> {
     if longest_common_prefix == 0 {
         return None;
     }
-    Some(String::from(&candidates[0][0..longest_common_prefix]))
+    Some(&candidates[0][0..longest_common_prefix])
 }
 
 #[cfg(test)]
@@ -201,22 +201,31 @@ mod tests {
     #[test]
     pub fn longest_common_prefix() {
         let mut candidates = vec![];
-        let lcp = super::longest_common_prefix(&candidates);
-        assert!(lcp.is_none());
+        {
+            let lcp = super::longest_common_prefix(&candidates);
+            assert!(lcp.is_none());
+        }
 
-        let c1 = String::from("User");
+        let s = "User";
+        let c1 = String::from(s);
         candidates.push(c1.clone());
-        let lcp = super::longest_common_prefix(&candidates);
-        assert_eq!(Some(c1.clone()), lcp);
+        {
+            let lcp = super::longest_common_prefix(&candidates);
+            assert_eq!(Some(s), lcp);
+        }
 
         let c2 = String::from("Users");
         candidates.push(c2.clone());
-        let lcp = super::longest_common_prefix(&candidates);
-        assert_eq!(Some(c1), lcp);
+        {
+            let lcp = super::longest_common_prefix(&candidates);
+            assert_eq!(Some(s), lcp);
+        }
 
         let c3 = String::from("");
         candidates.push(c3.clone());
-        let lcp = super::longest_common_prefix(&candidates);
-        assert!(lcp.is_none());
+        {
+            let lcp = super::longest_common_prefix(&candidates);
+            assert!(lcp.is_none());
+        }
     }
 }
diff --git a/src/lib.rs b/src/lib.rs
index 1dca7924e4b67826a0f529302f47d0a437de3b43..661be724790c22424312e961cbdb0fa153bf82b5 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -595,7 +595,7 @@ fn complete_line<R: Read>(rdr: &mut tty::RawReader<R>,
         if let Some(lcp) = longest_common_prefix(&candidates) {
             // if we can extend the item, extend it and return to main loop
             if lcp.len() > s.line.pos() - start {
-                completer.update(&mut s.line, start, &lcp);
+                completer.update(&mut s.line, start, lcp);
                 try!(s.refresh_line());
                 return Ok(None);
             }