diff --git a/src/main/kotlin/com/chylex/intellij/inspectionlens/InspectionLens.kt b/src/main/kotlin/com/chylex/intellij/inspectionlens/InspectionLens.kt
index a4e20c2..d9ac5db 100644
--- a/src/main/kotlin/com/chylex/intellij/inspectionlens/InspectionLens.kt
+++ b/src/main/kotlin/com/chylex/intellij/inspectionlens/InspectionLens.kt
@@ -1,15 +1,11 @@
 package com.chylex.intellij.inspectionlens
 
-import com.chylex.intellij.inspectionlens.editor.EditorLensManager
-import com.chylex.intellij.inspectionlens.editor.LensMarkupModelListener
-import com.intellij.openapi.Disposable
+import com.chylex.intellij.inspectionlens.editor.EditorLensFeatures
 import com.intellij.openapi.application.ApplicationManager
+import com.intellij.openapi.components.service
 import com.intellij.openapi.fileEditor.FileEditorManager
 import com.intellij.openapi.fileEditor.TextEditor
 import com.intellij.openapi.project.ProjectManager
-import com.intellij.openapi.rd.createLifetime
-import com.intellij.openapi.rd.createNestedDisposable
-import com.jetbrains.rd.util.lifetime.Lifetime
 
 /**
  * Handles installation and uninstallation of plugin features in editors.
@@ -21,7 +17,7 @@ internal object InspectionLens {
 	 * Installs lenses into [editor].
 	 */
 	fun install(editor: TextEditor) {
-		LensMarkupModelListener.register(editor.editor, createEditorDisposable(editor))
+		EditorLensFeatures.install(editor.editor, service<InspectionLensPluginDisposableService>().intersect(editor))
 	}
 	
 	/**
@@ -31,31 +27,20 @@ internal object InspectionLens {
 		forEachOpenEditor(::install)
 	}
 	
-	/**
-	 * Uninstalls lenses from all open editors.
-	 */
-	fun uninstall() {
-		forEachOpenEditor {
-			EditorLensManager.remove(it.editor)
-		}
-	}
-	
 	/**
 	 * Refreshes lenses in all open editors.
 	 */
