+Direction
+Note_column::dir (Grob* me)
+{
+ Grob *stem = unsmob_grob (me->get_grob_property ("stem"));
+ if (stem && Stem::has_interface (stem))
+ return Stem::get_direction (stem);
+ else if (gh_pair_p (me->get_grob_property ("note-heads")))
+ return (Direction)sign (head_positions_interval (me).center ());
+
+ programming_error ("Note column without heads and stem!");
+ return CENTER;
+}
+
+
+void
+Note_column::set_stem (Grob*me,Grob * stem)
+{
+ me->set_grob_property ("stem", stem->self_scm ());
+ me->add_dependency (stem);
+ Axis_group_interface::add_element (me, stem);
+}
+
+void
+Note_column::add_head (Grob*me,Grob *h)
+{
+ if (Rest::has_interface (h))
+ {
+ me->set_grob_property ("rest", h->self_scm ());
+ }
+ else if (Note_head::has_interface (h))
+ {
+ Pointer_group_interface::add_grob (me, ly_symbol2scm ("note-heads"),h);
+ }
+ Axis_group_interface::add_element (me, h);
+}