diff --git a/java/debugger/impl/src/com/intellij/debugger/impl/HotSwapManager.java b/java/debugger/impl/src/com/intellij/debugger/impl/HotSwapManager.java
index 11636bbca546131ed0c6c4f94f5654943ae55f94..6c9e0cfdd9dd16f0b9b276581d4a3cde2b119565 100644
--- a/java/debugger/impl/src/com/intellij/debugger/impl/HotSwapManager.java
+++ b/java/debugger/impl/src/com/intellij/debugger/impl/HotSwapManager.java
@@ -196,6 +196,6 @@ public class HotSwapManager extends AbstractProjectComponent {
 
     reloadClassesProgress.setTitle(DebuggerBundle.message("progress.hotswap.reloading"));
     reloadClassesCommand.run();
-    ActionsCollector.getInstance().record("Reload Classes");
+    ActionsCollector.getInstance().record("Reload Classes", HotSwapManager.class);
   }
 }
diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonTooltipActionProvider.kt b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonTooltipActionProvider.kt
index ea3df5211ae0fc4a920b49ba0319ad9b5034b63d..9a4a7013513deb2798dbfc89291013cdd4b11be2 100644
--- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonTooltipActionProvider.kt
+++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonTooltipActionProvider.kt
@@ -32,7 +32,7 @@ class DaemonTooltipAction(private val myFixText: String, private val myActualOff
   }
 
   override fun execute(editor: Editor) {
-    ActionsCollector.getInstance().record("tooltip.actions.execute")
+    ActionsCollector.getInstance().record("tooltip.actions.execute", this::class.java)
 
     val project = editor.project ?: return
     val psiFile = PsiDocumentManager.getInstance(project).getPsiFile(editor.document) ?: return
@@ -52,7 +52,7 @@ class DaemonTooltipAction(private val myFixText: String, private val myActualOff
   }
 
   override fun showAllActions(editor: Editor) {
-    ActionsCollector.getInstance().record("tooltip.actions.show.all")
+    ActionsCollector.getInstance().record("tooltip.actions.show.all", this::class.java)
 
     editor.caretModel.moveToOffset(myActualOffset)
     val project = editor.project ?: return
diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonTooltipWithActionRenderer.kt b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonTooltipWithActionRenderer.kt
index c017f6962a22d5b07cabc8dcf5402008a18f59a0..083648794fd62ade7bd71835f83c14190bd20f89 100644
--- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonTooltipWithActionRenderer.kt
+++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonTooltipWithActionRenderer.kt
@@ -325,7 +325,7 @@ internal class DaemonTooltipWithActionRenderer(text: String?,
     }
 
     override fun setSelected(e: AnActionEvent, state: Boolean) {
-      ActionsCollector.getInstance().record("tooltip.actions.show.description.gear")
+      ActionsCollector.getInstance().record("tooltip.actions.show.description.gear", this::class.java)
       reloader.reload(state)
     }
 
diff --git a/platform/platform-api/src/com/intellij/ide/actions/ActionsCollector.java b/platform/platform-api/src/com/intellij/ide/actions/ActionsCollector.java
index 0569a22be8abbd43371cb1f350800a0edca39e30..b85a0baad600c0c8c8040c42544b677483f7df63 100644
--- a/platform/platform-api/src/com/intellij/ide/actions/ActionsCollector.java
+++ b/platform/platform-api/src/com/intellij/ide/actions/ActionsCollector.java
@@ -4,6 +4,8 @@ package com.intellij.ide.actions;
 import com.intellij.openapi.components.ServiceManager;
 import com.intellij.util.xmlb.annotations.MapAnnotation;
 import com.intellij.util.xmlb.annotations.Tag;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -12,7 +14,17 @@ import java.util.Map;
  * @author Konstantin Bulenkov
  */
 public abstract class ActionsCollector {
-  public abstract void record(String actionId);
+  /**
+   * Only actions from platform and JB plugins are recorded.
+   * If no context class is provided then nothing will be recorded.
+   * @deprecated
+   */
+  public void record(String actionId) {}
+
+  /**
+   * Only actions from platform and JB plugins are recorded.
+   */
+  public abstract void record(@Nullable String actionId, @NotNull Class context);
 
   public abstract State getState();
 
diff --git a/platform/platform-api/src/com/intellij/openapi/ui/DialogWrapper.java b/platform/platform-api/src/com/intellij/openapi/ui/DialogWrapper.java
index 5be385fad6ca826ff95874419e74a721221418d8..3a24110262fe5f4c08b5cee6e5b5b33a0c495e65 100644
--- a/platform/platform-api/src/com/intellij/openapi/ui/DialogWrapper.java
+++ b/platform/platform-api/src/com/intellij/openapi/ui/DialogWrapper.java
@@ -1877,7 +1877,7 @@ public abstract class DialogWrapper {
   private void recordAction(String name, AWTEvent event) {
     if (event instanceof KeyEvent && ApplicationManager.getApplication() != null) {
       String shortcut = getKeystrokeText(KeyStroke.getKeyStrokeForEvent((KeyEvent)event));
-      ActionsCollector.getInstance().record(name + " " + shortcut);
+      ActionsCollector.getInstance().record(name + " " + shortcut, DialogWrapper.class);
     }
   }
 
diff --git a/platform/platform-impl/src/com/intellij/codeInsight/hint/LineTooltipRenderer.java b/platform/platform-impl/src/com/intellij/codeInsight/hint/LineTooltipRenderer.java
index 5f3691c2cb752de40fb59f66d0c1f3ae329ea2ce..5e239bb13975e1e695fb955939674110f8160f1d 100644
--- a/platform/platform-impl/src/com/intellij/codeInsight/hint/LineTooltipRenderer.java
+++ b/platform/platform-impl/src/com/intellij/codeInsight/hint/LineTooltipRenderer.java
@@ -172,7 +172,7 @@ public class LineTooltipRenderer extends ComparableObject.Impl implements Toolti
       public void actionPerformed(final AnActionEvent e) {
         // The tooltip gets the focus if using a screen reader and invocation through a keyboard shortcut.
         hintHint.setRequestFocus(ScreenReader.isActive() && (e.getInputEvent() instanceof KeyEvent));
-        ActionsCollector.getInstance().record("tooltip.actions.show.description.shortcut");
+        ActionsCollector.getInstance().record("tooltip.actions.show.description.shortcut", this.getClass());
         reloader.reload(!expanded);
       }
     });
@@ -200,7 +200,7 @@ public class LineTooltipRenderer extends ComparableObject.Impl implements Toolti
             return;
           }
 
-          ActionsCollector.getInstance().record("tooltip.actions.show.description.morelink");
+          ActionsCollector.getInstance().record("tooltip.actions.show.description.morelink", this.getClass());
 
           reloader.reload(!expanded);
         }
