he->init_have_children = true;
 }
 
+static bool hist_browser__selection_has_children(struct hist_browser *browser)
+{
+       struct hist_entry *he = browser->he_selection;
+       struct map_symbol *ms = browser->selection;
+
+       if (!he || !ms)
+               return false;
+
+       if (ms == &he->ms)
+              return he->has_children;
+
+       return container_of(ms, struct callchain_list, ms)->has_children;
+}
+
+static bool hist_browser__selection_unfolded(struct hist_browser *browser)
+{
+       struct hist_entry *he = browser->he_selection;
+       struct map_symbol *ms = browser->selection;
+
+       if (!he || !ms)
+               return false;
+
+       if (ms == &he->ms)
+              return he->unfolded;
+
+       return container_of(ms, struct callchain_list, ms)->unfolded;
+}
+
+static char *hist_browser__selection_sym_name(struct hist_browser *browser, char *bf, size_t size)
+{
+       struct hist_entry *he = browser->he_selection;
+       struct map_symbol *ms = browser->selection;
+       struct callchain_list *callchain_entry;
+
+       if (!he || !ms)
+               return NULL;
+
+       if (ms == &he->ms) {
+              hist_entry__sym_snprintf(he, bf, size, 0);
+              return bf + 4; // skip the level, e.g. '[k] '
+       }
+
+       callchain_entry = container_of(ms, struct callchain_list, ms);
+       return callchain_list__sym_name(callchain_entry, bf, size, browser->show_dso);
+}
+
 static bool hist_browser__toggle_fold(struct hist_browser *browser)
 {
        struct hist_entry *he = browser->he_selection;
 
 static int add_callchain_toggle_opt(struct hist_browser *browser, struct popup_action *act, char **optstr)
 {
-       struct hist_entry *he = browser->he_selection;
+       char sym_name[512];
 
-        if (!he->has_children)
+        if (!hist_browser__selection_has_children(browser))
                 return 0;
 
-       if (asprintf(optstr, "Expand/Collapse callchain") < 0)
+       if (asprintf(optstr, "%s [%s] callchain (one level, same as '+' hotkey, use 'e'/'c' for the whole main level entry)",
+                    hist_browser__selection_unfolded(browser) ? "Collapse" : "Expand",
+                    hist_browser__selection_sym_name(browser, sym_name, sizeof(sym_name))) < 0)
                return 0;
 
        act->fn = do_toggle_callchain;
 
        return ret;
 }
 
-static int hist_entry__sym_snprintf(struct hist_entry *he, char *bf,
-                                   size_t size, unsigned int width)
+int hist_entry__sym_snprintf(struct hist_entry *he, char *bf, size_t size, unsigned int width)
 {
        return _hist_entry__sym_snprintf(&he->ms, he->ip,
                                         he->level, bf, size, width);