diff --git a/src/main/kotlin/com/chylex/intellij/keyboardmaster/feature/vimNavigation/VimNavigationDispatcher.kt b/src/main/kotlin/com/chylex/intellij/keyboardmaster/feature/vimNavigation/VimNavigationDispatcher.kt
index e2f72bf..bfb3722 100644
--- a/src/main/kotlin/com/chylex/intellij/keyboardmaster/feature/vimNavigation/VimNavigationDispatcher.kt
+++ b/src/main/kotlin/com/chylex/intellij/keyboardmaster/feature/vimNavigation/VimNavigationDispatcher.kt
@@ -28,7 +28,9 @@ import javax.swing.KeyStroke
 internal open class VimNavigationDispatcher<T : JComponent>(final override val component: T, private val rootNode: KeyStrokeNode.Parent<VimNavigationDispatcher<T>>) : DumbAwareAction(), ComponentHolder {
 	companion object {
 		private val DISPOSABLE = ApplicationManager.getApplication().getService(PluginDisposableService::class.java)
-		private val ENTER_KEY = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0)
+		
+		@JvmStatic
+		protected val ENTER_KEY: KeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0)
 		
 		private fun findOriginalEnterAction(component: JComponent): WrappedAction {
 			var originalEnterAction: WrappedAction? = null
@@ -106,15 +108,23 @@ internal open class VimNavigationDispatcher<T : JComponent>(final override val c
 	}
 	
 	private fun handleEnterKeyPress(actionEvent: AnActionEvent, keyEvent: KeyEvent) {
+		handleEnterKeyPress { originalEnterAction.perform(actionEvent, keyEvent) }
+	}
+	
+	protected inline fun handleEnterKeyPress(originalAction: () -> Unit) {
 		if (isSearching.compareAndSet(true, false)) {
-			when (val supply = SpeedSearchSupply.getSupply(component)) {
-				is SpeedSearchBase<*> -> supply.hidePopup()
-				is SpeedSearch        -> supply.reset()
-			}
+			stopSpeedSearch()
 		}
 		else {
 			currentNode = rootNode
-			originalEnterAction.perform(actionEvent, keyEvent)
+			originalAction()
+		}
+	}
+	
+	protected open fun stopSpeedSearch() {
+		when (val supply = SpeedSearchSupply.getSupply(component)) {
+			is SpeedSearchBase<*> -> supply.hidePopup()
+			is SpeedSearch        -> supply.reset()
 		}
 	}
 	
diff --git a/src/main/kotlin/com/chylex/intellij/keyboardmaster/feature/vimNavigation/components/VimListNavigation.kt b/src/main/kotlin/com/chylex/intellij/keyboardmaster/feature/vimNavigation/components/VimListNavigation.kt
index da48d8e..a0e9357 100644
--- a/src/main/kotlin/com/chylex/intellij/keyboardmaster/feature/vimNavigation/components/VimListNavigation.kt
+++ b/src/main/kotlin/com/chylex/intellij/keyboardmaster/feature/vimNavigation/components/VimListNavigation.kt
@@ -8,6 +8,7 @@ import com.intellij.openapi.ui.getUserData
 import com.intellij.openapi.ui.putUserData
 import com.intellij.openapi.util.Key
 import com.intellij.ui.popup.WizardPopup
+import com.intellij.ui.popup.list.ListPopupImpl
 import com.intellij.ui.speedSearch.SpeedSearch
 import com.intellij.ui.speedSearch.SpeedSearchSupply
 import java.awt.event.ActionEvent
@@ -85,6 +86,24 @@ internal object VimListNavigation {
 			// WizardPopup only checks key codes against its input map, but key codes may be undefined for some characters.
 			popup.registerAction("KeyboardMaster-VimListNavigation-PauseSpeedSearch", KeyStroke.getKeyStroke(KeyEvent.CHAR_UNDEFINED, 0), pauseAction)
 			popup.registerAction("KeyboardMaster-VimListNavigation-PauseSpeedSearch", KeyStroke.getKeyStroke(KeyEvent.CHAR_UNDEFINED, KeyEvent.SHIFT_DOWN_MASK), pauseAction)
+			
+			if (popup is ListPopupImpl) {
+				popup.registerAction("KeyboardMaster-VimListNavigation-Enter", ENTER_KEY, object : AbstractAction() {
+					override fun actionPerformed(e: ActionEvent) {
+						handleEnterKeyPress { popup.handleSelect(true, createEnterEvent(e)) }
+					}
+					
+					private fun createEnterEvent(e: ActionEvent): KeyEvent {
+						return KeyEvent(component, KeyEvent.KEY_PRESSED, e.`when`, e.modifiers, KeyEvent.VK_ENTER, KeyEvent.CHAR_UNDEFINED)
+					}
+				})
+			}
+		}
+		
+		override fun stopSpeedSearch() {
+			val selectedValue = component.selectedValue
+			super.stopSpeedSearch()
+			component.setSelectedValue(selectedValue, true)
 		}
 		
 		private class PauseSpeedSearchAction(private val dispatcher: VimNavigationDispatcher<JList<*>>, private val speedSearch: SpeedSearch) : AbstractAction() {