+ return on_staff_line (me, (int) rint (get_position (me)));
+}
+
+bool
+Staff_symbol_referencer::on_line (Grob *me, int pos)
+{
+ int sz = line_count (me) - 1;
+ return ((pos + sz) % 2) == 0;
+}
+
+bool
+Staff_symbol_referencer::on_staff_line (Grob *me, int pos)
+{
+ return on_line (me, pos) && abs (pos) <= 2 * staff_radius (me);
+}
+
+Grob *
+Staff_symbol_referencer::get_staff_symbol (Grob *me)
+{
+ if (Staff_symbol::has_interface (me))
+ return me;
+
+ SCM st = me->get_object ("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->layout ()->get_dimension (ly_symbol2scm ("line-thickness"));
+}
+
+Real
+Staff_symbol_referencer::get_position (Grob *me)
+{
+ Real p = 0.0;
+ Grob *st = get_staff_symbol (me);
+ Grob *c = st ? me->common_refpoint (st, Y_AXIS) : 0;
+ if (st && c)