diff --git a/exercises/move_semantics/move_semantics6.rs b/exercises/move_semantics/move_semantics6.rs
new file mode 100644
index 0000000..457e7ae
--- /dev/null
+++ b/exercises/move_semantics/move_semantics6.rs
@@ -0,0 +1,25 @@
+// move_semantics6.rs
+// Make me compile! `rustlings hint move_semantics6` for hints
+// You can't change anything except adding or removing references
+
+// I AM NOT DONE
+
+fn main() {
+    let data = "Rust is great!".to_string();
+
+    get_char(data);
+
+    string_uppercase(&data);
+}
+
+// Should not take ownership
+fn get_char(data: String) -> char {
+    data.chars().last().unwrap()
+}
+
+// Should take ownership
+fn string_uppercase(mut data: &String) {
+    data = &data.to_uppercase();
+
+    println!("{}", data);
+}
diff --git a/info.toml b/info.toml
index fbe0d53..9430a16 100644
--- a/info.toml
+++ b/info.toml
@@ -237,6 +237,21 @@ in the book's section References and Borrowing':
 https://doc.rust-lang.org/book/ch04-02-references-and-borrowing.html#mutable-references.
 """
 
+[[exercises]]
+name = "move_semantics6"
+path = "exercises/move_semantics/move_semantics6.rs"
+mode = "compile"
+hint = """
+To find the answer, you can consult the book section "References and Borrowing":
+https://doc.rust-lang.org/stable/book/ch04-02-references-and-borrowing.html
+The first problem is that `get_char` is taking ownership of the string.
+So `data` is moved and can't be used for `string_uppercase`
+`data` is moved to `get_char` first, meaning that `string_uppercase` cannot manipulate the data.
+Once you've fixed that, `string_uppercase`'s function signature will also need to be adjusted.
+Can you figure out how?
+
+Another hint: it has to do with the `&` character."""
+
 # PRIMITIVE TYPES
 
 [[exercises]]