+ else
+ gpi.pop (ev->get_property ("property-path"));
+}
+
+void
+Engraver_group::connect_to_context (Context *c)
+{
+ Translator_group::connect_to_context (c);
+ c->event_source ()->add_listener (GET_LISTENER (Engraver_group, override), ly_symbol2scm ("Override"));
+ c->event_source ()->add_listener (GET_LISTENER (Engraver_group, revert), ly_symbol2scm ("Revert"));
+}
+
+void
+Engraver_group::disconnect_from_context ()
+{
+ context ()->event_source ()->remove_listener (GET_LISTENER (Engraver_group, override), ly_symbol2scm ("Override"));
+ context ()->event_source ()->remove_listener (GET_LISTENER (Engraver_group, revert), ly_symbol2scm ("Revert"));
+ Translator_group::disconnect_from_context ();
+}
+
+void
+Engraver_group::announce_grob (Grob_info info, Direction dir,
+ Context *reroute_context)
+{
+ announce_infos_.push_back (Announce_grob_info (info, dir));
+
+ Context *dad_con = reroute_context ? reroute_context
+ : context_->get_parent_context ();
+
+ Engraver_group *dad_eng
+ = dad_con
+ ? dynamic_cast<Engraver_group *> (dad_con->implementation ())
+ : 0;
+
+ if (dad_eng)
+ dad_eng->announce_grob (info, dir);
+}
+
+void
+Engraver_group::acknowledge_grobs ()
+{
+ if (!announce_infos_.size ())
+ return;