diff --git a/src/test/java/org/jetbrains/plugins/ideavim/ex/ExEntryTest.kt b/src/test/java/org/jetbrains/plugins/ideavim/ex/ExEntryTest.kt
index 073d8d575..b0c7cf946 100644
--- a/src/test/java/org/jetbrains/plugins/ideavim/ex/ExEntryTest.kt
+++ b/src/test/java/org/jetbrains/plugins/ideavim/ex/ExEntryTest.kt
@@ -617,13 +617,11 @@ class ExEntryTest : VimTestCase() {
   fun `test insert multi-line register`() {
     // parseKeys parses <CR> in a way that Register#getText doesn't like
     val keys = mutableListOf<KeyStroke>()
-    keys.addAll(injector.parser.parseKeys("hello"))
-    keys.add(KeyStroke.getKeyStroke('\n'))
-    keys.addAll(injector.parser.parseKeys("world"))
+    keys.addAll(injector.parser.parseKeys("hello<CR>world"))
     VimPlugin.getRegister().setKeys('c', keys)
 
     typeExInput(":<C-R>c")
-    assertExText("hello world")
+    assertExText("hello\u000Dworld")
   }
 
   // TODO: Test other special registers, if/when supported
diff --git a/src/test/java/org/jetbrains/plugins/ideavim/ex/implementation/commands/RegistersCommandTest.kt b/src/test/java/org/jetbrains/plugins/ideavim/ex/implementation/commands/RegistersCommandTest.kt
index a6675771a..94dfaffb7 100644
--- a/src/test/java/org/jetbrains/plugins/ideavim/ex/implementation/commands/RegistersCommandTest.kt
+++ b/src/test/java/org/jetbrains/plugins/ideavim/ex/implementation/commands/RegistersCommandTest.kt
@@ -109,7 +109,7 @@ class RegistersCommandTest : VimTestCase() {
     assertExOutput(
       """
         |Type Name Content
-        |  c  "a   ^IHello World^J^[
+        |  c  "a   ^IHello World^M^[
       """.trimMargin(),
     )
   }
diff --git a/src/testFixtures/kotlin/org/jetbrains/plugins/ideavim/VimTestCase.kt b/src/testFixtures/kotlin/org/jetbrains/plugins/ideavim/VimTestCase.kt
index 9f2f250fd..abae2b398 100644
--- a/src/testFixtures/kotlin/org/jetbrains/plugins/ideavim/VimTestCase.kt
+++ b/src/testFixtures/kotlin/org/jetbrains/plugins/ideavim/VimTestCase.kt
@@ -552,8 +552,11 @@ abstract class VimNoWriteActionTestCase {
   }
 
   protected fun assertRegister(char: Char, expected: String?) {
-    val actual = injector.registerGroup.getRegister(char)?.keys?.let(injector.parser::toKeyNotation)
-    assertEquals(expected, actual, "Wrong register contents")
+    if (expected == null) {
+      assertNull(injector.registerGroup.getRegister(char))
+    } else {
+      assertEquals(expected, injector.registerGroup.getRegister(char)?.printableString)
+    }
   }
 
   protected fun assertRegisterString(char: Char, expected: String?) {
diff --git a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/api/VimStringParserBase.kt b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/api/VimStringParserBase.kt
index bf0b4fc45..a18520c50 100644
--- a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/api/VimStringParserBase.kt
+++ b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/api/VimStringParserBase.kt
@@ -43,6 +43,8 @@ abstract class VimStringParserBase : VimStringParser {
       } else {
         (key.keyCode - 'A'.code + 1).toChar()
       }
+    } else if (key.keyChar == KeyEvent.CHAR_UNDEFINED && key.keyCode == KeyEvent.VK_ENTER) {
+      return '\u000D'
     }
     return key.keyCode.toChar()
   }