+ return on_staffline (me, (int) rint (get_position (me)));
+}
+
+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)
+{
+ SCM st = me->get_grob_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_realvar (ly_symbol2scm ("linethickness"));
+}
+
+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)