diff --git a/src/main/java/com/maddyhome/idea/vim/VimTypedActionHandler.kt b/src/main/java/com/maddyhome/idea/vim/VimTypedActionHandler.kt
index fc499c402..76bbf073a 100644
--- a/src/main/java/com/maddyhome/idea/vim/VimTypedActionHandler.kt
+++ b/src/main/java/com/maddyhome/idea/vim/VimTypedActionHandler.kt
@@ -16,7 +16,6 @@ import com.intellij.openapi.editor.actionSystem.TypedActionHandlerEx
 import com.intellij.openapi.progress.ProcessCanceledException
 import com.maddyhome.idea.vim.api.globalOptions
 import com.maddyhome.idea.vim.api.injector
-import com.maddyhome.idea.vim.helper.EditorDataContext
 import com.maddyhome.idea.vim.helper.inInsertMode
 import com.maddyhome.idea.vim.helper.isIdeaVimDisabledHere
 import com.maddyhome.idea.vim.key.KeyHandlerKeeper
@@ -76,7 +75,7 @@ class VimTypedActionHandler(origHandler: TypedActionHandler) : TypedActionHandle
       val modifiers = if (charTyped == ' ' && VimKeyListener.isSpaceShift) KeyEvent.SHIFT_DOWN_MASK else 0
       val keyStroke = KeyStroke.getKeyStroke(charTyped, modifiers)
       val startTime = if (traceTime) System.currentTimeMillis() else null