diff --git a/platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/actions/persistence/ActionsCollectorImpl.java b/platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/actions/persistence/ActionsCollectorImpl.java
index baca49afa681c7ecf7a559e9826d6ea9b1625a39..2ce841bcab53dd8b1bf90da2b54f4625c0f651d0 100644
--- a/platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/actions/persistence/ActionsCollectorImpl.java
+++ b/platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/actions/persistence/ActionsCollectorImpl.java
@@ -2,6 +2,10 @@
 package com.intellij.internal.statistic.collectors.fus.actions.persistence;
 
 import com.intellij.ide.actions.ActionsCollector;
+import com.intellij.ide.plugins.IdeaPluginDescriptor;
+import com.intellij.ide.plugins.PluginManager;
+import com.intellij.ide.plugins.PluginManagerCore;
+import com.intellij.ide.plugins.PluginManagerMain;
 import com.intellij.internal.statistic.beans.ConvertUsagesUtil;
 import com.intellij.internal.statistic.eventLog.FeatureUsageLogger;
 import com.intellij.internal.statistic.persistence.UsageStatisticsPersistenceComponent;
@@ -9,9 +13,13 @@ import com.intellij.openapi.components.PersistentStateComponent;
 import com.intellij.openapi.components.RoamingType;
 import com.intellij.openapi.components.State;
 import com.intellij.openapi.components.Storage;
+import com.intellij.openapi.extensions.PluginId;
+import gnu.trove.THashSet;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
+import java.util.Set;
+
 /**
  * @author Konstantin Bulenkov
  */
