+/*
+ This does not take size into account.
+ maybe rename: on_virtual_staffline, on_staff_or_ledger_line?
+ */
+bool
+Staff_symbol_referencer::on_staffline (Grob *me, int pos)
+{
+ int sz = line_count (me) - 1;
+ return ((pos + sz) % 2) == 0;
+}
+
+Grob*
+Staff_symbol_referencer::get_staff_symbol (Grob *me)
+{
+ if (Staff_symbol::has_interface (me))
+ return me;
+
+ SCM st = me->get_property ("staff-symbol");
+ return unsmob_grob (st);
+}
+
+Real
+Staff_symbol_referencer::staff_space (Grob *me)
+{
+ Grob *st = get_staff_symbol (me);
+ if (st)
+ return Staff_symbol::staff_space (st);
+ return 1.0;
+}
+
+Real
+Staff_symbol_referencer::line_thickness (Grob *me)
+{
+ Grob *st = get_staff_symbol (me);
+ if (st)
+ return Staff_symbol::get_line_thickness (st);
+ return me->get_paper ()->get_dimension (ly_symbol2scm ("linethickness"));
+}
+
+Real
+Staff_symbol_referencer::get_position (Grob *me)