-	fun refresh() {
+	private fun refresh() {
 		forEachOpenEditor {
-			LensMarkupModelListener.refresh(it.editor)
+			EditorLensFeatures.refresh(it.editor)
 		}
 	}
 	
 	/**
-	 * Creates a [Disposable] that will be disposed when either the [TextEditor] is disposed or the plugin is unloaded.
+	 * Schedules a refresh of lenses in all open editors.
 	 */
-	private fun createEditorDisposable(textEditor: TextEditor): Disposable {
-		val pluginLifetime = ApplicationManager.getApplication().getService(InspectionLensPluginDisposableService::class.java).createLifetime()
-		val editorLifetime = textEditor.createLifetime()
-		return Lifetime.intersect(pluginLifetime, editorLifetime).createNestedDisposable("InspectionLensIntersectedLifetime")
+	fun scheduleRefresh() {
+		Refresh.schedule()
 	}
 	
 	/**
@@ -70,4 +55,26 @@ internal object InspectionLens {
 			}
 		}
 	}
+	
+	private object Refresh {
+		private var needsRefresh = false
+		
+		fun schedule() {
+			synchronized(this) {
+				if (!needsRefresh) {
+					needsRefresh = true
+					ApplicationManager.getApplication().invokeLater(this::run)
+				}
+			}
+		}
+		
+		private fun run() {
+			synchronized(this) {
+				if (needsRefresh) {
+					needsRefresh = false
+					refresh()
+				}
+			}
+		}
+	}
 }
diff --git a/src/main/kotlin/com/chylex/intellij/inspectionlens/InspectionLensPluginDisposableService.kt b/src/main/kotlin/com/chylex/intellij/inspectionlens/InspectionLensPluginDisposableService.kt
index fdef29d..e29fb57 100644
--- a/src/main/kotlin/com/chylex/intellij/inspectionlens/InspectionLensPluginDisposableService.kt
+++ b/src/main/kotlin/com/chylex/intellij/inspectionlens/InspectionLensPluginDisposableService.kt
@@ -2,11 +2,21 @@ package com.chylex.intellij.inspectionlens
 
 import com.intellij.openapi.Disposable
 import com.intellij.openapi.components.Service
+import com.intellij.openapi.rd.createLifetime
+import com.intellij.openapi.rd.createNestedDisposable
+import com.jetbrains.rd.util.lifetime.Lifetime
 
 /**
  * Gets automatically disposed when the plugin is unloaded.
  */
 @Service
 class InspectionLensPluginDisposableService : Disposable {
+	/**
+	 * Creates a [Disposable] that will be disposed when either plugin is unloaded, or the [other] [Disposable] is disposed.
+	 */
+	fun intersect(other: Disposable): Disposable {
+		return Lifetime.intersect(createLifetime(), other.createLifetime()).createNestedDisposable("InspectionLensIntersectedLifetime")
+	}
+	
 	override fun dispose() {}
 }
diff --git a/src/main/kotlin/com/chylex/intellij/inspectionlens/InspectionLensPluginListener.kt b/src/main/kotlin/com/chylex/intellij/inspectionlens/InspectionLensPluginListener.kt
index 9f29984..fe6cf6c 100644
--- a/src/main/kotlin/com/chylex/intellij/inspectionlens/InspectionLensPluginListener.kt
+++ b/src/main/kotlin/com/chylex/intellij/inspectionlens/InspectionLensPluginListener.kt
@@ -4,7 +4,7 @@ import com.intellij.ide.plugins.DynamicPluginListener
 import com.intellij.ide.plugins.IdeaPluginDescriptor
 
 /**
- * Installs [InspectionLens] in open editors when the plugin is loaded, and uninstalls it when the plugin is unloaded.
+ * Installs [InspectionLens] in open editors when the plugin is loaded.
  */
 class InspectionLensPluginListener : DynamicPluginListener {
 	override fun pluginLoaded(pluginDescriptor: IdeaPluginDescriptor) {
@@ -12,10 +12,4 @@ class InspectionLensPluginListener : DynamicPluginListener {
 			InspectionLens.install()
 		}
 	}
-	
-	override fun beforePluginUnload(pluginDescriptor: IdeaPluginDescriptor, isUpdate: Boolean) {
-		if (pluginDescriptor.pluginId.idString == InspectionLens.PLUGIN_ID) {
-			InspectionLens.uninstall()
-		}
-	}
 }
diff --git a/src/main/kotlin/com/chylex/intellij/inspectionlens/InspectionLensRefresher.kt b/src/main/kotlin/com/chylex/intellij/inspectionlens/InspectionLensRefresher.kt
deleted file mode 100644
index c9558bf..0000000
--- a/src/main/kotlin/com/chylex/intellij/inspectionlens/InspectionLensRefresher.kt
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.chylex.intellij.inspectionlens
-
-import com.intellij.openapi.application.ApplicationManager
-
-object InspectionLensRefresher {
-	private var needsRefresh = false
-	
-	fun scheduleRefresh() {
-		synchronized(this) {
-			if (!needsRefresh) {
-				needsRefresh = true
-				ApplicationManager.getApplication().invokeLater(::refresh)
-			}
-		}
-	}
-	
-	private fun refresh() {
-		synchronized(this) {
-			if (needsRefresh) {
-				needsRefresh = false
-				InspectionLens.refresh()
-			}
-		}
-	}
-}
diff --git a/src/main/kotlin/com/chylex/intellij/inspectionlens/compatibility/GrazieSupport.kt b/src/main/kotlin/com/chylex/intellij/inspectionlens/compatibility/GrazieSupport.kt
index 425da33..5385542 100644
--- a/src/main/kotlin/com/chylex/intellij/inspectionlens/compatibility/GrazieSupport.kt
+++ b/src/main/kotlin/com/chylex/intellij/inspectionlens/compatibility/GrazieSupport.kt
@@ -1,6 +1,6 @@
 package com.chylex.intellij.inspectionlens.compatibility
 
-import com.chylex.intellij.inspectionlens.editor.LensSeverity
+import com.chylex.intellij.inspectionlens.editor.lens.LensSeverity
 import com.intellij.grazie.ide.TextProblemSeverities
 import com.intellij.openapi.project.Project
 import com.intellij.openapi.startup.ProjectActivity
diff --git a/src/main/kotlin/com/chylex/intellij/inspectionlens/compatibility/SpellCheckerSupport.kt b/src/main/kotlin/com/chylex/intellij/inspectionlens/compatibility/SpellCheckerSupport.kt
index 9d5fc6c..6887e81 100644
--- a/src/main/kotlin/com/chylex/intellij/inspectionlens/compatibility/SpellCheckerSupport.kt
+++ b/src/main/kotlin/com/chylex/intellij/inspectionlens/compatibility/SpellCheckerSupport.kt
@@ -1,12 +1,12 @@
 package com.chylex.intellij.inspectionlens.compatibility
 
-import com.chylex.intellij.inspectionlens.editor.LensSeverity
+import com.chylex.intellij.inspectionlens.editor.lens.LensSeverity
 import com.intellij.lang.annotation.HighlightSeverity
 import com.intellij.openapi.diagnostic.logger
 import com.intellij.profile.codeInspection.InspectionProfileManager
 import com.intellij.spellchecker.SpellCheckerSeveritiesProvider
 
-object SpellCheckerSupport {
+internal object SpellCheckerSupport {
 	private val log = logger<SpellCheckerSupport>()
 	
 	fun load() {
diff --git a/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/EditorLensFeatures.kt b/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/EditorLensFeatures.kt
new file mode 100644
index 0000000..09b2c65
--- /dev/null
+++ b/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/EditorLensFeatures.kt
@@ -0,0 +1,51 @@
+package com.chylex.intellij.inspectionlens.editor
+
+import com.intellij.openapi.Disposable
+import com.intellij.openapi.editor.Editor
+import com.intellij.openapi.editor.ex.MarkupModelEx
+import com.intellij.openapi.editor.impl.DocumentMarkupModel
+import com.intellij.openapi.util.Disposer
+import com.intellij.openapi.util.Key
+
+/**
+ * Manages Inspection Lens features for a single [Editor].
+ */
+internal class EditorLensFeatures private constructor(
+	editor: Editor,
+	private val markupModel: MarkupModelEx,
+	disposable: Disposable
+) {
+	private val lensManager = EditorLensManager(editor)
+	private val lensManagerDispatcher = EditorLensManagerDispatcher(lensManager)
+	private val markupModelListener = LensMarkupModelListener(lensManagerDispatcher)
+	
+	init {
+		markupModel.addMarkupModelListener(disposable, markupModelListener)
+		markupModelListener.showAllValid(markupModel.allHighlighters)
+	}
+	
+	private fun refresh() {
+		markupModelListener.hideAll()
+		markupModelListener.showAllValid(markupModel.allHighlighters)
+	}
+	
+	companion object {
+		private val EDITOR_KEY = Key<EditorLensFeatures>(EditorLensFeatures::class.java.name)
+		
+		fun install(editor: Editor, disposable: Disposable) {
+			if (editor.getUserData(EDITOR_KEY) != null) {
+				return
+			}
+			
+			val markupModel = DocumentMarkupModel.forDocument(editor.document, editor.project, false) as? MarkupModelEx ?: return
+			val features = EditorLensFeatures(editor, markupModel, disposable)
+			
+			editor.putUserData(EDITOR_KEY, features)
+			Disposer.register(disposable) { editor.putUserData(EDITOR_KEY, null) }
+		}
+		
+		fun refresh(editor: Editor) {
+			editor.getUserData(EDITOR_KEY)?.refresh()
+		}
+	}
+}
diff --git a/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/EditorLensManager.kt b/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/EditorLensManager.kt
index bddce15..df7e645 100644
--- a/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/EditorLensManager.kt
+++ b/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/EditorLensManager.kt
@@ -1,32 +1,16 @@
 package com.chylex.intellij.inspectionlens.editor
 
+import com.chylex.intellij.inspectionlens.editor.lens.EditorLens
 import com.chylex.intellij.inspectionlens.settings.LensSettingsState
 import com.intellij.openapi.components.service
 import com.intellij.openapi.editor.Editor
 import com.intellij.openapi.editor.markup.RangeHighlighter
-import com.intellij.openapi.util.Key
 import java.util.IdentityHashMap
 
 /**
  * Manages visible inspection lenses for an [Editor].
  */
-class EditorLensManager private constructor(private val editor: Editor) {
-	companion object {
-		private val EDITOR_KEY = Key<EditorLensManager>(EditorLensManager::class.java.name)
-		
-		fun getOrCreate(editor: Editor): EditorLensManager {
-			return editor.getUserData(EDITOR_KEY) ?: EditorLensManager(editor).also { editor.putUserData(EDITOR_KEY, it) }
-		}
-		
-		fun remove(editor: Editor) {
-			val manager = editor.getUserData(EDITOR_KEY)
-			if (manager != null) {
-				manager.hideAll()
-				editor.putUserData(EDITOR_KEY, null)
-			}
-		}
-	}
-	
+internal class EditorLensManager(private val editor: Editor) {
 	private val lenses = IdentityHashMap<RangeHighlighter, EditorLens>()
 	private val settings = service<LensSettingsState>()
 	
diff --git a/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/EditorLensManagerDispatcher.kt b/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/EditorLensManagerDispatcher.kt
index f189ceb..21f8411 100644
--- a/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/EditorLensManagerDispatcher.kt
+++ b/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/EditorLensManagerDispatcher.kt
@@ -3,7 +3,7 @@ package com.chylex.intellij.inspectionlens.editor
 import com.intellij.openapi.application.ApplicationManager
 import com.intellij.openapi.editor.markup.RangeHighlighter
 
-class EditorLensManagerDispatcher(private val lensManager: EditorLensManager) {
+internal class EditorLensManagerDispatcher(private val lensManager: EditorLensManager) {
 	private var queuedItems = mutableListOf<EditorLensManager.Command>()
 	private var isEnqueued = false
 	
diff --git a/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/LensMarkupModelListener.kt b/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/LensMarkupModelListener.kt
index d2c5573..de9a6fe 100644
--- a/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/LensMarkupModelListener.kt
+++ b/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/LensMarkupModelListener.kt
@@ -2,23 +2,16 @@ package com.chylex.intellij.inspectionlens.editor
 
 import com.chylex.intellij.inspectionlens.settings.LensSettingsState
 import com.intellij.codeInsight.daemon.impl.HighlightInfo
-import com.intellij.openapi.Disposable
 import com.intellij.openapi.components.service
-import com.intellij.openapi.editor.Editor
-import com.intellij.openapi.editor.ex.MarkupModelEx
 import com.intellij.openapi.editor.ex.RangeHighlighterEx
-import com.intellij.openapi.editor.impl.DocumentMarkupModel
 import com.intellij.openapi.editor.impl.event.MarkupModelListener
 import com.intellij.openapi.editor.markup.RangeHighlighter
-import com.intellij.openapi.util.Disposer
-import com.intellij.openapi.util.Key
 
 /**
  * Listens for inspection highlights and reports them to [EditorLensManager].
  */
-internal class LensMarkupModelListener private constructor(editor: Editor) : MarkupModelListener {
+internal class LensMarkupModelListener(private val lensManagerDispatcher: EditorLensManagerDispatcher) : MarkupModelListener {
 	private val settings = service<LensSettingsState>()
-	private val lensManagerDispatcher = EditorLensManagerDispatcher(EditorLensManager.getOrCreate(editor))
 	
 	override fun afterAdded(highlighter: RangeHighlighterEx) {
 		showIfValid(highlighter)
@@ -46,11 +39,11 @@ internal class LensMarkupModelListener private constructor(editor: Editor) : Mar
 		}
 	}
 	
-	private fun showAllValid(highlighters: Array<RangeHighlighter>) {
+	fun showAllValid(highlighters: Array<RangeHighlighter>) {
 		highlighters.forEach(::showIfValid)
 	}
 	
-	private fun hideAll() {
+	fun hideAll() {
 		lensManagerDispatcher.hideAll()
 	}
 	
@@ -65,49 +58,12 @@ internal class LensMarkupModelListener private constructor(editor: Editor) : Mar
 		}
 	}
 	
-	companion object {
-		private val EDITOR_KEY = Key<LensMarkupModelListener>(LensMarkupModelListener::class.java.name)
-		
-		private inline fun processHighlighterWithInfo(highlighterWithInfo: HighlighterWithInfo, actionForImmediate: (HighlighterWithInfo) -> Unit, actionForAsync: (HighlighterWithInfo.Async) -> Unit) {
-			if (highlighterWithInfo is HighlighterWithInfo.Async) {
-				actionForAsync(highlighterWithInfo)
-			}
-			else if (highlighterWithInfo.hasDescription) {
-				actionForImmediate(highlighterWithInfo)
-			}
+	private inline fun processHighlighterWithInfo(highlighterWithInfo: HighlighterWithInfo, actionForImmediate: (HighlighterWithInfo) -> Unit, actionForAsync: (HighlighterWithInfo.Async) -> Unit) {
+		if (highlighterWithInfo is HighlighterWithInfo.Async) {
+			actionForAsync(highlighterWithInfo)
 		}
-		
-		private fun getMarkupModel(editor: Editor): MarkupModelEx? {
-			return DocumentMarkupModel.forDocument(editor.document, editor.project, false) as? MarkupModelEx
-		}
-		
-		/**
-		 * Attaches a new [LensMarkupModelListener] to the [Editor], and reports all existing inspection highlights to [EditorLensManager].
-		 */
-		fun register(editor: Editor, disposable: Disposable) {
-			if (editor.getUserData(EDITOR_KEY) != null) {
-				return
-			}
-			
-			val markupModel = getMarkupModel(editor) ?: return
-			val listener = LensMarkupModelListener(editor)
-			
-			editor.putUserData(EDITOR_KEY, listener)
-			Disposer.register(disposable) { editor.putUserData(EDITOR_KEY, null) }
-			
-			markupModel.addMarkupModelListener(disposable, listener)
-			listener.showAllValid(markupModel.allHighlighters)
-		}
-		
-		/**
-		 * Recreates all inspection highlights in the [Editor].
-		 */
-		fun refresh(editor: Editor) {
-			val listener = editor.getUserData(EDITOR_KEY) ?: return
-			val markupModel = getMarkupModel(editor) ?: return
-			
-			listener.hideAll()
-			listener.showAllValid(markupModel.allHighlighters)
+		else if (highlighterWithInfo.hasDescription) {
+			actionForImmediate(highlighterWithInfo)
 		}
 	}
 }
diff --git a/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/EditorLens.kt b/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/lens/EditorLens.kt
similarity index 95%
rename from src/main/kotlin/com/chylex/intellij/inspectionlens/editor/EditorLens.kt
rename to src/main/kotlin/com/chylex/intellij/inspectionlens/editor/lens/EditorLens.kt
index e05bacc..da1adf4 100644
--- a/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/EditorLens.kt
+++ b/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/lens/EditorLens.kt
@@ -1,4 +1,4 @@
-package com.chylex.intellij.inspectionlens.editor
+package com.chylex.intellij.inspectionlens.editor.lens
 
 import com.chylex.intellij.inspectionlens.settings.LensSettingsState
 import com.intellij.codeInsight.daemon.impl.HighlightInfo
diff --git a/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/EditorLensInlay.kt b/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/lens/EditorLensInlay.kt
similarity index 98%
rename from src/main/kotlin/com/chylex/intellij/inspectionlens/editor/EditorLensInlay.kt
rename to src/main/kotlin/com/chylex/intellij/inspectionlens/editor/lens/EditorLensInlay.kt
index 5c31c38..0e1d972 100644
--- a/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/EditorLensInlay.kt
+++ b/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/lens/EditorLensInlay.kt
@@ -1,4 +1,4 @@
-package com.chylex.intellij.inspectionlens.editor
+package com.chylex.intellij.inspectionlens.editor.lens
 
 import com.chylex.intellij.inspectionlens.settings.LensSettingsState
 import com.intellij.codeInsight.daemon.impl.HighlightInfo
diff --git a/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/EditorLensLineBackground.kt b/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/lens/EditorLensLineBackground.kt
similarity index 96%
rename from src/main/kotlin/com/chylex/intellij/inspectionlens/editor/EditorLensLineBackground.kt
rename to src/main/kotlin/com/chylex/intellij/inspectionlens/editor/lens/EditorLensLineBackground.kt
index 4f0cb71..4f10a2a 100644
--- a/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/EditorLensLineBackground.kt
+++ b/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/lens/EditorLensLineBackground.kt
@@ -1,4 +1,4 @@
-package com.chylex.intellij.inspectionlens.editor
+package com.chylex.intellij.inspectionlens.editor.lens
 
 import com.intellij.codeInsight.daemon.impl.HighlightInfo
 import com.intellij.openapi.editor.Editor
diff --git a/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/LensRenderer.kt b/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/lens/LensRenderer.kt
similarity index 97%
rename from src/main/kotlin/com/chylex/intellij/inspectionlens/editor/LensRenderer.kt
rename to src/main/kotlin/com/chylex/intellij/inspectionlens/editor/lens/LensRenderer.kt
index 114f9c5..97e8467 100644
--- a/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/LensRenderer.kt
+++ b/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/lens/LensRenderer.kt
@@ -1,4 +1,4 @@
-package com.chylex.intellij.inspectionlens.editor
+package com.chylex.intellij.inspectionlens.editor.lens
 
 import com.chylex.intellij.inspectionlens.settings.LensSettingsState
 import com.intellij.codeInsight.daemon.impl.HighlightInfo
diff --git a/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/LensSeverity.kt b/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/lens/LensSeverity.kt
similarity index 94%
rename from src/main/kotlin/com/chylex/intellij/inspectionlens/editor/LensSeverity.kt
rename to src/main/kotlin/com/chylex/intellij/inspectionlens/editor/lens/LensSeverity.kt
index 6b581f3..653c2c5 100644
--- a/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/LensSeverity.kt
+++ b/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/lens/LensSeverity.kt
@@ -1,6 +1,6 @@
-package com.chylex.intellij.inspectionlens.editor
+package com.chylex.intellij.inspectionlens.editor.lens
 
-import com.chylex.intellij.inspectionlens.InspectionLensRefresher
+import com.chylex.intellij.inspectionlens.InspectionLens
 import com.chylex.intellij.inspectionlens.compatibility.SpellCheckerSupport
 import com.intellij.lang.annotation.HighlightSeverity
 import com.intellij.ui.ColorUtil
@@ -54,7 +54,7 @@ enum class LensSeverity(baseColor: Color, lightThemeDarkening: Int, darkThemeBri
 		 */
 		internal fun registerMapping(severity: HighlightSeverity, lensSeverity: LensSeverity) {
 			if (mapping.put(severity, lensSeverity) != lensSeverity) {
-				InspectionLensRefresher.scheduleRefresh()
+				InspectionLens.scheduleRefresh()
 			}
 		}
 		
diff --git a/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/LensSeverityFilter.kt b/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/lens/LensSeverityFilter.kt
similarity index 95%
rename from src/main/kotlin/com/chylex/intellij/inspectionlens/editor/LensSeverityFilter.kt
rename to src/main/kotlin/com/chylex/intellij/inspectionlens/editor/lens/LensSeverityFilter.kt
index ab72705..6285740 100644
--- a/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/LensSeverityFilter.kt
+++ b/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/lens/LensSeverityFilter.kt
@@ -1,4 +1,4 @@
-package com.chylex.intellij.inspectionlens.editor
+package com.chylex.intellij.inspectionlens.editor.lens
 
 import com.intellij.codeInsight.daemon.impl.SeverityRegistrar
 import com.intellij.lang.annotation.HighlightSeverity
diff --git a/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/LensSeverityTextAttributes.kt b/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/lens/LensSeverityTextAttributes.kt
similarity index 90%
rename from src/main/kotlin/com/chylex/intellij/inspectionlens/editor/LensSeverityTextAttributes.kt
rename to src/main/kotlin/com/chylex/intellij/inspectionlens/editor/lens/LensSeverityTextAttributes.kt
index 7eaf9c8..4e0037f 100644
--- a/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/LensSeverityTextAttributes.kt
+++ b/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/lens/LensSeverityTextAttributes.kt
@@ -1,4 +1,4 @@
-package com.chylex.intellij.inspectionlens.editor
+package com.chylex.intellij.inspectionlens.editor.lens
 
 import com.intellij.openapi.editor.markup.UnmodifiableTextAttributes
 import com.intellij.ui.JBColor
diff --git a/src/main/kotlin/com/chylex/intellij/inspectionlens/settings/LensApplicationConfigurable.kt b/src/main/kotlin/com/chylex/intellij/inspectionlens/settings/LensApplicationConfigurable.kt
index 5c9760f..d15b64a 100644
--- a/src/main/kotlin/com/chylex/intellij/inspectionlens/settings/LensApplicationConfigurable.kt
+++ b/src/main/kotlin/com/chylex/intellij/inspectionlens/settings/LensApplicationConfigurable.kt
@@ -1,6 +1,6 @@
 package com.chylex.intellij.inspectionlens.settings
 
-import com.chylex.intellij.inspectionlens.editor.LensSeverityFilter
+import com.chylex.intellij.inspectionlens.editor.lens.LensSeverityFilter
 import com.intellij.codeInsight.daemon.impl.SeverityRegistrar
 import com.intellij.lang.annotation.HighlightSeverity
 import com.intellij.openapi.components.service
diff --git a/src/main/kotlin/com/chylex/intellij/inspectionlens/settings/LensSettingsState.kt b/src/main/kotlin/com/chylex/intellij/inspectionlens/settings/LensSettingsState.kt
index 6a625ac..c375e15 100644
--- a/src/main/kotlin/com/chylex/intellij/inspectionlens/settings/LensSettingsState.kt
+++ b/src/main/kotlin/com/chylex/intellij/inspectionlens/settings/LensSettingsState.kt
@@ -1,7 +1,7 @@
 package com.chylex.intellij.inspectionlens.settings
 
-import com.chylex.intellij.inspectionlens.InspectionLensRefresher
-import com.chylex.intellij.inspectionlens.editor.LensSeverityFilter
+import com.chylex.intellij.inspectionlens.InspectionLens
+import com.chylex.intellij.inspectionlens.editor.lens.LensSeverityFilter
 import com.intellij.openapi.components.BaseState
 import com.intellij.openapi.components.SettingsCategory
 import com.intellij.openapi.components.SimplePersistentStateComponent
@@ -38,7 +38,7 @@ class LensSettingsState : SimplePersistentStateComponent<LensSettingsState.State
 	
 	fun update() {
 		severityFilter = createSeverityFilter()
-		InspectionLensRefresher.scheduleRefresh()
+		InspectionLens.scheduleRefresh()
 	}
 	
 	private fun createSeverityFilter(): LensSeverityFilter {
diff --git a/src/test/kotlin/com/chylex/intellij/inspectionlens/EditorLensTest.kt b/src/test/kotlin/com/chylex/intellij/inspectionlens/editor/lens/EditorLensTest.kt
similarity index 91%
rename from src/test/kotlin/com/chylex/intellij/inspectionlens/EditorLensTest.kt
rename to src/test/kotlin/com/chylex/intellij/inspectionlens/editor/lens/EditorLensTest.kt
index dbfc6e0..c8e16d9 100644
--- a/src/test/kotlin/com/chylex/intellij/inspectionlens/EditorLensTest.kt
+++ b/src/test/kotlin/com/chylex/intellij/inspectionlens/editor/lens/EditorLensTest.kt
@@ -1,6 +1,5 @@
-package com.chylex.intellij.inspectionlens
+package com.chylex.intellij.inspectionlens.editor.lens
 
-import com.chylex.intellij.inspectionlens.editor.EditorLensInlay
 import com.intellij.lang.annotation.HighlightSeverity
 import org.junit.jupiter.api.Assertions.assertEquals
 import org.junit.jupiter.api.Nested
@@ -48,7 +47,7 @@ class EditorLensTest {
 		}
 		
 		/**
-		 * If any of these change, re-evaluate [EditorLensInlay.MAXIMUM_SEVERITY] and the priority calculations.
+		 * If any of these changes, re-evaluate [EditorLensInlay.MAXIMUM_SEVERITY] and the priority calculations.
 		 */
 		@Nested
 		inner class IdeaHighlightSeverityAssumptions {