+MAKE_SCHEME_CALLBACK (Stem_tremolo, calc_y_offset, 1);
+SCM
+Stem_tremolo::calc_y_offset (SCM smob)
+{
+ Grob *me = unsmob_grob (smob);
+ return scm_from_double (y_offset (me, false));
+}
+
+MAKE_SCHEME_CALLBACK (Stem_tremolo, pure_calc_y_offset, 3);
+SCM
+Stem_tremolo::pure_calc_y_offset (SCM smob,
+ SCM, /* start */
+ SCM /* end */)
+{
+ Grob *me = unsmob_grob (smob);
+ return scm_from_double (y_offset (me, true));
+}
+
+MAKE_SCHEME_CALLBACK (Stem_tremolo, calc_direction, 1);
+SCM
+Stem_tremolo::calc_direction (SCM smob)
+{
+ Item *me = unsmob_item (smob);
+
+ Item *stem = unsmob_item (me->get_object ("stem"));
+ if (!stem)
+ return scm_from_int (CENTER);
+
+ Direction stemdir = get_grob_direction (stem);
+
+ vector<int> nhp = Stem::note_head_positions (stem);