diff --git a/scala/scala-impl/resources/META-INF/scala-plugin-common.xml b/scala/scala-impl/resources/META-INF/scala-plugin-common.xml
index 967ea339881..26d2abca5c3 100644
--- a/scala/scala-impl/resources/META-INF/scala-plugin-common.xml
+++ b/scala/scala-impl/resources/META-INF/scala-plugin-common.xml
@@ -2047,6 +2047,9 @@
         <listener topic="com.intellij.openapi.project.DumbService$DumbModeListener"
                   class="org.jetbrains.plugins.scala.components.TypeAwareWidgetFactory$Listener"/>
 
+        <listener topic="com.intellij.openapi.roots.ModuleRootListener"
+                  class="org.jetbrains.plugins.scala.components.TypeAwareWidgetModuleRootListener"/>
+
         <listener topic="com.intellij.openapi.roots.ModuleRootListener"
                   class="org.jetbrains.plugins.scala.project.ConfigureIncrementalCompilerModuleRootListener"/>
 
diff --git a/scala/scala-impl/src/org/jetbrains/plugins/scala/actions/ToggleTypeAwareHighlightingAction.scala b/scala/scala-impl/src/org/jetbrains/plugins/scala/actions/ToggleTypeAwareHighlightingAction.scala
index a6a0e212265..63fe67e0955 100644
--- a/scala/scala-impl/src/org/jetbrains/plugins/scala/actions/ToggleTypeAwareHighlightingAction.scala
+++ b/scala/scala-impl/src/org/jetbrains/plugins/scala/actions/ToggleTypeAwareHighlightingAction.scala
@@ -8,7 +8,7 @@ import com.intellij.openapi.project.Project
 import com.intellij.util.FileContentUtil
 import org.jetbrains.plugins.scala.ScalaBundle
 import org.jetbrains.plugins.scala.actions.ToggleTypeAwareHighlightingAction.toggleSettingAndRehighlight
-import org.jetbrains.plugins.scala.components.TypeAwareWidgetFactory
+import org.jetbrains.plugins.scala.components.TypeAwareWidgetUpdater
 import org.jetbrains.plugins.scala.extensions._
 import org.jetbrains.plugins.scala.settings.ScalaProjectSettings
 
