diff --git a/src/main/java/com/chylex/intellij/keeppopupswhiledebugging/PluginLoadListener.kt b/src/main/java/com/chylex/intellij/keeppopupswhiledebugging/PluginLoadListener.kt
new file mode 100644
index 0000000..68d17dd
--- /dev/null
+++ b/src/main/java/com/chylex/intellij/keeppopupswhiledebugging/PluginLoadListener.kt
@@ -0,0 +1,24 @@
+package com.chylex.intellij.keeppopupswhiledebugging
+
+import com.intellij.ide.plugins.CannotUnloadPluginException
+import com.intellij.ide.plugins.DynamicPluginListener
+import com.intellij.ide.plugins.IdeaPluginDescriptor
+
+class PluginLoadListener : DynamicPluginListener {
+	private companion object {
+		private const val PLUGIN_ID = "com.chylex.intellij.keeppopupswhiledebugging"
+	}
+	
+	override fun pluginLoaded(pluginDescriptor: IdeaPluginDescriptor) {
+		if (pluginDescriptor.pluginId.idString == PLUGIN_ID) {
+			PreventHidingPopups.installListener()
+			PreventHidingPopups.enablePopupsInAllProjects()
+		}
+	}
+	
+	override fun beforePluginUnload(pluginDescriptor: IdeaPluginDescriptor, isUpdate: Boolean) {
+		if (pluginDescriptor.pluginId.idString == PLUGIN_ID) {
+			throw CannotUnloadPluginException("A restart is required to unload Keep Editor Popups While Debugging plugin.")
+		}
+	}
+}
diff --git a/src/main/java/com/chylex/intellij/keeppopupswhiledebugging/PreventHidingPopups.kt b/src/main/java/com/chylex/intellij/keeppopupswhiledebugging/PreventHidingPopups.kt
new file mode 100644
index 0000000..ce6f401
--- /dev/null
+++ b/src/main/java/com/chylex/intellij/keeppopupswhiledebugging/PreventHidingPopups.kt
@@ -0,0 +1,57 @@
+package com.chylex.intellij.keeppopupswhiledebugging
+
+import com.intellij.openapi.editor.EditorMouseHoverPopupManager
+import com.intellij.openapi.editor.impl.EditorMouseHoverPopupControl
+import com.intellij.openapi.project.Project
+import com.intellij.openapi.project.ProjectManager
+import com.intellij.openapi.startup.StartupActivity
+import com.intellij.openapi.util.Key
+
+class PreventHidingPopups : StartupActivity {
+	override fun runActivity(project: Project) {
+		installListener()
+	}
+	
+	companion object {
+		fun installListener() {
+			EditorMouseHoverPopupManager.getInstance() // Installs the default listener.
+			EditorMouseHoverPopupControl.getInstance()?.addListener(MouseTrackingDisabledListener)
+		}
+		
+		fun enablePopupsInAllProjects() {
+			val projectManager = ProjectManager.getInstanceIfCreated() ?: return
+			
+			for (project in projectManager.openProjects) {
+				repeat(MouseTrackingDisabledKey.getDisabledCount(project)) {
+					EditorMouseHoverPopupControl.enablePopups(project)
+				}
+			}
+		}
+	}
+	
+	private object MouseTrackingDisabledListener : Runnable {
+		private var isReenablingPopups = false
+		
+		override fun run() {
+			if (!isReenablingPopups) {
+				isReenablingPopups = true
+				enablePopupsInAllProjects()
+				isReenablingPopups = false
+			}
+		}
+	}
+	
+	private object MouseTrackingDisabledKey {
+		private val KEY: Key<*>?
+		
+		init {
+			EditorMouseHoverPopupControl.getInstance() // Creates the key.
+			KEY = Key.findKeyByName("MOUSE_TRACKING_DISABLED_COUNT")
+		}
+		
+		@Suppress("ConvertLambdaToReference")
+		fun getDisabledCount(project: Project): Int {
+			return KEY?.let { project.getUserData(it) } as? Int ?: 0
+		}
+	}
+}
diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml
index 0bd34ef..dcb4db7 100644
--- a/src/main/resources/META-INF/plugin.xml
+++ b/src/main/resources/META-INF/plugin.xml
@@ -12,4 +12,12 @@
   ]]></description>
   
   <depends>com.intellij.modules.platform</depends>
+  
+  <extensions defaultExtensionNs="com.intellij">
+    <postStartupActivity implementation="com.chylex.intellij.keeppopupswhiledebugging.PreventHidingPopups" />
+  </extensions>
+  
+  <applicationListeners>
+    <listener class="com.chylex.intellij.keeppopupswhiledebugging.PluginLoadListener" topic="com.intellij.ide.plugins.DynamicPluginListener" />
+  </applicationListeners>
 </idea-plugin>