diff --git a/build.gradle.kts b/build.gradle.kts
index 51790791d..5c11b8ece 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -71,6 +71,8 @@ dependencies {
     antlr("org.antlr:antlr4:$antlrVersion")
 
     api(project(":vim-engine"))
+
+    testApi("com.squareup.okhttp3:okhttp:4.10.0")
 }
 
 configurations {
diff --git a/gradle.properties b/gradle.properties
index b6adae334..c8ebc23e7 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -5,7 +5,7 @@ downloadIdeaSources=true
 instrumentPluginCode=true
 version=SNAPSHOT
 javaVersion=11
-remoteRobotVersion=0.11.10
+remoteRobotVersion=0.11.15
 antlrVersion=4.10.1
 
 
diff --git a/src/main/java/com/maddyhome/idea/vim/VimPlugin.java b/src/main/java/com/maddyhome/idea/vim/VimPlugin.java
index 2df1a10c6..115895744 100644
--- a/src/main/java/com/maddyhome/idea/vim/VimPlugin.java
+++ b/src/main/java/com/maddyhome/idea/vim/VimPlugin.java
@@ -32,6 +32,7 @@ import com.intellij.openapi.keymap.ex.KeymapManagerEx;
 import com.intellij.openapi.keymap.impl.DefaultKeymap;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.ui.Messages;
+import com.intellij.openapi.util.Disposer;
 import com.intellij.openapi.util.SystemInfo;
 import com.maddyhome.idea.vim.api.VimInjectorKt;
 import com.maddyhome.idea.vim.api.VimKeyGroup;
@@ -88,6 +89,8 @@ public class VimPlugin implements PersistentStateComponent<Element>, Disposable
 
   private final @NotNull VimState state = new VimState();
 
+  public Disposable onOffDisposable;
+
   VimPlugin() {
     ApplicationConfigurationMigrator.getInstance().migrate();
   }
@@ -335,6 +338,8 @@ public class VimPlugin implements PersistentStateComponent<Element>, Disposable
    *      execution, what theoretically may cause bugs (e.g. VIM-2540)
    */
   private void turnOnPlugin() {
+    onOffDisposable = Disposer.newDisposable(this, "IdeaVimOnOffDisposer");
+
     // 1) Update state
     ApplicationManager.getApplication().invokeLater(this::updateState);
 
@@ -370,6 +375,8 @@ public class VimPlugin implements PersistentStateComponent<Element>, Disposable
 
     // Unregister vim actions in command mode
     RegisterActions.unregisterActions();
+
+    Disposer.dispose(onOffDisposable);
   }
 
   private boolean stateUpdated = false;
diff --git a/src/main/java/com/maddyhome/idea/vim/listener/VimListenerManager.kt b/src/main/java/com/maddyhome/idea/vim/listener/VimListenerManager.kt
index ad266a9b9..8fac00005 100644
--- a/src/main/java/com/maddyhome/idea/vim/listener/VimListenerManager.kt
+++ b/src/main/java/com/maddyhome/idea/vim/listener/VimListenerManager.kt
@@ -122,9 +122,9 @@ object VimListenerManager {
       VimPlugin.getOptionService().addListener(OptionConstants.guicursorName, GuicursorChangeListener)
       VimPlugin.getOptionService().addListener(OptionConstants.iskeywordName, KeywordOptionChangeListener, true)
 
-      EventFacade.getInstance().addEditorFactoryListener(VimEditorFactoryListener, VimPlugin.getInstance())
+      EventFacade.getInstance().addEditorFactoryListener(VimEditorFactoryListener, VimPlugin.getInstance().onOffDisposable)
 
-      EditorFactory.getInstance().eventMulticaster.addCaretListener(VimCaretListener, VimPlugin.getInstance())
+      EditorFactory.getInstance().eventMulticaster.addCaretListener(VimCaretListener, VimPlugin.getInstance().onOffDisposable)
     }
 
     fun disable() {
@@ -136,8 +136,6 @@ object VimListenerManager {
       VimPlugin.getOptionService().removeListener(OptionConstants.showcmdName, ShowCmdOptionChangeListener)
       VimPlugin.getOptionService().removeListener(OptionConstants.guicursorName, GuicursorChangeListener)
       VimPlugin.getOptionService().removeListener(OptionConstants.iskeywordName, KeywordOptionChangeListener)
-
-      EditorFactory.getInstance().eventMulticaster.removeCaretListener(VimCaretListener)
     }
   }
 
diff --git a/src/test/java/org/jetbrains/plugins/ideavim/RegisterActionsTest.kt b/src/test/java/org/jetbrains/plugins/ideavim/RegisterActionsTest.kt
index bc49a7ad6..c6508c623 100644
--- a/src/test/java/org/jetbrains/plugins/ideavim/RegisterActionsTest.kt
+++ b/src/test/java/org/jetbrains/plugins/ideavim/RegisterActionsTest.kt
@@ -38,14 +38,18 @@ class RegisterActionsTest : VimTestCase() {
 
   @TestWithoutNeovim(reason = SkipNeovimReason.EDITOR_MODIFICATION)
   fun `test action in disabled plugin`() {
-    setupChecks {
-      caretShape = false
-    }
-    val keys = injector.parser.parseKeys("jklwB") // just random keys
-    val before = "I ${c}found it in a legendary land"
-    val after = "I jklwB${c}found it in a legendary land"
-    doTest(keys, before, after, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE) {
-      VimPlugin.setEnabled(false)
+    try {
+      setupChecks {
+        caretShape = false
+      }
+      val keys = injector.parser.parseKeys("jklwB") // just random keys
+      val before = "I ${c}found it in a legendary land"
+      val after = "I jklwB${c}found it in a legendary land"
+      doTest(keys, before, after, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE) {
+        VimPlugin.setEnabled(false)
+      }
+    } finally {
+      VimPlugin.setEnabled(true)
     }
   }
 
diff --git a/src/test/java/ui/UiTests.kt b/src/test/java/ui/UiTests.kt
index 2f0114bda..f1ff1f11d 100644
--- a/src/test/java/ui/UiTests.kt
+++ b/src/test/java/ui/UiTests.kt
@@ -21,9 +21,7 @@ package ui
 import com.automation.remarks.junit.VideoRule
 import com.automation.remarks.video.annotations.Video
 import com.intellij.remoterobot.RemoteRobot
-import com.intellij.remoterobot.fixtures.ComponentFixture
 import com.intellij.remoterobot.fixtures.ContainerFixture
-import com.intellij.remoterobot.search.locators.byXpath
 import com.intellij.remoterobot.stepsProcessing.step
 import com.intellij.remoterobot.utils.keyboard
 import org.assertj.swing.core.MouseButton
@@ -50,7 +48,6 @@ import ui.utils.tripleClickOnRight
 import ui.utils.uiTest
 import ui.utils.vimExit
 import java.awt.Point
-import java.awt.event.KeyEvent
 import kotlin.test.assertEquals
 import kotlin.test.assertFalse
 import kotlin.test.assertTrue
@@ -136,13 +133,8 @@ class UiTests {
       createNewProjectLink.click()
       dialog("New Project") {
         findText("Java").click()
-        find(
-          ComponentFixture::class.java,
-          byXpath("//div[@class='FrameworksTree']")
-        ).findText("Kotlin/JVM").click()
-        runJs("robot.pressAndReleaseKey(${KeyEvent.VK_SPACE})")
-        button("Next").click()
-        button("Finish").click()
+        checkBox("Add sample code").select()
+        button("Create").click()
       }
     }
   }
diff --git a/src/test/java/ui/utils/UiTestWrapper.kt b/src/test/java/ui/utils/UiTestWrapper.kt
index fa2dd6daa..81462d173 100644
--- a/src/test/java/ui/utils/UiTestWrapper.kt
+++ b/src/test/java/ui/utils/UiTestWrapper.kt
@@ -72,6 +72,6 @@ private fun saveFile(url: String, folder: String, name: String): File {
   return File(folder).apply {
     mkdirs()
   }.resolve(name).apply {
-    writeText(response.body()?.string() ?: "")
+    writeText(response.body?.string() ?: "")
   }
 }