-      handler.handleKey(editor.vim, keyStroke, EditorDataContext.init(editor, context).vim)
+      handler.handleKey(editor.vim, keyStroke, injector.executionContextManager.onEditor(editor.vim, context.vim))
       if (startTime != null) {
         val duration = System.currentTimeMillis() - startTime
         LOG.info("VimTypedAction '$charTyped': $duration ms")
diff --git a/src/main/java/com/maddyhome/idea/vim/action/VimShortcutKeyAction.kt b/src/main/java/com/maddyhome/idea/vim/action/VimShortcutKeyAction.kt
index 5863ed5a8..3df3cc94a 100644
--- a/src/main/java/com/maddyhome/idea/vim/action/VimShortcutKeyAction.kt
+++ b/src/main/java/com/maddyhome/idea/vim/action/VimShortcutKeyAction.kt
@@ -28,7 +28,6 @@ import com.maddyhome.idea.vim.VimPlugin
 import com.maddyhome.idea.vim.api.globalOptions
 import com.maddyhome.idea.vim.api.injector
 import com.maddyhome.idea.vim.api.options
-import com.maddyhome.idea.vim.helper.EditorDataContext
 import com.maddyhome.idea.vim.helper.EditorHelper
 import com.maddyhome.idea.vim.helper.HandlerInjector
 import com.maddyhome.idea.vim.helper.inInsertMode
@@ -69,7 +68,11 @@ class VimShortcutKeyAction : AnAction(), DumbAware/*, LightEditCompatible*/ {
       // Should we use HelperKt.getTopLevelEditor(editor) here, as we did in former EditorKeyHandler?
       try {
         val start = if (traceTime) System.currentTimeMillis() else null
-        KeyHandler.getInstance().handleKey(editor.vim, keyStroke, EditorDataContext.init(editor, e.dataContext).vim)
+        KeyHandler.getInstance().handleKey(
+          editor.vim,
+          keyStroke,
+          injector.executionContextManager.onEditor(editor.vim, e.dataContext.vim)
+        )
         if (start != null) {
           val duration = System.currentTimeMillis() - start
           LOG.info("VimShortcut update '$keyStroke': $duration ms")
diff --git a/src/main/java/com/maddyhome/idea/vim/extension/VimExtensionFacade.kt b/src/main/java/com/maddyhome/idea/vim/extension/VimExtensionFacade.kt
index 94201fbfc..79f0c9b4b 100644
--- a/src/main/java/com/maddyhome/idea/vim/extension/VimExtensionFacade.kt
+++ b/src/main/java/com/maddyhome/idea/vim/extension/VimExtensionFacade.kt
@@ -15,12 +15,12 @@ import com.maddyhome.idea.vim.VimPlugin
 import com.maddyhome.idea.vim.action.change.Extension
 import com.maddyhome.idea.vim.api.ImmutableVimCaret
 import com.maddyhome.idea.vim.api.VimCaret
+import com.maddyhome.idea.vim.api.injector
 import com.maddyhome.idea.vim.command.MappingMode
 import com.maddyhome.idea.vim.command.SelectionType
 import com.maddyhome.idea.vim.common.CommandAlias
 import com.maddyhome.idea.vim.common.CommandAliasHandler
 import com.maddyhome.idea.vim.helper.CommandLineHelper
-import com.maddyhome.idea.vim.helper.EditorDataContext
 import com.maddyhome.idea.vim.helper.TestInputModel
 import com.maddyhome.idea.vim.helper.vimStateMachine
 import com.maddyhome.idea.vim.key.MappingOwner
@@ -130,8 +130,8 @@ object VimExtensionFacade {
    */
   @JvmStatic
   fun executeNormalWithoutMapping(keys: List<KeyStroke>, editor: Editor) {
-    val context = EditorDataContext.init(editor)
-    keys.forEach { KeyHandler.getInstance().handleKey(editor.vim, it, context.vim, false, false) }
+    val context = injector.executionContextManager.onEditor(editor.vim)
+    keys.forEach { KeyHandler.getInstance().handleKey(editor.vim, it, context, false, false) }
   }
 
   /** Returns a single key stroke from the user input similar to 'getchar()'. */
diff --git a/src/main/java/com/maddyhome/idea/vim/extension/replacewithregister/ReplaceWithRegister.kt b/src/main/java/com/maddyhome/idea/vim/extension/replacewithregister/ReplaceWithRegister.kt
index f39e66b39..55f0da4b6 100644
--- a/src/main/java/com/maddyhome/idea/vim/extension/replacewithregister/ReplaceWithRegister.kt
+++ b/src/main/java/com/maddyhome/idea/vim/extension/replacewithregister/ReplaceWithRegister.kt
@@ -28,7 +28,6 @@ import com.maddyhome.idea.vim.extension.VimExtensionFacade.executeNormalWithoutM
 import com.maddyhome.idea.vim.extension.VimExtensionFacade.putKeyMappingIfMissing
 import com.maddyhome.idea.vim.extension.VimExtensionFacade.setOperatorFunction
 import com.maddyhome.idea.vim.group.visual.VimSelection
-import com.maddyhome.idea.vim.helper.EditorDataContext
 import com.maddyhome.idea.vim.helper.editorMode
 import com.maddyhome.idea.vim.helper.exitVisualMode
 import com.maddyhome.idea.vim.helper.mode
@@ -169,7 +168,7 @@ class ReplaceWithRegister : VimExtension {
       ClipboardOptionHelper.IdeaputDisabler().use {
         VimPlugin.getPut().putText(
           IjVimEditor(editor),
-          IjEditorExecutionContext(EditorDataContext.init(editor)),
+          injector.executionContextManager.onEditor(editor.vim),
           putData,
           operatorArguments = OperatorArguments(
             editor.vimStateMachine?.isOperatorPending ?: false,
diff --git a/src/main/java/com/maddyhome/idea/vim/group/EditorGroup.java b/src/main/java/com/maddyhome/idea/vim/group/EditorGroup.java
index 8a2567cc1..ccf16e291 100644
--- a/src/main/java/com/maddyhome/idea/vim/group/EditorGroup.java
+++ b/src/main/java/com/maddyhome/idea/vim/group/EditorGroup.java
@@ -13,17 +13,20 @@ import com.intellij.openapi.application.ApplicationManager;
 import com.intellij.openapi.components.PersistentStateComponent;
 import com.intellij.openapi.components.State;
 import com.intellij.openapi.components.Storage;
-import com.intellij.openapi.editor.*;
+import com.intellij.openapi.editor.Editor;
+import com.intellij.openapi.editor.EditorGutter;
+import com.intellij.openapi.editor.EditorSettings;
+import com.intellij.openapi.editor.LineNumberConverter;
 import com.intellij.openapi.editor.event.CaretEvent;
 import com.intellij.openapi.editor.event.CaretListener;
 import com.intellij.openapi.editor.ex.EditorGutterComponentEx;
 import com.intellij.openapi.project.Project;
 import com.maddyhome.idea.vim.KeyHandler;
 import com.maddyhome.idea.vim.VimPlugin;
+import com.maddyhome.idea.vim.api.ExecutionContext;
 import com.maddyhome.idea.vim.api.VimEditor;
 import com.maddyhome.idea.vim.api.VimEditorGroup;
 import com.maddyhome.idea.vim.helper.*;
-import com.maddyhome.idea.vim.newapi.IjEditorExecutionContext;
 import com.maddyhome.idea.vim.newapi.IjVimEditor;
 import com.maddyhome.idea.vim.options.LocalOptionChangeListener;
 import com.maddyhome.idea.vim.options.OptionConstants;
@@ -214,7 +217,8 @@ public class EditorGroup implements PersistentStateComponent<Element>, VimEditor
     if (!EditorHelper.isFileEditor(editor) &&
         editor.getDocument().isWritable() &&
         !CommandStateHelper.inInsertMode(editor)) {
-      VimPlugin.getChange().insertBeforeCursor(new IjVimEditor(editor), new IjEditorExecutionContext(EditorDataContext.init(editor, null)));
+      ExecutionContext.Editor context = injector.getExecutionContextManager().onEditor(new IjVimEditor(editor), null);
+      VimPlugin.getChange().insertBeforeCursor(new IjVimEditor(editor), context);
       KeyHandler.getInstance().reset(new IjVimEditor(editor));
     }
     updateCaretsVisualAttributes(editor);
diff --git a/src/main/java/com/maddyhome/idea/vim/group/SearchGroup.java b/src/main/java/com/maddyhome/idea/vim/group/SearchGroup.java
index b2ccab533..23adc127f 100644
--- a/src/main/java/com/maddyhome/idea/vim/group/SearchGroup.java
+++ b/src/main/java/com/maddyhome/idea/vim/group/SearchGroup.java
@@ -803,7 +803,7 @@ public class SearchGroup extends VimSearchGroupBase implements PersistentStateCo
             if (expression != null) {
               try {
               match = expression
-                .evaluate(editor, new IjEditorExecutionContext(EditorDataContext.init(((IjVimEditor) editor).getEditor(), null)), parent)
+                .evaluate(editor, injector.getExecutionContextManager().onEditor(editor, null), parent)
                 .toInsertableString();
               } catch (Exception e) {
                 exceptions.add((ExException) e);
@@ -979,7 +979,8 @@ public class SearchGroup extends VimSearchGroupBase implements PersistentStateCo
     else {
       // XXX: The Ex entry panel is used only for UI here, its logic might be inappropriate for this method
       final ExEntryPanel exEntryPanel = ExEntryPanel.getInstanceWithoutShortcuts();
-      exEntryPanel.activate(editor, EditorDataContext.init(editor, null), MessageHelper.message("replace.with.0", match), "", 1);
+      ExecutionContext.Editor context = injector.getExecutionContextManager().onEditor(new IjVimEditor(editor), null);
+      exEntryPanel.activate(editor, ((IjEditorExecutionContext)context).getContext(), MessageHelper.message("replace.with.0", match), "", 1);
       new IjVimCaret(caret).moveToOffset(startoff);
       ModalEntry.INSTANCE.activate(new IjVimEditor(editor), keyStrokeProcessor);
       exEntryPanel.deactivate(true, false);
diff --git a/src/main/java/com/maddyhome/idea/vim/group/visual/IdeaSelectionControl.kt b/src/main/java/com/maddyhome/idea/vim/group/visual/IdeaSelectionControl.kt
index bf1df6341..eab2e379c 100644
--- a/src/main/java/com/maddyhome/idea/vim/group/visual/IdeaSelectionControl.kt
+++ b/src/main/java/com/maddyhome/idea/vim/group/visual/IdeaSelectionControl.kt
@@ -116,7 +116,7 @@ object IdeaSelectionControl {
         .enterSelectMode(editor.vim, VimPlugin.getVisualMotion().autodetectVisualSubmode(editor.vim))
       VimStateMachine.Mode.INSERT -> VimPlugin.getChange().insertBeforeCursor(
         editor.vim,
-        EditorDataContext.init(editor).vim
+        injector.executionContextManager.onEditor(editor.vim)
       )
       VimStateMachine.Mode.COMMAND -> Unit
       else -> error("Unexpected mode: $mode")
diff --git a/src/main/java/com/maddyhome/idea/vim/helper/CommandLineHelper.kt b/src/main/java/com/maddyhome/idea/vim/helper/CommandLineHelper.kt
index 974cdc264..1c8432c30 100644
--- a/src/main/java/com/maddyhome/idea/vim/helper/CommandLineHelper.kt
+++ b/src/main/java/com/maddyhome/idea/vim/helper/CommandLineHelper.kt
@@ -12,6 +12,7 @@ import com.intellij.openapi.application.ApplicationManager
 import com.intellij.openapi.components.Service
 import com.maddyhome.idea.vim.action.change.Extension
 import com.maddyhome.idea.vim.api.VimEditor
+import com.maddyhome.idea.vim.api.injector
 import com.maddyhome.idea.vim.newapi.ij
 import com.maddyhome.idea.vim.newapi.vim
 import com.maddyhome.idea.vim.ui.ModalEntry
@@ -52,7 +53,7 @@ class CommandLineHelper : VimCommandLineHelper {
       var text: String? = null
       // XXX: The Ex entry panel is used only for UI here, its logic might be inappropriate for input()
       val exEntryPanel = ExEntryPanel.getInstanceWithoutShortcuts()
-      exEntryPanel.activate(editor, EditorDataContext.init(editor), prompt.ifEmpty { " " }, "", 1)
+      exEntryPanel.activate(editor, injector.executionContextManager.onEditor(editor.vim).ij, prompt.ifEmpty { " " }, "", 1)
       ModalEntry.activate(editor.vim) { key: KeyStroke ->
         return@activate when {
           key.isCloseKeyStroke() -> {
diff --git a/src/main/java/com/maddyhome/idea/vim/listener/IdeaSpecifics.kt b/src/main/java/com/maddyhome/idea/vim/listener/IdeaSpecifics.kt
index bec960e25..12e0d9bc0 100644
--- a/src/main/java/com/maddyhome/idea/vim/listener/IdeaSpecifics.kt
+++ b/src/main/java/com/maddyhome/idea/vim/listener/IdeaSpecifics.kt
@@ -34,7 +34,6 @@ import com.maddyhome.idea.vim.api.globalOptions
 import com.maddyhome.idea.vim.api.injector
 import com.maddyhome.idea.vim.command.VimStateMachine
 import com.maddyhome.idea.vim.group.NotificationService
-import com.maddyhome.idea.vim.helper.EditorDataContext
 import com.maddyhome.idea.vim.helper.inNormalMode
 import com.maddyhome.idea.vim.helper.isIdeaVimDisabledHere
 import com.maddyhome.idea.vim.helper.vimStateMachine
@@ -163,7 +162,10 @@ object IdeaSpecifics {
           // Enable insert mode if there is no selection in template
           // Template with selection is handled by [com.maddyhome.idea.vim.group.visual.VisualMotionGroup.controlNonVimSelectionChange]
           if (editor.inNormalMode) {
-            VimPlugin.getChange().insertBeforeCursor(editor.vim, EditorDataContext.init(editor).vim)
+            VimPlugin.getChange().insertBeforeCursor(
+              editor.vim,
+              injector.executionContextManager.onEditor(editor.vim)
+            )
             KeyHandler.getInstance().reset(editor.vim)
           }
         }
diff --git a/src/main/java/com/maddyhome/idea/vim/newapi/IjEditorExecutionContext.kt b/src/main/java/com/maddyhome/idea/vim/newapi/IjEditorExecutionContext.kt
index f7ccae6b2..1acd561ed 100644
--- a/src/main/java/com/maddyhome/idea/vim/newapi/IjEditorExecutionContext.kt
+++ b/src/main/java/com/maddyhome/idea/vim/newapi/IjEditorExecutionContext.kt
@@ -11,11 +11,11 @@ package com.maddyhome.idea.vim.newapi
 import com.intellij.openapi.actionSystem.DataContext
 import com.maddyhome.idea.vim.api.ExecutionContext
 import com.maddyhome.idea.vim.api.VimEditor
-import com.maddyhome.idea.vim.helper.EditorDataContext
+import com.maddyhome.idea.vim.api.injector
 
 open class IjEditorExecutionContext(override val context: DataContext) : ExecutionContext.Editor {
   override fun updateEditor(editor: VimEditor): ExecutionContext {
-    return IjEditorExecutionContext(EditorDataContext.init((editor as IjVimEditor).editor, context))
+    return IjEditorExecutionContext(injector.executionContextManager.onEditor(editor, context.vim).ij)
   }
 }
 
diff --git a/src/main/java/com/maddyhome/idea/vim/newapi/IjExecutionContextManager.kt b/src/main/java/com/maddyhome/idea/vim/newapi/IjExecutionContextManager.kt
index b1040dbe6..9c3f19757 100644
--- a/src/main/java/com/maddyhome/idea/vim/newapi/IjExecutionContextManager.kt
+++ b/src/main/java/com/maddyhome/idea/vim/newapi/IjExecutionContextManager.kt
@@ -14,6 +14,7 @@ import com.maddyhome.idea.vim.api.ExecutionContext
 import com.maddyhome.idea.vim.api.ExecutionContextManagerBase
 import com.maddyhome.idea.vim.api.VimCaret
 import com.maddyhome.idea.vim.api.VimEditor
+import com.maddyhome.idea.vim.api.injector
 import com.maddyhome.idea.vim.helper.EditorDataContext
 import com.maddyhome.idea.vim.options.helpers.StrictMode
 
@@ -21,8 +22,6 @@ import com.maddyhome.idea.vim.options.helpers.StrictMode
 class IjExecutionContextManager : ExecutionContextManagerBase() {
   override fun onEditor(editor: VimEditor, prevContext: ExecutionContext?): ExecutionContext.Editor {
     if (prevContext is ExecutionContext.CaretAndEditor) {
-      StrictMode.fail("You should not create context on editor from the context on caret and editor")
-      prevContext.updateEditor(editor)
       return prevContext
     }
     return IjEditorExecutionContext(EditorDataContext.init((editor as IjVimEditor).editor, prevContext?.ij))
diff --git a/src/main/java/com/maddyhome/idea/vim/ui/ExOutputPanel.java b/src/main/java/com/maddyhome/idea/vim/ui/ExOutputPanel.java
index 8bc5ac3bf..308ef4040 100644
--- a/src/main/java/com/maddyhome/idea/vim/ui/ExOutputPanel.java
+++ b/src/main/java/com/maddyhome/idea/vim/ui/ExOutputPanel.java
@@ -17,8 +17,11 @@ import com.intellij.ui.components.JBScrollPane;
 import com.intellij.util.IJSwingUtilities;
 import com.maddyhome.idea.vim.KeyHandler;
 import com.maddyhome.idea.vim.VimPlugin;
-import com.maddyhome.idea.vim.helper.*;
-import com.maddyhome.idea.vim.newapi.IjEditorExecutionContext;
+import com.maddyhome.idea.vim.api.ExecutionContext;
+import com.maddyhome.idea.vim.helper.HelperKt;
+import com.maddyhome.idea.vim.helper.MessageHelper;
+import com.maddyhome.idea.vim.helper.UiHelper;
+import com.maddyhome.idea.vim.helper.UserDataManager;
 import com.maddyhome.idea.vim.newapi.IjVimEditor;
 import com.maddyhome.idea.vim.options.OptionConstants;
 import org.jetbrains.annotations.Nls;
@@ -296,8 +299,8 @@ public class ExOutputPanel extends JPanel {
         final List<KeyStroke> keys = new ArrayList<>(1);
         keys.add(key);
         KeyHandler.getInstance().getKeyStack().addKeys(keys);
-        VimPlugin.getMacro().playbackKeys(new IjVimEditor(myEditor), new IjEditorExecutionContext(EditorDataContext.init(myEditor, null)),
-                                          1);
+        ExecutionContext.Editor context = injector.getExecutionContextManager().onEditor(new IjVimEditor(myEditor), null);
+        VimPlugin.getMacro().playbackKeys(new IjVimEditor(myEditor), context, 1);
       }
     });
   }
diff --git a/src/main/java/com/maddyhome/idea/vim/ui/ex/ExEditorKit.kt b/src/main/java/com/maddyhome/idea/vim/ui/ex/ExEditorKit.kt
index a6f10d8c9..32a3f1bbb 100644
--- a/src/main/java/com/maddyhome/idea/vim/ui/ex/ExEditorKit.kt
+++ b/src/main/java/com/maddyhome/idea/vim/ui/ex/ExEditorKit.kt
@@ -10,7 +10,7 @@ package com.maddyhome.idea.vim.ui.ex
 import com.intellij.openapi.diagnostic.debug
 import com.intellij.openapi.diagnostic.logger
 import com.maddyhome.idea.vim.KeyHandler
-import com.maddyhome.idea.vim.helper.EditorDataContext
+import com.maddyhome.idea.vim.api.injector
 import com.maddyhome.idea.vim.newapi.vim
 import org.jetbrains.annotations.NonNls
 import java.awt.event.ActionEvent
@@ -125,7 +125,11 @@ object ExEditorKit : DefaultEditorKit() {
             if (target.useHandleKeyFromEx) {
               val entry = ExEntryPanel.getInstance().entry
               val editor = entry.editor
-              KeyHandler.getInstance().handleKey(editor.vim, key, EditorDataContext.init(editor, entry.context).vim)
+              KeyHandler.getInstance().handleKey(
+                editor.vim,
+                key,
+                injector.executionContextManager.onEditor(editor.vim, entry.context.vim)
+              )
             } else {
               val event = ActionEvent(e.source, e.id, c.toString(), e.getWhen(), e.modifiers)
               super.actionPerformed(event)
diff --git a/src/main/java/com/maddyhome/idea/vim/ui/ex/ExShortcutKeyAction.kt b/src/main/java/com/maddyhome/idea/vim/ui/ex/ExShortcutKeyAction.kt
index 212d24616..eaf769ccf 100644
--- a/src/main/java/com/maddyhome/idea/vim/ui/ex/ExShortcutKeyAction.kt
+++ b/src/main/java/com/maddyhome/idea/vim/ui/ex/ExShortcutKeyAction.kt
@@ -13,7 +13,7 @@ import com.intellij.openapi.actionSystem.AnActionEvent
 import com.intellij.openapi.actionSystem.KeyboardShortcut
 import com.intellij.openapi.project.DumbAwareAction
 import com.maddyhome.idea.vim.KeyHandler
-import com.maddyhome.idea.vim.helper.EditorDataContext
+import com.maddyhome.idea.vim.api.injector
 import com.maddyhome.idea.vim.newapi.vim
 import java.awt.event.KeyEvent
 import javax.swing.KeyStroke
@@ -36,7 +36,11 @@ class ExShortcutKeyAction(private val exEntryPanel: ExEntryPanel) : DumbAwareAct
     val keyStroke = getKeyStroke(e)
     if (keyStroke != null) {
       val editor = exEntryPanel.entry.editor
-      KeyHandler.getInstance().handleKey(editor.vim, keyStroke, EditorDataContext.init(editor, e.dataContext).vim)
+      KeyHandler.getInstance().handleKey(
+        editor.vim,
+        keyStroke,
+        injector.executionContextManager.onEditor(editor.vim, e.dataContext.vim)
+      )
     }
   }
 
diff --git a/src/test/java/org/jetbrains/plugins/ideavim/VimTestCase.kt b/src/test/java/org/jetbrains/plugins/ideavim/VimTestCase.kt
index a308fc910..d83f555a2 100644
--- a/src/test/java/org/jetbrains/plugins/ideavim/VimTestCase.kt
+++ b/src/test/java/org/jetbrains/plugins/ideavim/VimTestCase.kt
@@ -46,7 +46,6 @@ import com.maddyhome.idea.vim.command.VimStateMachine.SubMode
 import com.maddyhome.idea.vim.ex.ExException
 import com.maddyhome.idea.vim.ex.ExOutputModel.Companion.getInstance
 import com.maddyhome.idea.vim.group.visual.VimVisualTimer.swingTimer
-import com.maddyhome.idea.vim.helper.EditorDataContext
 import com.maddyhome.idea.vim.helper.EditorHelper
 import com.maddyhome.idea.vim.helper.GuicursorChangeListener
 import com.maddyhome.idea.vim.helper.RunnableHelper.runWriteCommand
@@ -59,6 +58,7 @@ import com.maddyhome.idea.vim.key.MappingOwner
 import com.maddyhome.idea.vim.key.ToKeysMappingInfo
 import com.maddyhome.idea.vim.listener.SelectionVimListenerSuppressor
 import com.maddyhome.idea.vim.newapi.IjVimEditor
+import com.maddyhome.idea.vim.newapi.ij
 import com.maddyhome.idea.vim.newapi.vim
 import com.maddyhome.idea.vim.options.OptionConstants
 import com.maddyhome.idea.vim.options.OptionScope
@@ -645,7 +645,7 @@ abstract class VimTestCase : UsefulTestCase() {
 
         val e = AnActionEvent(
           event,
-          EditorDataContext.init(editor),
+          injector.executionContextManager.onEditor(editor.vim).ij,
           ActionPlaces.KEYBOARD_SHORTCUT,
           VimShortcutKeyAction.instance.templatePresentation.clone(),
           ActionManager.getInstance(),
@@ -666,7 +666,7 @@ abstract class VimTestCase : UsefulTestCase() {
 
     fun typeText(keys: List<KeyStroke?>, editor: Editor, project: Project?) {
       val keyHandler = KeyHandler.getInstance()
-      val dataContext = EditorDataContext.init(editor)
+      val dataContext = injector.executionContextManager.onEditor(editor.vim)
       TestInputModel.getInstance(editor).setKeyStrokes(keys.filterNotNull())
       runWriteCommand(
         project,
@@ -674,7 +674,7 @@ abstract class VimTestCase : UsefulTestCase() {
           val inputModel = TestInputModel.getInstance(editor)
           var key = inputModel.nextKeyStroke()
           while (key != null) {
-            keyHandler.handleKey(editor.vim, key, dataContext.vim)
+            keyHandler.handleKey(editor.vim, key, dataContext)
             key = inputModel.nextKeyStroke()
           }
         },
diff --git a/src/test/java/org/jetbrains/plugins/ideavim/helper/CaretVisualAttributesHelperTest.kt b/src/test/java/org/jetbrains/plugins/ideavim/helper/CaretVisualAttributesHelperTest.kt
index b49a24728..aa262734b 100644
--- a/src/test/java/org/jetbrains/plugins/ideavim/helper/CaretVisualAttributesHelperTest.kt
+++ b/src/test/java/org/jetbrains/plugins/ideavim/helper/CaretVisualAttributesHelperTest.kt
@@ -14,7 +14,6 @@ import com.intellij.openapi.editor.VisualPosition
 import com.intellij.openapi.editor.ex.EditorSettingsExternalizable
 import com.maddyhome.idea.vim.VimPlugin
 import com.maddyhome.idea.vim.api.injector
-import com.maddyhome.idea.vim.helper.EditorDataContext
 import com.maddyhome.idea.vim.helper.VimBehaviorDiffers
 import com.maddyhome.idea.vim.newapi.vim
 import junit.framework.TestCase
@@ -286,7 +285,10 @@ class CaretVisualAttributesHelperTest : VimTestCase() {
       |all rocks and lavender and tufted grass,
     """.trimMargin()
     )
-    injector.actionExecutor.executeAction("EditorCloneCaretBelow", EditorDataContext.init(myFixture.editor).vim)
+    injector.actionExecutor.executeAction(
+      "EditorCloneCaretBelow",
+      injector.executionContextManager.onEditor(myFixture.editor.vim)
+    )
     TestCase.assertEquals(2, myFixture.editor.caretModel.caretCount)
     assertCaretVisualAttributes(CaretVisualAttributes.Shape.BLOCK, 0f)
   }