set_last_module (context, map);
       if (! MAIN_FILE_P (map))
        {
-         bool first = true;
+         bool first = true, need_inc = true, was_module = MAP_MODULE_P (map);
          expanded_location s = {};
          do
            {
              where = linemap_included_from (map);
              map = linemap_included_from_linemap (line_table, map);
+             bool is_module = MAP_MODULE_P (map);
              s.file = LINEMAP_FILE (map);
              s.line = SOURCE_LINE (map, where);
              int col = -1;
              const char *line_col = maybe_line_and_column (s.line, col);
              static const char *const msgs[] =
                {
-                N_("In file included from"),
+                NULL,
                 N_("                 from"),
+                N_("In file included from"),   /* 2 */
+                N_("        included from"),
+                N_("In module"),               /* 4 */
+                N_("of module"),
+                N_("In module imported at"),   /* 6 */
+                N_("imported at"),
                };
-             unsigned index = !first;
+
+             unsigned index = (was_module ? 6 : is_module ? 4
+                               : need_inc ? 2 : 0) + !first;
+
              pp_verbatim (context->printer, "%s%s %r%s%s%R",
-                          first ? "" : ",\n", _(msgs[index]),
+                          first ? "" : was_module ? ", " : ",\n",
+                          _(msgs[index]),
                           "locus", s.file, line_col);
-             first = false;
+             first = false, need_inc = was_module, was_module = is_module;
            }
          while (! MAIN_FILE_P (map));
          pp_verbatim (context->printer, ":");