diff -urN ChangeLog ChangeLog
--- ChangeLog	Mon Jan 10 16:11:56 2005
+++ ChangeLog	Mon Jan 10 16:22:48 2005
@@ -1,3 +1,12 @@
+2005-01-10  Erlend Aasland  <erlenda@gmail.com>
+
+	* lily/staff-symbol-referencer.cc: Add new Y-offset callback that
+	adjusts tab noteheads to appear on the strings instead of above them.
+
+	* lily/staff-symbol-referencer.hh: Add declaration for new callback.
+
+	* scm/define-grobs.scm: Make TabNoteHeads use the new callback.
+
 2005-01-10  Han-Wen Nienhuys  <hanwen@xs4all.nl>
 
 	* stepmake/aclocal.m4: do NDEBUG for optimizing builds.
diff -urN lily/include/staff-symbol-referencer.hh lily/include/staff-symbol-referencer.hh
--- lily/include/staff-symbol-referencer.hh	Tue Mar 23 13:42:27 2004
+++ lily/include/staff-symbol-referencer.hh	Mon Jan 10 16:22:09 2005
@@ -25,6 +25,7 @@
   static bool ugly_hack (Grob*);  
   static void set_position (Grob*,Real);
   DECLARE_SCHEME_CALLBACK (callback, (SCM element, SCM axis));
+  DECLARE_SCHEME_CALLBACK (tab_callback, (SCM element, SCM axis));
 
   /**
      Leading are the lead strips between the sticks (lines) of
diff -urN lily/staff-symbol-referencer.cc lily/staff-symbol-referencer.cc
--- lily/staff-symbol-referencer.cc	Tue Dec  7 00:21:10 2004
+++ lily/staff-symbol-referencer.cc	Mon Jan 10 16:22:09 2005
@@ -128,6 +128,25 @@
   return scm_make_real (off);
 }
 
+/* adjust tab noteheads so they are printed on strings */
+MAKE_SCHEME_CALLBACK (Staff_symbol_referencer,tab_callback,2);
+SCM
+Staff_symbol_referencer::tab_callback (SCM element_smob, SCM)
+{
+  Grob *me = unsmob_grob (element_smob);
+
+  SCM pos = me->get_property ("staff-position");
+  Real off = 0.0;
+  if (scm_is_number (pos))
+    {
+      Real space = Staff_symbol_referencer::staff_space (me);
+      off = -0.65 + scm_to_double (pos) * space / 2.0;
+      me->set_property ("staff-position", scm_int2num (0));
+    }
+
+  return scm_make_real (off);
+}
+
 /*  This sets the position relative to the center of the staff symbol.
 
 The function is hairy, because it can be called in two situations:
diff -urN scm/define-grobs.scm scm/define-grobs.scm
--- scm/define-grobs.scm	Sat Jan  8 16:28:43 2005
+++ scm/define-grobs.scm	Mon Jan 10 16:22:09 2005
@@ -1215,7 +1215,7 @@
      . (
 	(style . default)
 	(print-function . ,Text_interface::print)
-	(Y-offset-callbacks . (,Staff_symbol_referencer::callback))
+	(Y-offset-callbacks . (,Staff_symbol_referencer::tab_callback))
 	(stem-attachment-function . ,tablature-stem-attachment-function)
 	(font-series . bold)
 	(meta . ((interfaces
