diff --git a/idea/resources/META-INF/plugin-common.xml b/idea/resources/META-INF/plugin-common.xml
index 4976371eba3..12b36368571 100644
--- a/idea/resources/META-INF/plugin-common.xml
+++ b/idea/resources/META-INF/plugin-common.xml
@@ -616,6 +616,7 @@
+
diff --git a/idea/src/org/jetbrains/kotlin/idea/editor/wordSelection/KotlinEscapedIdentifierSelectioner.kt b/idea/src/org/jetbrains/kotlin/idea/editor/wordSelection/KotlinEscapedIdentifierSelectioner.kt
new file mode 100644
index 00000000000..dc7e6c6f575
--- /dev/null
+++ b/idea/src/org/jetbrains/kotlin/idea/editor/wordSelection/KotlinEscapedIdentifierSelectioner.kt
@@ -0,0 +1,27 @@
+/*
+ * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
+ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
+ */
+
+package org.jetbrains.kotlin.idea.editor.wordSelection
+
+import com.intellij.codeInsight.editorActions.ExtendWordSelectionHandlerBase
+import com.intellij.openapi.editor.Editor
+import com.intellij.openapi.util.TextRange
+import com.intellij.psi.PsiElement
+import org.jetbrains.kotlin.lexer.KtTokens
+import org.jetbrains.kotlin.psi.psiUtil.endOffset
+import org.jetbrains.kotlin.psi.psiUtil.startOffset
+
+class KotlinEscapedIdentifierSelectioner : ExtendWordSelectionHandlerBase() {
+ override fun canSelect(e: PsiElement) = e.node.elementType == KtTokens.IDENTIFIER
+
+ override fun select(e: PsiElement, editorText: CharSequence, cursorOffset: Int, editor: Editor): List? {
+ val text = e.text
+ if (!text.startsWith('`') || !text.endsWith('`')) return null
+ val start = e.startOffset + 1
+ val end = e.endOffset - 1
+ if (start >= end) return null
+ return listOf(TextRange(start, end))
+ }
+}
diff --git a/idea/testData/wordSelection/EscapedIdentifier/0.kt b/idea/testData/wordSelection/EscapedIdentifier/0.kt
new file mode 100644
index 00000000000..f49dba2e2fa
--- /dev/null
+++ b/idea/testData/wordSelection/EscapedIdentifier/0.kt
@@ -0,0 +1,2 @@
+fun `my function`() {
+}
\ No newline at end of file
diff --git a/idea/testData/wordSelection/EscapedIdentifier/1.kt b/idea/testData/wordSelection/EscapedIdentifier/1.kt
new file mode 100644
index 00000000000..b2795055172
--- /dev/null
+++ b/idea/testData/wordSelection/EscapedIdentifier/1.kt
@@ -0,0 +1,2 @@
+fun `my function`() {
+}
\ No newline at end of file
diff --git a/idea/testData/wordSelection/EscapedIdentifier/2.kt b/idea/testData/wordSelection/EscapedIdentifier/2.kt
new file mode 100644
index 00000000000..e1b833a830a
--- /dev/null
+++ b/idea/testData/wordSelection/EscapedIdentifier/2.kt
@@ -0,0 +1,2 @@
+fun `my function`() {
+}
\ No newline at end of file
diff --git a/idea/testData/wordSelection/EscapedIdentifier/3.kt b/idea/testData/wordSelection/EscapedIdentifier/3.kt
new file mode 100644
index 00000000000..cb85160a157
--- /dev/null
+++ b/idea/testData/wordSelection/EscapedIdentifier/3.kt
@@ -0,0 +1,2 @@
+fun `my function`() {
+}
\ No newline at end of file
diff --git a/idea/tests/org/jetbrains/kotlin/idea/WordSelectionTest.java b/idea/tests/org/jetbrains/kotlin/idea/WordSelectionTest.java
index 88aae1830b2..899244ecb32 100644
--- a/idea/tests/org/jetbrains/kotlin/idea/WordSelectionTest.java
+++ b/idea/tests/org/jetbrains/kotlin/idea/WordSelectionTest.java
@@ -135,6 +135,8 @@ public class WordSelectionTest extends KotlinLightCodeInsightFixtureTestCase {
public void testClassMember4() { doTest(); }
public void testClassMember5() { doTest(); }
+ public void testEscapedIdentifier() { doTest(); }
+
private void doTest() {
String dirName = getTestName(false);