@@ -23,19 +31,32 @@ import org.jetbrains.annotations.Nullable;
   }
 )
 public class ActionsCollectorImpl extends ActionsCollector implements PersistentStateComponent<ActionsCollector.State> {
-  public void record(String actionId) {
+  private static final String DEFAULT_ID = "third.party.plugin.action";
+  private final Set<String> myJBActions = new THashSet<>();
+
+  public void record(@Nullable String actionId, @NotNull Class context) {
     if (actionId == null) return;
 
     State state = getState();
     if (state == null) return;
 
     String key = ConvertUsagesUtil.escapeDescriptorName(actionId);
+    if (!myJBActions.contains(key)) {
+      key = isDevelopedByJetBrains(context) ? key : DEFAULT_ID;
+      myJBActions.add(key);
+    }
     FeatureUsageLogger.INSTANCE.log("actions", key);
     final Integer count = state.myValues.get(key);
     int value = count == null ? 1 : count + 1;
     state.myValues.put(key, value);
   }
 
+  private static boolean isDevelopedByJetBrains(@NotNull Class aClass) {
+    final PluginId pluginId = PluginManagerCore.getPluginByClassName(aClass.getName());
+    final IdeaPluginDescriptor plugin = PluginManager.getPlugin(pluginId);
+    return plugin == null || plugin.isBundled() || PluginManagerMain.isDevelopedByJetBrains(plugin);
+  }
+
   private State myState = new State();
 
   @Nullable
diff --git a/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionManagerImpl.java b/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionManagerImpl.java
index 95f772fde587d3088d5f45b9324afc46f90d91be..456320ee40caf1dd9006a43e570a522e2243b859 100644
--- a/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionManagerImpl.java
+++ b/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionManagerImpl.java
@@ -1202,7 +1202,7 @@ public final class ActionManagerImpl extends ActionManagerEx implements Disposab
       }
       //noinspection AssignmentToStaticFieldFromInstanceMethod
       IdeaLogger.ourLastActionId = myLastPreformedActionId;
-      ActionsCollectorImpl.getInstance().record(myLastPreformedActionId);
+      ActionsCollectorImpl.getInstance().record(myLastPreformedActionId, action.getClass());
     }
     for (AnActionListener listener : myActionListeners) {
       listener.beforeActionPerformed(action, dataContext, event);
diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/InfoAndProgressPanel.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/InfoAndProgressPanel.java
index ee9ec264c3da05f83e59cfe82af8afe5f54867e9..19622fdda20d531035f8223076ecc3ffebc584c0 100644
--- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/InfoAndProgressPanel.java
+++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/InfoAndProgressPanel.java
@@ -703,7 +703,10 @@ public class InfoAndProgressPanel extends JPanel implements CustomStatusBarWidge
         } else {
           suspender.suspendProcess(null);
         }
-        ActionsCollector.getInstance().record(suspender.isSuspended() ? "Progress Paused" : "Progress Resumed");
+        ActionsCollector.getInstance().record(
+          suspender.isSuspended() ? "Progress Paused" : "Progress Resumed",
+          MyInlineProgressIndicator.class
+        );
       }).setFillBg(false);
       suspendButton.setVisible(false);
 
diff --git a/plugins/settings-repository/src/upstreamEditor.kt b/plugins/settings-repository/src/upstreamEditor.kt
index 034a7b9d073d312b23deffff6adbd6afff889298..3001bb9d4ae1eb8a325a06286ddf5b6d3db6d346 100644
--- a/plugins/settings-repository/src/upstreamEditor.kt
+++ b/plugins/settings-repository/src/upstreamEditor.kt
@@ -45,7 +45,7 @@ fun createMergeActions(project: Project?, urlTextField: TextFieldWithBrowseButto
       }
 
       override fun actionPerformed(event: ActionEvent) {
-        ActionsCollector.getInstance().record("Ics.${getValue(Action.NAME)}")
+        ActionsCollector.getInstance().record("Ics.${getValue(Action.NAME)}", icsManager::class.java)
         val repositoryWillBeCreated = !icsManager.repositoryManager.isRepositoryExists()
         var upstreamSet = false
         try {