@@ -35,9 +35,7 @@ object ToggleTypeAwareHighlightingAction {
     val settings = ScalaProjectSettings.getInstance(project)
     settings.toggleTypeAwareHighlighting()
 
-    project.getMessageBus
-      .syncPublisher(TypeAwareWidgetFactory.Topic)
-      .updateWidget()
+    TypeAwareWidgetUpdater.updateWidget(project)
 
     invokeLater(ModalityState.nonModal()) {
       reparseActiveFiles(project)
diff --git a/scala/scala-impl/src/org/jetbrains/plugins/scala/components/TypeAwareWidget.scala b/scala/scala-impl/src/org/jetbrains/plugins/scala/components/TypeAwareWidget.scala
index f78703b04a0..f17275e309d 100644
--- a/scala/scala-impl/src/org/jetbrains/plugins/scala/components/TypeAwareWidget.scala
+++ b/scala/scala-impl/src/org/jetbrains/plugins/scala/components/TypeAwareWidget.scala
@@ -3,43 +3,22 @@ package org.jetbrains.plugins.scala.components
 import com.intellij.openapi.actionSystem.ActionManager
 import com.intellij.openapi.keymap.KeymapUtil
 import com.intellij.openapi.project.Project
+import com.intellij.openapi.wm.StatusBarWidget
 import com.intellij.openapi.wm.StatusBarWidget.WidgetPresentation
-import com.intellij.openapi.wm.impl.status.widget.StatusBarWidgetsManager
-import com.intellij.openapi.wm.{StatusBar, StatusBarWidget}
 import com.intellij.util.Consumer
-import com.intellij.util.messages.MessageBusConnection
 import org.jetbrains.plugins.scala.ScalaBundle
 import org.jetbrains.plugins.scala.actions.ToggleTypeAwareHighlightingAction
-import org.jetbrains.plugins.scala.extensions.invokeLater
 import org.jetbrains.plugins.scala.icons.Icons
-import org.jetbrains.plugins.scala.project.ProjectExt
 import org.jetbrains.plugins.scala.settings.ScalaProjectSettings
 
 import java.awt.event.MouseEvent
 import javax.swing.Icon
 
-private final class TypeAwareWidget(project: Project, factory: TypeAwareWidgetFactory)
-  extends StatusBarWidget
-    with StatusBarWidget.IconPresentation
-    with TypeAwareWidgetFactory.UpdateListener {
-
-  private var statusBar: StatusBar = _
-  private val connection: MessageBusConnection = project.getMessageBus.connect()
-  private val widgetsManager: StatusBarWidgetsManager = project.getService(classOf[StatusBarWidgetsManager])
+private final class TypeAwareWidget(project: Project)
+  extends StatusBarWidget with StatusBarWidget.IconPresentation {
 
   override def ID(): String = TypeAwareWidgetFactory.ID
 
-  override def install(statusBar: StatusBar): Unit = synchronized {
-    this.statusBar = statusBar
-    connection.subscribe(TypeAwareWidgetFactory.Topic, this)
-    subscribeToRootsChange()
-  }
-
-  override def dispose(): Unit = synchronized {
-    connection.dispose()
-    statusBar = null
-  }
-
   override def getPresentation: WidgetPresentation = this
 
   override def getIcon: Icon =
@@ -61,13 +40,6 @@ private final class TypeAwareWidget(project: Project, factory: TypeAwareWidgetFa
   override def getClickConsumer: Consumer[MouseEvent] =
     _ => ToggleTypeAwareHighlightingAction.toggleSettingAndRehighlight(project)
 
-  override def updateWidget(): Unit = synchronized {
-    if (statusBar ne null) {
-      widgetsManager.updateWidget(factory)
-      statusBar.updateWidget(ID())
-    }
-  }
-
   private def isEnabled: Boolean =
     ScalaProjectSettings.getInstance(project).isTypeAwareHighlightingEnabled
 
@@ -75,12 +47,4 @@ private final class TypeAwareWidget(project: Project, factory: TypeAwareWidgetFa
     val action = ActionManager.getInstance().getAction("Scala.EnableErrors")
     action.getShortcutSet.getShortcuts.headOption.map(KeymapUtil.getShortcutText)
   }
-
-  private def subscribeToRootsChange(): Unit = {
-    project.subscribeToModuleRootChanged() { _ =>
-      invokeLater {
-        updateWidget()
-      }
-    }
-  }
 }
diff --git a/scala/scala-impl/src/org/jetbrains/plugins/scala/components/TypeAwareWidgetFactory.scala b/scala/scala-impl/src/org/jetbrains/plugins/scala/components/TypeAwareWidgetFactory.scala
index 49c9d071d7a..1fe6b0d6808 100644
--- a/scala/scala-impl/src/org/jetbrains/plugins/scala/components/TypeAwareWidgetFactory.scala
+++ b/scala/scala-impl/src/org/jetbrains/plugins/scala/components/TypeAwareWidgetFactory.scala
@@ -5,12 +5,9 @@ import com.intellij.openapi.project.Project
 import com.intellij.openapi.util.Disposer
 import com.intellij.openapi.wm.impl.status.widget.StatusBarWidgetsManager
 import com.intellij.openapi.wm.{StatusBar, StatusBarWidget, StatusBarWidgetFactory}
-import com.intellij.util.messages.Topic
 import org.jetbrains.plugins.scala.ScalaBundle
 import org.jetbrains.plugins.scala.project.ProjectExt
 
-import scala.jdk.CollectionConverters._
-
 private final class TypeAwareWidgetFactory extends StatusBarWidgetFactory {
   override def getId: String = TypeAwareWidgetFactory.ID
 
@@ -18,7 +15,7 @@ private final class TypeAwareWidgetFactory extends StatusBarWidgetFactory {
 
   override def isAvailable(project: Project): Boolean = project.isOpen && project.hasScala
 
-  override def createWidget(project: Project): StatusBarWidget = new TypeAwareWidget(project, this)
+  override def createWidget(project: Project): StatusBarWidget = new TypeAwareWidget(project)
 
   override def disposeWidget(widget: StatusBarWidget): Unit = {
     Disposer.dispose(widget)
@@ -27,14 +24,8 @@ private final class TypeAwareWidgetFactory extends StatusBarWidgetFactory {
   override def canBeEnabledOn(statusBar: StatusBar): Boolean = isAvailable(statusBar.getProject)
 }
 
-private[scala] object TypeAwareWidgetFactory {
-  private[components] val ID: String = "TypeAwareHighlighting"
-
-  trait UpdateListener {
-    def updateWidget(): Unit
-  }
-
-  val Topic: Topic[UpdateListener] = new Topic("TypeAwareHighlightingWidget update", classOf[UpdateListener])
+private object TypeAwareWidgetFactory {
+  val ID: String = "TypeAwareHighlighting"
 
   final class Listener(project: Project) extends DumbModeListener {
 
@@ -55,7 +46,7 @@ private[scala] object TypeAwareWidgetFactory {
      */
     override def exitDumbMode(): Unit = {
       val service = project.getService(classOf[StatusBarWidgetsManager])
-      service.getWidgetFactories.asScala.find(_.getId == ID).foreach(service.updateWidget)
+      service.updateWidget(classOf[TypeAwareWidgetFactory])
     }
   }
 }
diff --git a/scala/scala-impl/src/org/jetbrains/plugins/scala/components/TypeAwareWidgetModuleRootListener.scala b/scala/scala-impl/src/org/jetbrains/plugins/scala/components/TypeAwareWidgetModuleRootListener.scala
new file mode 100644
index 00000000000..3cd523d60f7
--- /dev/null
+++ b/scala/scala-impl/src/org/jetbrains/plugins/scala/components/TypeAwareWidgetModuleRootListener.scala
@@ -0,0 +1,11 @@
+package org.jetbrains.plugins.scala.components
+
+import com.intellij.openapi.project.Project
+import com.intellij.openapi.roots.{ModuleRootEvent, ModuleRootListener}
+
+private final class TypeAwareWidgetModuleRootListener(project: Project) extends ModuleRootListener {
+  override def rootsChanged(event: ModuleRootEvent): Unit = {
+    if (!event.isCausedByWorkspaceModelChangesOnly) return
+    TypeAwareWidgetUpdater.updateWidget(project)
+  }
+}
diff --git a/scala/scala-impl/src/org/jetbrains/plugins/scala/components/TypeAwareWidgetUpdater.scala b/scala/scala-impl/src/org/jetbrains/plugins/scala/components/TypeAwareWidgetUpdater.scala
new file mode 100644
index 00000000000..3fb9c61b9f9
--- /dev/null
+++ b/scala/scala-impl/src/org/jetbrains/plugins/scala/components/TypeAwareWidgetUpdater.scala
@@ -0,0 +1,15 @@
+package org.jetbrains.plugins.scala.components
+
+import com.intellij.openapi.project.Project
+import com.intellij.openapi.wm.WindowManager
+import com.intellij.openapi.wm.impl.status.widget.StatusBarWidgetsManager
+
+object TypeAwareWidgetUpdater {
+  def updateWidget(project: Project): Unit = {
+    if (project.isDisposed) return
+    project.getService(classOf[StatusBarWidgetsManager]).updateWidget(classOf[TypeAwareWidgetFactory])
+    val statusBar = WindowManager.getInstance().getStatusBar(project)
+    if (statusBar eq null) return
+    statusBar.updateWidget(TypeAwareWidgetFactory.ID)
+  }
+}