From 9414e14161524c3d2663b4c73a8b1df04e101d8f Mon Sep 17 00:00:00 2001
From: hanwen <hanwen>
Date: Mon, 3 May 2004 23:16:25 +0000
Subject: [PATCH] update for the lily-wins.py script.

---
 ChangeLog                               | 20 +++++++
 Documentation/user/notation.itely       |  2 +
 THANKS                                  |  3 +-
 cygwin/lily-wins.py                     | 69 +++++++++++++++++++------
 lily/accidental-engraver.cc             | 10 ++--
 lily/ambitus-engraver.cc                |  3 +-
 lily/arpeggio-engraver.cc               |  3 +-
 lily/axis-group-engraver.cc             |  6 +--
 lily/bar-engraver.cc                    |  4 +-
 lily/bar-number-engraver.cc             |  4 +-
 lily/beam-engraver.cc                   |  3 +-
 lily/break-align-engraver.cc            | 17 +++---
 lily/breathing-sign-engraver.cc         |  4 +-
 lily/chord-name-engraver.cc             |  4 +-
 lily/chord-tremolo-engraver.cc          | 22 ++++----
 lily/clef-engraver.cc                   |  8 +--
 lily/cluster-engraver.cc                |  6 +--
 lily/collision-engraver.cc              |  4 +-
 lily/completion-note-heads-engraver.cc  | 10 ++--
 lily/custos-engraver.cc                 |  4 +-
 lily/dot-column-engraver.cc             |  4 +-
 lily/drum-note-engraver.cc              | 12 ++---
 lily/dynamic-engraver.cc                | 15 +++---
 lily/extender-engraver.cc               |  3 +-
 lily/figured-bass-engraver.cc           |  6 +--
 lily/fingering-engraver.cc              |  3 +-
 lily/glissando-engraver.cc              |  3 +-
 lily/horizontal-bracket-engraver.cc     |  3 +-
 lily/hyphen-engraver.cc                 |  4 +-
 lily/include/engraver.hh                | 18 ++++---
 lily/instrument-name-engraver.cc        |  8 +--
 lily/item.cc                            |  4 +-
 lily/key-engraver.cc                    |  3 +-
 lily/ligature-bracket-engraver.cc       |  2 +-
 lily/ligature-engraver.cc               |  5 +-
 lily/lyric-engraver.cc                  |  3 +-
 lily/mark-engraver.cc                   |  3 +-
 lily/measure-grouping-engraver.cc       |  4 +-
 lily/mensural-ligature-engraver.cc      |  2 +-
 lily/metronome-engraver.cc              |  3 +-
 lily/multi-measure-rest-engraver.cc     | 11 ++--
 lily/new-fingering-engraver.cc          |  6 +--
 lily/note-head-line-engraver.cc         |  3 +-
 lily/note-heads-engraver.cc             |  7 ++-
 lily/note-name-engraver.cc              |  3 +-
 lily/ottava-engraver.cc                 |  4 +-
 lily/part-combine-engraver.cc           |  3 +-
 lily/percent-repeat-engraver.cc         |  7 +--
 lily/performance.cc                     |  4 --
 lily/phrasing-slur-engraver.cc          |  3 +-
 lily/piano-pedal-engraver.cc            | 23 ++++-----
 lily/rest-collision-engraver.cc         |  4 +-
 lily/rest-engraver.cc                   |  7 ++-
 lily/rhythmic-column-engraver.cc        |  7 ++-
 lily/score-engraver.cc                  | 18 ++++---
 lily/script-column-engraver.cc          |  4 +-
 lily/script-engraver.cc                 |  5 +-
 lily/separating-line-group-engraver.cc  | 12 ++---
 lily/slash-repeat-engraver.cc           |  3 +-
 lily/slur-engraver.cc                   |  3 +-
 lily/spacing-engraver.cc                |  4 +-
 lily/span-arpeggio-engraver.cc          |  4 +-
 lily/span-bar-engraver.cc               |  4 +-
 lily/staff-symbol-engraver.cc           |  4 +-
 lily/stanza-number-engraver.cc          |  4 +-
 lily/stem-engraver.cc                   | 12 ++---
 lily/system-start-delimiter-engraver.cc |  4 +-
 lily/system.cc                          | 10 ++--
 lily/tab-note-heads-engraver.cc         |  7 ++-
 lily/text-engraver.cc                   |  3 +-
 lily/text-spanner-engraver.cc           |  3 +-
 lily/tie-engraver.cc                    |  7 ++-
 lily/time-signature-engraver.cc         |  5 +-
 lily/translator-property.cc             | 22 ++++++--
 lily/tuplet-engraver.cc                 |  3 +-
 lily/vaticana-ligature-engraver.cc      |  2 +-
 lily/vertical-align-engraver.cc         |  4 +-
 lily/volta-engraver.cc                  |  4 +-
 scm/music-functions.scm                 |  8 +--
 79 files changed, 288 insertions(+), 277 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index e62fe00c77..5b1e512b07 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,23 @@
+2004-05-04  Han-Wen Nienhuys   <hanwen@xs4all.nl>
+
+	* cygwin/lily-wins.py: update for the lily-wins.py script.
+
+2004-05-03  Han-Wen Nienhuys   <hanwen@xs4all.nl>
+
+	* lily/score-engraver.cc (typeset_all): switch off unbound spanner
+	code. This will obviate typeset_grob () in the future.  The effect
+	of this is that improperly written spanner handling will result in
+	invalid spanner bounds.
+	(announce_grob): add to elems_ from here
+	(typeset_grob): comment out.  
+
+	* lily/include/engraver.hh (make_spanner): new calling interface
+	for make_{item,spanner}. This obviates most calls to
+	announce_grob().
+		
+	* scm/music-functions.scm (set-accidental-style): use GrandStaff
+	iso. PianoStaff for piano styles.
+
 2004-05-03  Heikki Junes <hjunes@cc.hut.fi>
 
 	* Documentation/user/music-glossary.tely: add segno after d.s.
diff --git a/Documentation/user/notation.itely b/Documentation/user/notation.itely
index 21213b117b..067b51b20c 100644
--- a/Documentation/user/notation.itely
+++ b/Documentation/user/notation.itely
@@ -1436,6 +1436,8 @@ behavior can be changed by setting @code{allowBeamBreak}.
 Automatically kneed cross-staff beams cannot be used together with
 hidden staves.
 
+Beams do not avoid collisions with symbols around the notes, such as
+texts and accidentals.
 
 
 
diff --git a/THANKS b/THANKS
index 4e6bb383c1..38a7ad7ff6 100644
--- a/THANKS
+++ b/THANKS
@@ -23,7 +23,8 @@ Peter Rosenbeck
 Stephen Pollei
 Bertalan Fodor
 Thomas Scharlowski
-
+Yuval Harel
+Martin Norbäck
 
 Release 2.2
 ***********
diff --git a/cygwin/lily-wins.py b/cygwin/lily-wins.py
index 299cfe46f8..06d22595e5 100644
--- a/cygwin/lily-wins.py
+++ b/cygwin/lily-wins.py
@@ -1,16 +1,21 @@
 #!@PYTHON@
 # lily-wins.py -- LilyPond command for .ly on Windows
 
+import getopt
 import os
 import re
 import sys
+import time
+
+do_debug = 0
 
 def usage ():
 	print 'Usage [-h,--help] lily-wins LY-FILE'
 
 # print debugging stuff for now
 def debug (s):
-	print s
+	if do_debug:
+		print s
 
 def read_pipe (command):
 	debug ('command:' + command)
@@ -33,16 +38,36 @@ def escape_shell (x):
  	return re.sub ("(\s|[`'\"\\\\])", r'\\\1',x)
 #	return re.sub (r'''([^\\])([`'"\\\s])''', r'\1\\\2', x)
         # help emacs'" broken python mode
+
+def usage ():
+	print '''lily-wins [options] file
+
+Options supported:
+
+  -h, --help      this help screen
+  -d, --debug     print debugging information
+  
+'''
 	
 debug (`sys.argv`)
 
-if len (sys.argv) != 2 \
-   or sys.argv[1] == '-h' or sys.argv[1] == '--help':
+########
+# main
+(opts, files)=getopt.getopt (sys.argv[1:],'dh', ['help', 'debug'])
+
+for (o,a) in opts:
+	if o == '-d' or o == '--debug':
+		do_debug = 1
+	elif o == '-h' or o  == '--help':
+		usage ()
+		sys.exit (0)
+
+if files == []:
 	usage ()
-	sys.exit (0)
-	
-native_file = sys.argv[1]
+	sys.exit (1)
 	
+native_file = files[0]
+print 'Processing %s ...' % native_file
 file = read_pipe ('/usr/bin/cygpath -au %s' % escape_shell (native_file))
 if not file:
 	file = native_file
@@ -54,7 +79,7 @@ if not dir:
 	dir = '.'
 base = os.path.basename (file)
 stem = strip_extension (base, '.ly')
-print `vars ()`
+debug ( `vars ()`)
 
 native_base = '%(dir)s/%(stem)s' % vars ()
 native_base = read_pipe ('/usr/bin/cygpath -aw %s' % escape_shell (native_base))
@@ -78,14 +103,28 @@ if not pdfview:
 	pdfview = 'xpdf'
 
 os.chdir (dir)
+pdffile = '%(stem)s.pdf' % vars ()
+if os.path.exists (pdffile):
+	os.unlink (pdffile)
+
+
+script = '/usr/bin/lilypond'
+
 if os.path.exists ('/usr/bin/ly2dvi'):
-	system ('/usr/bin/ly2dvi -p %s > %s.log 2>&1' % (escape_shell (base),
-							 escape_shell (stem)))
-else:
-	system ('/usr/bin/lilypond %s > %s.log 2>&1' % (escape_shell (base),
-							escape_shell (stem)))
-if not os.path.exists ('%(stem)s.pdf' % vars ()):
+	script = '/usr/bin/ly2dvi'
+
+stat = system ('%s -p %s > %s.log 2>&1' % (script, escape_shell (base),
+				    escape_shell (stem)))
+
+if not os.path.exists (pdffile):
 	# message box?
-	sys.stderr.write ('pdf output not found\n')
+	sys.stderr.write ('PDF output not found. Error log: \n')
 
-system ('%s %s.pdf' % (escape_shell (pdfview), escape_shell (native_base)))
+	map (sys.stderr.write, open (stem + '.log').readlines ()[-20:])
+	sys.stderr.write ('A full log is in the file %s.log\n' % stem)
+	sys.stderr.write ('\n\nPress enter to close window\n')
+	sys.stdin.readline ()
+else:
+	
+	# run even if failed, to make sure that error 
+	system ('%s %s.pdf' % (escape_shell (pdfview), escape_shell (native_base)))
diff --git a/lily/accidental-engraver.cc b/lily/accidental-engraver.cc
index 1ed0e5d405..808c2408ec 100644
--- a/lily/accidental-engraver.cc
+++ b/lily/accidental-engraver.cc
@@ -287,18 +287,18 @@ Accidental_engraver::process_acknowledged_grobs ()
 		level, so that we get the property settings for
 		Accidental from the respective Voice.
 	       */
-	      Grob * a = make_item_from_properties (origin,
-						    ly_symbol2scm ("Accidental"));
+	      Grob * a = make_item_from_properties (origin->implementation (),
+						    ly_symbol2scm ("Accidental"),
+						    note->self_scm ()
+						    );
 	      a->set_parent (support, Y_AXIS);
 
 	      if (!accidental_placement_)
 		{
-		  accidental_placement_ = make_item ("AccidentalPlacement");
-		  announce_grob (accidental_placement_, a->self_scm ());
+		  accidental_placement_ = make_item ("AccidentalPlacement", a->self_scm ());
 		}
 	      
 	      Accidental_placement::add_accidental (accidental_placement_, a);
-	      announce_grob (a, SCM_EOL);
 
 	      
 	      SCM accs = scm_cons (scm_int2num (pitch->get_alteration ()), SCM_EOL);
diff --git a/lily/ambitus-engraver.cc b/lily/ambitus-engraver.cc
index ee8c1c47c5..5d283d265d 100644
--- a/lily/ambitus-engraver.cc
+++ b/lily/ambitus-engraver.cc
@@ -169,9 +169,8 @@ Ambitus_engraver::acknowledge_grob (Grob_info info)
 void
 Ambitus_engraver::create_ambitus ()
 {
-  ambitus_ = make_item ("Ambitus");
+  ambitus_ = make_item ("Ambitus",SCM_EOL);
   is_typeset = false;		
-  announce_grob (ambitus_, SCM_EOL);
 }
 
 void
diff --git a/lily/arpeggio-engraver.cc b/lily/arpeggio-engraver.cc
index 5ecde8437a..282a7653a0 100644
--- a/lily/arpeggio-engraver.cc
+++ b/lily/arpeggio-engraver.cc
@@ -81,8 +81,7 @@ Arpeggio_engraver::process_music ()
 {
   if (arpeggio_req_)
     {
-      arpeggio_ = make_item ("Arpeggio");
-      announce_grob (arpeggio_, arpeggio_req_->self_scm ());
+      arpeggio_ = make_item ("Arpeggio",arpeggio_req_->self_scm ());
     }
 }
 
diff --git a/lily/axis-group-engraver.cc b/lily/axis-group-engraver.cc
index 50e53db1b1..1bc232f4c5 100644
--- a/lily/axis-group-engraver.cc
+++ b/lily/axis-group-engraver.cc
@@ -48,15 +48,13 @@ Axis_group_engraver::process_music ()
       Grob *  it = unsmob_grob (get_property ("currentCommandColumn"));
 
       staffline_->set_bound (LEFT,it);
-
-      announce_grob (staffline_, SCM_EOL);
     }
 } 
 
 Spanner*
 Axis_group_engraver::get_spanner () 
 {
-  return make_spanner ("VerticalAxisGroup");
+  return make_spanner ("VerticalAxisGroup", SCM_EOL);
 }
 
 /*
@@ -163,7 +161,7 @@ Hara_kiri_engraver::add_element (Grob*e)
 Spanner*
 Hara_kiri_engraver::get_spanner () 
 {
-  Spanner * sp = make_spanner ("RemoveEmptyVerticalGroup");
+  Spanner * sp = make_spanner ("RemoveEmptyVerticalGroup", SCM_EOL);
   
   return sp;
 }
diff --git a/lily/bar-engraver.cc b/lily/bar-engraver.cc
index 031609a75b..7b9841bcab 100644
--- a/lily/bar-engraver.cc
+++ b/lily/bar-engraver.cc
@@ -47,12 +47,10 @@ Bar_engraver::create_bar ()
 {
   if (!bar_)
     {
-      bar_ = make_item ("BarLine");
+      bar_ = make_item ("BarLine", SCM_EOL);
       SCM gl = get_property ("whichBar");
       if (scm_equal_p (gl, bar_->get_property ("glyph")) != SCM_BOOL_T)
 	  bar_->set_property ("glyph", gl);
-      
-      announce_grob (bar_, SCM_EOL);
     }
 }
 
diff --git a/lily/bar-number-engraver.cc b/lily/bar-number-engraver.cc
index 4788428086..1b621c5382 100644
--- a/lily/bar-number-engraver.cc
+++ b/lily/bar-number-engraver.cc
@@ -108,10 +108,8 @@ Bar_number_engraver::create_items ()
   if (text_)
     return;
 
-  text_ = make_item ("BarNumber");
+  text_ = make_item ("BarNumber", SCM_EOL);
   Side_position_interface::set_axis (text_,Y_AXIS);
-
-  announce_grob (text_, SCM_EOL);
 }
 
 ENTER_DESCRIPTION (Bar_number_engraver,
diff --git a/lily/beam-engraver.cc b/lily/beam-engraver.cc
index b485f71464..2abec27aec 100644
--- a/lily/beam-engraver.cc
+++ b/lily/beam-engraver.cc
@@ -142,7 +142,7 @@ Beam_engraver::process_music ()
 
       set_melisma (true);
       prev_start_ev_ = start_ev_;
-      beam_ = make_spanner ("Beam");
+      beam_ = make_spanner ("Beam", start_ev_->self_scm ());
       SCM smp = get_property ("measurePosition");
       Moment mp = (unsmob_moment (smp)) ? *unsmob_moment (smp) : Moment (0);
 
@@ -152,7 +152,6 @@ Beam_engraver::process_music ()
       beam_info_ = new Beaming_info_list;
       
       /* urg, must copy to Auto_beam_engraver too */
-      announce_grob (beam_, start_ev_->self_scm ());
     }
 
 }
diff --git a/lily/break-align-engraver.cc b/lily/break-align-engraver.cc
index e462297fc8..08fc9d6ef1 100644
--- a/lily/break-align-engraver.cc
+++ b/lily/break-align-engraver.cc
@@ -12,7 +12,8 @@
 #include "item.hh"
 #include "align-interface.hh"
 #include "axis-group-interface.hh"
-
+#include "context.hh"
+#include "translator-group.hh"
 
 class Break_align_engraver : public Engraver
 {
@@ -97,16 +98,17 @@ Break_align_engraver::acknowledge_grob (Grob_info inf)
 
       if (!align_)
 	{
-	  align_ = make_item ("BreakAlignment");
+	  align_ = make_item ("BreakAlignment", SCM_EOL);
 
-	  announce_grob (align_, SCM_EOL);
+	  
 
 	  Context*origin = inf.origin_contexts (this)[0];
-	  left_edge_ =  make_item_from_properties (origin,
-						   ly_symbol2scm ("LeftEdge"));
+	  left_edge_ =  make_item_from_properties (origin->implementation (),
+						   ly_symbol2scm ("LeftEdge"),
+						   SCM_EOL
+						   );
 	  add_to_group (left_edge_->get_property ("break-align-symbol"),
 			left_edge_);
-	  announce_grob (left_edge_, SCM_EOL);
 	}
       
       add_to_group (align_name, item);
@@ -126,11 +128,10 @@ Break_align_engraver::add_to_group (SCM align_name, Item*item)
     }
   else
     {
-      group = make_item ("BreakAlignGroup");
+      group = make_item ("BreakAlignGroup", item->self_scm () );
 
       group->set_property ("break-align-symbol", align_name);
       group->set_parent (align_, Y_AXIS);
-      announce_grob (group, item->self_scm ());
 	  
       column_alist_ = scm_assoc_set_x (column_alist_, align_name, group->self_scm ());
 
diff --git a/lily/breathing-sign-engraver.cc b/lily/breathing-sign-engraver.cc
index d5bee48285..d39fa93984 100644
--- a/lily/breathing-sign-engraver.cc
+++ b/lily/breathing-sign-engraver.cc
@@ -54,9 +54,7 @@ Breathing_sign_engraver::process_acknowledged_grobs ()
 {
   if (breathing_sign_req_ && ! breathing_sign_)
     {
-      breathing_sign_ = make_item ("BreathingSign");
-
-      announce_grob (breathing_sign_, breathing_sign_req_->self_scm ());
+      breathing_sign_ = make_item ("BreathingSign", breathing_sign_req_->self_scm ());
       breathing_sign_req_ = 0;
     }
 }
diff --git a/lily/chord-name-engraver.cc b/lily/chord-name-engraver.cc
index 13254fa8de..e6b70aa402 100644
--- a/lily/chord-name-engraver.cc
+++ b/lily/chord-name-engraver.cc
@@ -109,9 +109,9 @@ Chord_name_engraver::process_music ()
    */
   SCM chord_as_scm = scm_cons (pitches, scm_cons (bass, inversion));
   
-  chord_name_ = make_item ("ChordName");
+  chord_name_ = make_item ("ChordName",notes_[0]->self_scm ());
   chord_name_->set_property ("text", markup);
-  announce_grob (chord_name_, notes_[0]->self_scm ());
+
   SCM s = get_property ("chordChanges");
   if (to_boolean (s) && ly_c_pair_p (last_chord_) 
       && ly_c_equal_p (chord_as_scm, last_chord_))
diff --git a/lily/chord-tremolo-engraver.cc b/lily/chord-tremolo-engraver.cc
index 4272ec2bef..39871f741d 100644
--- a/lily/chord-tremolo-engraver.cc
+++ b/lily/chord-tremolo-engraver.cc
@@ -120,16 +120,15 @@ void
 Chord_tremolo_engraver::process_music ()
 {
   if (repeat_ && sequential_body_b_ && !beam_)
-	{
-	  beam_ = make_spanner ("Beam");
-	  beam_->set_property ("chord-tremolo", SCM_BOOL_T);
-
-	  SCM smp = get_property ("measurePosition");
-	  Moment mp
-	    = (unsmob_moment (smp)) ? *unsmob_moment (smp) : Moment (0);
-	  beam_start_location_ = mp;
-	  announce_grob (beam_, repeat_->self_scm ());
-	}
+    {
+      beam_ = make_spanner ("Beam", repeat_->self_scm ());
+      beam_->set_property ("chord-tremolo", SCM_BOOL_T);
+
+      SCM smp = get_property ("measurePosition");
+      Moment mp
+	= (unsmob_moment (smp)) ? *unsmob_moment (smp) : Moment (0);
+      beam_start_location_ = mp;
+    }
 }
 
 void
@@ -186,8 +185,7 @@ Chord_tremolo_engraver::acknowledge_grob (Grob_info info)
   else if (repeat_ &&
 	   flags_ && !sequential_body_b_ && Stem::has_interface (info.grob_))
     {
-      stem_tremolo_ = make_item ("StemTremolo");
-      announce_grob (stem_tremolo_, repeat_->self_scm ());
+      stem_tremolo_ = make_item ("StemTremolo", repeat_->self_scm ());
       stem_tremolo_->set_property ("flag-count",
 				   scm_int2num (flags_));
       stem_tremolo_->set_property ("stem",
diff --git a/lily/clef-engraver.cc b/lily/clef-engraver.cc
index eacc015ab4..78405680cc 100644
--- a/lily/clef-engraver.cc
+++ b/lily/clef-engraver.cc
@@ -86,8 +86,8 @@ Clef_engraver::create_clef ()
 {
   if (!clef_)
     {
-      Item *c= make_item ("Clef");
-      announce_grob (c, SCM_EOL);
+      Item *c = make_item ("Clef", SCM_EOL);
+      
 
       clef_ = c;
       SCM cpos = get_property ("clefPosition");
@@ -98,7 +98,7 @@ Clef_engraver::create_clef ()
       SCM oct =  get_property ("clefOctavation");
       if (ly_c_number_p (oct) && ly_scm2int (oct))
 	{
-	  Item * g = make_item ("OctavateEight");
+	  Item * g = make_item ("OctavateEight", SCM_EOL);
 
 	  int abs_oct = ly_scm2int (oct) ;
 	  int dir = sign (abs_oct);
@@ -116,7 +116,7 @@ Clef_engraver::create_clef ()
 	  g->set_parent (clef_, X_AXIS);
 	  g->set_property ("direction", scm_int2num (dir));
 	  octavate_ = g;
-	  announce_grob (octavate_, SCM_EOL);
+	  
 	}
     }
 }
diff --git a/lily/cluster-engraver.cc b/lily/cluster-engraver.cc
index 391d3fbd13..23795e56bd 100644
--- a/lily/cluster-engraver.cc
+++ b/lily/cluster-engraver.cc
@@ -96,17 +96,15 @@ Cluster_spanner_engraver::process_music ()
 	  pmin = pmin <? p;
 	}
       
-      beacon_ = make_item ("ClusterSpannerBeacon");
+      beacon_ = make_item ("ClusterSpannerBeacon", cluster_notes_[0]->self_scm ());
       beacon_->set_property ("positions",
 				  scm_cons (scm_int2num (pmin),
 					    scm_int2num (pmax)));
-      announce_grob (beacon_, cluster_notes_[0]->self_scm ());
     }
 
   if (beacon_ && !spanner_)
     {    
-      spanner_ = make_spanner ("ClusterSpanner");
-      announce_grob (spanner_, cluster_notes_[0]->self_scm ());
+      spanner_ = make_spanner ("ClusterSpanner", cluster_notes_[0]->self_scm () );
     }
   
   if (beacon_ && spanner_)
diff --git a/lily/collision-engraver.cc b/lily/collision-engraver.cc
index 2a0b1dea2f..478030d847 100644
--- a/lily/collision-engraver.cc
+++ b/lily/collision-engraver.cc
@@ -36,8 +36,8 @@ Collision_engraver::process_acknowledged_grobs ()
     return ;
   if (!col_) 
     {
-      col_ = make_item ("NoteCollision");
-      announce_grob (col_, SCM_EOL);
+      col_ = make_item ("NoteCollision", SCM_EOL);
+      
     }
   
   for (int i=0; i< note_columns_.size (); i++)
diff --git a/lily/completion-note-heads-engraver.cc b/lily/completion-note-heads-engraver.cc
index 4c52d88ae4..229eadd493 100644
--- a/lily/completion-note-heads-engraver.cc
+++ b/lily/completion-note-heads-engraver.cc
@@ -210,9 +210,9 @@ Completion_heads_engraver::process_music ()
   for (int i = 0;
        left_to_do_ && i < note_reqs_.size (); i++)
     {
-      Item *note  = make_item ("NoteHead");
       
       Music * req =  note_reqs_[i];
+      Item *note  = make_item ("NoteHead", req->self_scm ());
       if (scratch_note_reqs_.size ())
 	{
 	  req = scratch_note_reqs_[i];
@@ -227,7 +227,7 @@ Completion_heads_engraver::process_music ()
       int dots= note_dur.dot_count ();
       if (dots)
 	{
-	  Item * d = make_item ("Dots");
+	  Item * d = make_item ("Dots", SCM_EOL);
 	  Rhythmic_head::set_dots (note, d);
 
 	  /*
@@ -237,7 +237,6 @@ Completion_heads_engraver::process_music ()
 	    d->set_property ("dot-count", scm_int2num (dots));
 
 	  d->set_parent (note, Y_AXIS);
-	  announce_grob (d, SCM_EOL);
 	  dots_.push (d);
 	}
 
@@ -249,7 +248,6 @@ Completion_heads_engraver::process_music ()
 	pos += ly_scm2int (c0);
 
       note->set_property ("staff-position",   scm_int2num (pos));
-      announce_grob (note,req->self_scm ());
       notes_.push (note);
     }
   
@@ -257,14 +255,14 @@ Completion_heads_engraver::process_music ()
     {
       for (int i= 0; i < notes_.size (); i++)
 	{
-	  Grob * p = make_spanner ("Tie");
+	  Grob * p = make_spanner ("Tie", SCM_EOL);
 	  Tie::set_interface (p); // cannot remove yet!
 	  
 	  Tie::set_head (p, LEFT, prev_notes_[i]);
 	  Tie::set_head (p, RIGHT, notes_[i]);
 	  
 	  ties_.push (p);
-	  announce_grob (p, SCM_EOL);
+	  
 	}
     }
 
diff --git a/lily/custos-engraver.cc b/lily/custos-engraver.cc
index 86dac5847e..09d0ec9aa6 100644
--- a/lily/custos-engraver.cc
+++ b/lily/custos-engraver.cc
@@ -124,9 +124,9 @@ Custos_engraver::process_acknowledged_grobs ()
 Item* 
 Custos_engraver::create_custos ()
 {
-  Item* custos = make_item ("Custos");
+  Item* custos = make_item ("Custos", SCM_EOL);
+  
   
-  announce_grob (custos, SCM_EOL);
   custodes_.push (custos);
   
   return custos;
diff --git a/lily/dot-column-engraver.cc b/lily/dot-column-engraver.cc
index 8ee8850614..2b426cec2c 100644
--- a/lily/dot-column-engraver.cc
+++ b/lily/dot-column-engraver.cc
@@ -63,8 +63,8 @@ Dot_column_engraver::acknowledge_grob (Grob_info info)
     {
       if (!dotcol_)
 	{
-	  dotcol_ = make_item ("DotColumn");
-	  announce_grob (dotcol_, SCM_EOL);
+	  dotcol_ = make_item ("DotColumn", SCM_EOL);
+	  
 	}
 
       Dot_column::add_head (dotcol_, info.grob_);
diff --git a/lily/drum-note-engraver.cc b/lily/drum-note-engraver.cc
index 6301ca71bd..8b05bad665 100644
--- a/lily/drum-note-engraver.cc
+++ b/lily/drum-note-engraver.cc
@@ -62,8 +62,8 @@ Drum_notes_engraver::process_music ()
       if (!tab)
 	tab = get_property ("drumStyleTable");
       
-      Item *note = make_item ("NoteHead");
       Music * ev = events_[i];
+      Item *note = make_item ("NoteHead", ev->self_scm ());
       
       Duration dur = *unsmob_duration (ev->get_property ("duration"));
 
@@ -71,7 +71,7 @@ Drum_notes_engraver::process_music ()
 
       if (dur.dot_count ())
 	{
-	  Item * d = make_item ("Dots");
+	  Item * d = make_item ("Dots", ev->self_scm ());
 	  Rhythmic_head::set_dots (note, d);
 	  
 	  if (dur.dot_count ()
@@ -79,7 +79,7 @@ Drum_notes_engraver::process_music ()
 	    d->set_property ("dot-count", scm_int2num (dur.dot_count ()));
 
 	  d->set_parent (note, Y_AXIS);
-	  announce_grob (d, SCM_EOL);
+	  
 	  dots_.push (d);
 	}
 
@@ -103,7 +103,7 @@ Drum_notes_engraver::process_music ()
 
 	  if (ly_c_string_p (script))
 	    {
-	      Item *p  = make_item ("Script");
+	      Item *p  = make_item ("Script", ev->self_scm ());
 	      SCM desc  = SCM_EOL;
 	      make_script_from_event (p, &desc,
 				      context (), script,
@@ -112,7 +112,6 @@ Drum_notes_engraver::process_music ()
 	      if (p->get_property ("follow-into-staff"))
 		p->set_property ("staff-padding", SCM_EOL);
 	      
-	      announce_grob (p, ev->self_scm ());
 
 	      p->set_parent (note, Y_AXIS);
 	      Side_position_interface::add_support (p, note); 
@@ -120,9 +119,6 @@ Drum_notes_engraver::process_music ()
 	    }
 	}
 
-
-      
-      announce_grob (note,ev->self_scm ());
       notes_.push (note);
     }
 }
diff --git a/lily/dynamic-engraver.cc b/lily/dynamic-engraver.cc
index 6e926b8d6c..f57f031e28 100644
--- a/lily/dynamic-engraver.cc
+++ b/lily/dynamic-engraver.cc
@@ -114,12 +114,11 @@ Dynamic_engraver::process_music ()
     {
       if (!line_spanner_)
 	{
-	  line_spanner_ = make_spanner ("DynamicLineSpanner");
-
 	  Music * rq = accepted_spanreqs_drul_[START];
+	  line_spanner_ = make_spanner ("DynamicLineSpanner", rq ? rq->self_scm (): SCM_EOL );
+
 	  if (script_ev_)
-	    rq =  script_ev_ ;
-	  announce_grob (line_spanner_, rq ? rq->self_scm (): SCM_EOL);
+	    rq =  script_ev_;
 	}
     }
   
@@ -140,7 +139,7 @@ Dynamic_engraver::process_music ()
   */
   if (script_ev_)
     {
-      script_ = make_item ("DynamicText");
+      script_ = make_item ("DynamicText", script_ev_->self_scm ());
       script_->set_property ("text",
 				   script_ev_->get_property ("text"));
 
@@ -150,7 +149,6 @@ Dynamic_engraver::process_music ()
 
       Axis_group_interface::add_element (line_spanner_, script_);
 
-      announce_grob (script_, script_ev_->self_scm ());
     }
 
   Music *stop_ev = accepted_spanreqs_drul_ [STOP] ?
@@ -222,7 +220,7 @@ Dynamic_engraver::process_music ()
 	  SCM s = get_property ((start_type + "Spanner").to_str0 ());
 	  if (!ly_c_symbol_p (s) || s == ly_symbol2scm ("hairpin"))
 	    {
-	      cresc_  = make_spanner ("Hairpin");
+	      cresc_  = make_spanner ("Hairpin", accepted_spanreqs_drul_[START]->self_scm ());
 	      cresc_->set_property ("grow-direction",
 					   scm_int2num ((start_type == "crescendo")
 						       ? BIGGER : SMALLER));
@@ -237,7 +235,7 @@ Dynamic_engraver::process_music ()
 	  */
 	  else
 	    {
-	      cresc_  = make_spanner ("TextSpanner");
+	      cresc_  = make_spanner ("TextSpanner", accepted_spanreqs_drul_[START]->self_scm ());
 	      cresc_->set_property ("style", s);
 	      context ()->set_property ((start_type
 					    + "Spanner").to_str0 (), SCM_EOL);
@@ -262,7 +260,6 @@ Dynamic_engraver::process_music ()
 
 	  add_bound_item (line_spanner_, cresc_->get_bound (LEFT));
 	  
-	  announce_grob (cresc_, accepted_spanreqs_drul_[START]->self_scm ());
 	}
     }
 }
diff --git a/lily/extender-engraver.cc b/lily/extender-engraver.cc
index bc1d2580a0..35f4db9218 100644
--- a/lily/extender-engraver.cc
+++ b/lily/extender-engraver.cc
@@ -59,8 +59,7 @@ Extender_engraver::process_music ()
 {
   if (ev_)
     {
-      extender_ = make_spanner ("LyricExtender");
-      announce_grob (extender_, ev_->self_scm ());
+      extender_ = make_spanner ("LyricExtender", ev_->self_scm ());
     }
 }
 
diff --git a/lily/figured-bass-engraver.cc b/lily/figured-bass-engraver.cc
index 611e49dc25..f46a86b671 100644
--- a/lily/figured-bass-engraver.cc
+++ b/lily/figured-bass-engraver.cc
@@ -68,8 +68,7 @@ Figured_bass_engraver::process_music ()
 {
   if (rest_req_)
     {
-      figure_ = make_item ("BassFigure");
-      announce_grob (figure_, rest_req_->self_scm ()); // todo
+      figure_ = make_item ("BassFigure", rest_req_->self_scm ());
       figure_->set_property ("text" , scm_makfrom0str ("-"));
     }
   else if (figures_.size ())
@@ -84,10 +83,9 @@ Figured_bass_engraver::process_music ()
 	      *t = scm_cons (figures_[i]->self_scm (), SCM_EOL);
 	      t = SCM_CDRLOC (*t);
 	    }
-	  figure_ = make_item ("BassFigure");
+	  figure_ = make_item ("BassFigure", figures_[0]->self_scm ());
 	  scm_call_3 (proc, l, context ()->self_scm (),
 		      figure_->self_scm ());
-	  announce_grob (figure_, figures_[0]->self_scm ()); // todo
 	}
     }
 }
diff --git a/lily/fingering-engraver.cc b/lily/fingering-engraver.cc
index a281bbdf77..c61ba4c56a 100644
--- a/lily/fingering-engraver.cc
+++ b/lily/fingering-engraver.cc
@@ -81,7 +81,7 @@ Fingering_engraver::process_music ()
 void
 Fingering_engraver::make_script (Direction d, Music *r, int i)
 {
-  Item *fingering = make_item ("Fingering");
+  Item *fingering = make_item ("Fingering", r->self_scm ());
   Axis a = Y_AXIS;
   Axis other = other_axis (a);
 
@@ -125,7 +125,6 @@ Fingering_engraver::make_script (Direction d, Music *r, int i)
   SCM dig =  r->get_property ("digit");
   fingering->set_property ("text", scm_number_to_string (dig, scm_int2num (10)));
 
-  announce_grob (fingering, r->self_scm ());
   fingerings_.push (fingering);
 }
 
diff --git a/lily/glissando-engraver.cc b/lily/glissando-engraver.cc
index 795570866f..6c177c43ba 100644
--- a/lily/glissando-engraver.cc
+++ b/lily/glissando-engraver.cc
@@ -55,8 +55,7 @@ Glissando_engraver::process_music ()
 {
   if (event_)
     {
-      line_ = make_spanner ("Glissando");
-      announce_grob (line_, event_->self_scm ());
+      line_ = make_spanner ("Glissando", event_->self_scm ());
     }
 }
 
diff --git a/lily/horizontal-bracket-engraver.cc b/lily/horizontal-bracket-engraver.cc
index 99836973b4..3be6afc743 100644
--- a/lily/horizontal-bracket-engraver.cc
+++ b/lily/horizontal-bracket-engraver.cc
@@ -91,9 +91,8 @@ Horizontal_bracket_engraver::process_music ()
 {
   for  (int k = 0; k < push_count_; k++)
     {
-      Spanner * sp = make_spanner ("HorizontalBracket");
+      Spanner * sp = make_spanner ("HorizontalBracket", events_[k]->self_scm ());
 
-      announce_grob (sp, events_[k]->self_scm ());
       for (int i = 0; i < bracket_stack_.size (); i++)
 	{
 	  /*
diff --git a/lily/hyphen-engraver.cc b/lily/hyphen-engraver.cc
index 26deb72817..edc3b5f36b 100644
--- a/lily/hyphen-engraver.cc
+++ b/lily/hyphen-engraver.cc
@@ -120,8 +120,8 @@ Hyphen_engraver::process_music ()
 {
   if (ev_)
     {
-      hyphen_ = make_spanner ("LyricHyphen");
-      announce_grob (hyphen_, ev_->self_scm ());
+      hyphen_ = make_spanner ("LyricHyphen", ev_->self_scm ()
+);
     }
 }
 
diff --git a/lily/include/engraver.hh b/lily/include/engraver.hh
index 5c064bf71b..c8270be6d6 100644
--- a/lily/include/engraver.hh
+++ b/lily/include/engraver.hh
@@ -42,14 +42,16 @@ protected:
      
    */
   virtual void process_acknowledged_grobs () {}
-  /**
-    Announce element. Default: pass on to daddy. Utility
-    */
-  virtual void announce_grob (Grob*, SCM cause);
+
   virtual void announce_grob (Grob_info);
   Engraver_group_engraver*get_daddy_engraver () const;
 
 public:
+  /**
+    Announce element. Default: pass on to daddy. Utility
+    */
+  void announce_grob (Grob*, SCM cause);
+  
   Score_engraver * get_score_engraver () const;
   /**
     override other ctor
@@ -57,10 +59,10 @@ public:
   TRANSLATOR_DECLARATIONS(Engraver);
 };
 
-#define make_item(x) make_item_from_properties (context (), ly_symbol2scm (x))
-#define make_spanner(x) make_spanner_from_properties (context (), ly_symbol2scm (x))
-Item* make_item_from_properties (Context * tg, SCM x);
-Spanner* make_spanner_from_properties (Context * tg, SCM x);
+#define make_item(x,cause) make_item_from_properties (this, ly_symbol2scm (x), cause)
+#define make_spanner(x,cause) make_spanner_from_properties (this, ly_symbol2scm (x), cause)
+Item* make_item_from_properties (Translator * tg, SCM x, SCM cause);
+Spanner* make_spanner_from_properties (Translator * tg, SCM x, SCM cause);
 
 
 
diff --git a/lily/instrument-name-engraver.cc b/lily/instrument-name-engraver.cc
index 892bde9b9f..1abbcb859a 100644
--- a/lily/instrument-name-engraver.cc
+++ b/lily/instrument-name-engraver.cc
@@ -75,11 +75,11 @@ Instrument_name_engraver::create_text ()
     return ;
 
   
-  text_ = make_item ("InstrumentName");
+  text_ = make_item ("InstrumentName", SCM_EOL);
       
   if (text_->get_property ("text") != txt)
     text_->set_property ("text", txt);
-  announce_grob (text_, SCM_EOL);
+  
   }
 
 void
@@ -169,11 +169,11 @@ Vocal_name_engraver::create_text ()
   if (txt == SCM_EOL)
     return ;
   
-  text_ = make_item ("VocalName");
+  text_ = make_item ("VocalName", SCM_EOL);
       
   if (text_->get_property ("text") != txt)
     text_->set_property ("text", txt);
-  announce_grob (text_, SCM_EOL);
+  
 }
 
 
diff --git a/lily/item.cc b/lily/item.cc
index e9c0e6df46..f857ff5591 100644
--- a/lily/item.cc
+++ b/lily/item.cc
@@ -41,8 +41,8 @@ Item::is_breakable (Grob*me)
   if (!dynamic_cast<Item*> (me))
     me->programming_error ("only items can be breakable.");
   
-  Item * i  =dynamic_cast<Item*> (me->get_parent (X_AXIS));
-  return (i) ?  Item::is_breakable (i) : to_boolean (me->get_property ("breakable"));
+  Item * i = dynamic_cast<Item*> (me->get_parent (X_AXIS));
+  return (i) ? Item::is_breakable (i) : to_boolean (me->get_property ("breakable"));
 }
 
 Paper_column *
diff --git a/lily/key-engraver.cc b/lily/key-engraver.cc
index a13b4315a6..fdb59dc492 100644
--- a/lily/key-engraver.cc
+++ b/lily/key-engraver.cc
@@ -64,7 +64,7 @@ Key_engraver::create_key (bool def)
 {
   if (!item_) 
     {
-      item_ = make_item ("KeySignature");
+      item_ = make_item ("KeySignature", key_ev_ ? key_ev_->self_scm () : SCM_EOL);
 
       item_->set_property ("c0-position",
 			   get_property ("middleCPosition"));
@@ -73,7 +73,6 @@ Key_engraver::create_key (bool def)
 	item_->set_property ("old-accidentals", get_property ("lastKeySignature"));
       item_->set_property ("new-accidentals", get_property ("keySignature"));
 
-      announce_grob (item_, key_ev_ ? key_ev_->self_scm () : SCM_EOL);
     }
 
   if (!def)
diff --git a/lily/ligature-bracket-engraver.cc b/lily/ligature-bracket-engraver.cc
index 975b85b775..1837911cbf 100644
--- a/lily/ligature-bracket-engraver.cc
+++ b/lily/ligature-bracket-engraver.cc
@@ -39,7 +39,7 @@ Ligature_bracket_engraver::Ligature_bracket_engraver ()
 Spanner *
 Ligature_bracket_engraver::create_ligature_spanner ()
 {
-  return make_spanner ("LigatureBracket");
+  return make_spanner ("LigatureBracket", SCM_EOL);
 }
 
 void
diff --git a/lily/ligature-engraver.cc b/lily/ligature-engraver.cc
index 75c915d322..0e221aa38d 100644
--- a/lily/ligature-engraver.cc
+++ b/lily/ligature-engraver.cc
@@ -205,8 +205,9 @@ Ligature_engraver::process_music ()
 	}
 
       ligature_start_mom_ = now_mom ();
-      
-      announce_grob (ligature_, reqs_drul_[START]->self_scm ());
+
+      // TODO: dump cause into make_item/spanner. 
+      // announce_grob (ligature_, reqs_drul_[START]->self_scm ());
       override_stencil_callback ();
     }
 }
diff --git a/lily/lyric-engraver.cc b/lily/lyric-engraver.cc
index b81897a819..45c838c53c 100644
--- a/lily/lyric-engraver.cc
+++ b/lily/lyric-engraver.cc
@@ -58,10 +58,9 @@ Lyric_engraver::process_music ()
 {
   if (event_)
     {
-      text_=  make_item ("LyricText");
+      text_=  make_item ("LyricText",event_->self_scm ());
       
       text_->set_property ("text", event_->get_property ("text"));
-      announce_grob (text_, event_->self_scm ());
     }
 }
 
diff --git a/lily/mark-engraver.cc b/lily/mark-engraver.cc
index ce1d13e7b9..d552496872 100644
--- a/lily/mark-engraver.cc
+++ b/lily/mark-engraver.cc
@@ -82,8 +82,7 @@ Mark_engraver::create_items (Music *ev)
   if (text_)
     return;
 
-  text_ = make_item ("RehearsalMark");
-  announce_grob (text_, ev->self_scm ());
+  text_ = make_item ("RehearsalMark", ev->self_scm ());
 }
 
 
diff --git a/lily/measure-grouping-engraver.cc b/lily/measure-grouping-engraver.cc
index 6ae17ceedd..6e54748f85 100644
--- a/lily/measure-grouping-engraver.cc
+++ b/lily/measure-grouping-engraver.cc
@@ -87,9 +87,9 @@ Measure_grouping_engraver::process_music ()
 		  continue;
 		}
 	      
-	      grouping_ = make_spanner ("MeasureGrouping");
+	      grouping_ = make_spanner ("MeasureGrouping", SCM_EOL);
 	      grouping_->set_bound (LEFT, unsmob_grob (get_property ("currentMusicalColumn")));
-	      announce_grob (grouping_, SCM_EOL);
+	      
 
 
 	      stop_grouping_mom_ = now.main_part_ + Rational (grouplen - 1) * bl ;
diff --git a/lily/mensural-ligature-engraver.cc b/lily/mensural-ligature-engraver.cc
index 867fc73d89..4d6493fec8 100644
--- a/lily/mensural-ligature-engraver.cc
+++ b/lily/mensural-ligature-engraver.cc
@@ -73,7 +73,7 @@ Mensural_ligature_engraver::Mensural_ligature_engraver ()
 Spanner *
 Mensural_ligature_engraver::create_ligature_spanner ()
 {
-  return make_spanner ("MensuralLigature");
+  return make_spanner ("MensuralLigature", SCM_EOL);
 }
 
 /*
diff --git a/lily/metronome-engraver.cc b/lily/metronome-engraver.cc
index 2c8bd4659e..704707b3fb 100644
--- a/lily/metronome-engraver.cc
+++ b/lily/metronome-engraver.cc
@@ -79,9 +79,8 @@ Metronome_mark_engraver::create_items (Music *rq)
   if (text_)
     return;
 
-  text_ = make_item ("MetronomeMark");
+  text_ = make_item ("MetronomeMark", rq->self_scm () );
 
-  announce_grob (text_, rq->self_scm ());
 }
 
 
diff --git a/lily/multi-measure-rest-engraver.cc b/lily/multi-measure-rest-engraver.cc
index 3971353441..97a022230d 100644
--- a/lily/multi-measure-rest-engraver.cc
+++ b/lily/multi-measure-rest-engraver.cc
@@ -80,16 +80,16 @@ Multi_measure_rest_engraver::process_music ()
   if (rest_ev_ && !mmrest_
       && stop_moment_ > now_mom ())
     {
-      mmrest_ = make_spanner ("MultiMeasureRest");
+      mmrest_ = make_spanner ("MultiMeasureRest", rest_ev_->self_scm ());
 
       if (text_events_.size ())
 	{
 	  for (int i = 0; i < text_events_.size (); i++)
 	    {
-	      Spanner *sp
-		= make_spanner ("MultiMeasureRestText");
 
 	      Music* e = text_events_[i];
+	      Spanner *sp
+		= make_spanner ("MultiMeasureRestText", e->self_scm () );
 	      SCM t = e->get_property ("text");
 	      SCM dir = e->get_property ("direction");
 	      sp->set_property ("text",t);
@@ -97,7 +97,6 @@ Multi_measure_rest_engraver::process_music ()
 		sp->set_property ("direction",dir);
 	      
 	      numbers_.push (sp);
-	      announce_grob (sp, e->self_scm ());
 	    }
 
 	  /*
@@ -120,9 +119,8 @@ Multi_measure_rest_engraver::process_music ()
       else
 	{
 	  Spanner *sp
-	    = make_spanner ("MultiMeasureRestNumber");
+	    = make_spanner ("MultiMeasureRestNumber", rest_ev_->self_scm () );
 	  numbers_.push (sp);
-	  announce_grob (sp, rest_ev_->self_scm ());
 	}
 
       for (int i =0 ; i < numbers_.size (); i++)
@@ -131,7 +129,6 @@ Multi_measure_rest_engraver::process_music ()
 	  numbers_[i]->set_parent (mmrest_, Y_AXIS);
 	}
       
-      announce_grob (mmrest_, rest_ev_->self_scm ());
       start_measure_
 	= ly_scm2int (get_property ("currentBarNumber"));
     }
diff --git a/lily/new-fingering-engraver.cc b/lily/new-fingering-engraver.cc
index 05f60c433e..f867908ea5 100644
--- a/lily/new-fingering-engraver.cc
+++ b/lily/new-fingering-engraver.cc
@@ -111,7 +111,7 @@ New_fingering_engraver::add_script (Grob * head,
 {
   Finger_tuple ft ;
 
-  Grob * g=  make_item ("Script");
+  Grob * g=  make_item ("Script", event->self_scm () );
   make_script_from_event (g, &ft.description_, context (),
 			  event->get_property ("articulation-type"), 0);
   if (g)
@@ -119,7 +119,6 @@ New_fingering_engraver::add_script (Grob * head,
       ft.script_ =g ;
       
       articulations_.push (ft);
-      announce_grob (g, event->self_scm ());
  
       ft.script_->set_parent (head, X_AXIS);
     }
@@ -133,8 +132,7 @@ New_fingering_engraver::add_fingering (Grob * head,
 {
   Finger_tuple ft;
 
-  ft.script_ = make_item ("Fingering");
-  announce_grob (ft.script_, event->self_scm ());
+  ft.script_ = make_item ("Fingering", event->self_scm () );
   
   Side_position_interface::add_support (ft.script_, head);
 
diff --git a/lily/note-head-line-engraver.cc b/lily/note-head-line-engraver.cc
index 190c0bcc93..f5737a795d 100644
--- a/lily/note-head-line-engraver.cc
+++ b/lily/note-head-line-engraver.cc
@@ -87,12 +87,11 @@ Note_head_line_engraver::process_acknowledged_grobs ()
 	 Should probably store follow_ in line_, and suicide at some
 	 later point */
       if (follow_)
-	line_ = make_spanner ("VoiceFollower");
+	line_ = make_spanner ("VoiceFollower", head_->self_scm ());
 	  
       line_->set_bound (LEFT, last_head_);
       line_->set_bound (RIGHT, head_);
       
-      announce_grob (line_, head_->self_scm ());
 
       follow_ = false;
     }
diff --git a/lily/note-heads-engraver.cc b/lily/note-heads-engraver.cc
index 8fb85cd94a..2cefa7b2be 100644
--- a/lily/note-heads-engraver.cc
+++ b/lily/note-heads-engraver.cc
@@ -57,16 +57,16 @@ Note_heads_engraver::process_music ()
 {
   for (int i=0; i < note_reqs_.size (); i++)
     {
-      Item *note = make_item ("NoteHead");
 
       Music * req = note_reqs_[i];
+      Item *note = make_item ("NoteHead", req->self_scm ());
       
       Duration dur = *unsmob_duration (req->get_property ("duration"));
 
       note->set_property ("duration-log", scm_int2num (dur.duration_log ()));
       if (dur.dot_count ())
 	{
-	  Item * d = make_item ("Dots");
+	  Item * d = make_item ("Dots", note->self_scm ());
 	  Rhythmic_head::set_dots (note, d);
 	  
 	  if (dur.dot_count ()
@@ -74,7 +74,7 @@ Note_heads_engraver::process_music ()
 	    d->set_property ("dot-count", scm_int2num (dur.dot_count ()));
 
 	  d->set_parent (note, Y_AXIS);
-	  announce_grob (d, SCM_EOL);
+	  
 	  dots_.push (d);
 	}
 
@@ -86,7 +86,6 @@ Note_heads_engraver::process_music ()
 	pos += ly_scm2int (c0);
 
       note->set_property ("staff-position",   scm_int2num (pos));
-      announce_grob (note,req->self_scm ());
       notes_.push (note);
     }
 }
diff --git a/lily/note-name-engraver.cc b/lily/note-name-engraver.cc
index a0c904e562..b9e82ab322 100644
--- a/lily/note-name-engraver.cc
+++ b/lily/note-name-engraver.cc
@@ -51,9 +51,8 @@ Note_name_engraver::process_music ()
     }
   if (s.length ())
     {
-      Item * t = make_item ("NoteName");
+      Item * t = make_item ("NoteName", events_[0]->self_scm () );
       t->set_property ("text", scm_makfrom0str (s.to_str0 ()));
-      announce_grob (t, events_[0]->self_scm ());
       texts_.push (t);
     }
 }
diff --git a/lily/ottava-engraver.cc b/lily/ottava-engraver.cc
index 20f629e1b6..895fa82660 100644
--- a/lily/ottava-engraver.cc
+++ b/lily/ottava-engraver.cc
@@ -48,9 +48,9 @@ Ottava_spanner_engraver::process_music ()
       span_ = 0;
       if (ly_c_string_p (ott))
 	{
-	  span_  = make_spanner ("OttavaBracket");
+	  span_  = make_spanner ("OttavaBracket", SCM_EOL);
 	  span_->set_property ("text", ott);
-	  announce_grob (span_, SCM_EOL);
+	  
 
 	  SCM c0 (get_property ("middleCPosition"));
 	  SCM oc0 (get_property ("originalCentralCPosition"));
diff --git a/lily/part-combine-engraver.cc b/lily/part-combine-engraver.cc
index a941876ef3..daaf17b7c5 100644
--- a/lily/part-combine-engraver.cc
+++ b/lily/part-combine-engraver.cc
@@ -61,9 +61,8 @@ Part_combine_engraver::process_music ()
 
       if (Text_item::markup_p (text))
 	{
-	  text_ =  make_item ("CombineTextScript");
+	  text_ =  make_item ("CombineTextScript", event_->self_scm () );
 	  text_->set_property ("text", text);
-	  announce_grob (text_, event_->self_scm ());
 	}
     }
 }
diff --git a/lily/percent-repeat-engraver.cc b/lily/percent-repeat-engraver.cc
index 3090e9b615..f8d157abc6 100644
--- a/lily/percent-repeat-engraver.cc
+++ b/lily/percent-repeat-engraver.cc
@@ -133,16 +133,13 @@ Percent_repeat_engraver::process_music ()
 	{
 	  finished_perc_ = perc_;
 	  typeset_perc ();
-	  perc_ = make_spanner ("PercentRepeat");
+	  perc_ = make_spanner ("PercentRepeat", repeat_->self_scm ());
 	  SCM col =get_property ("currentCommandColumn");
 	  perc_->set_bound (LEFT, unsmob_grob (col));
-	  announce_grob (perc_, repeat_->self_scm ());
 	}
       else if (repeat_sign_type_ == DOUBLE_MEASURE)
 	{
-	  double_percent_ = make_item ("DoublePercentRepeat");
-	  announce_grob (double_percent_, repeat_->self_scm ());
-
+	  double_percent_ = make_item ("DoublePercentRepeat", repeat_->self_scm ());
       /*
 	forbid breaks on a % line. Should forbid all breaks, really.
        */
diff --git a/lily/performance.cc b/lily/performance.cc
index 484c59f0c5..5bb074307f 100644
--- a/lily/performance.cc
+++ b/lily/performance.cc
@@ -150,10 +150,6 @@ Performance::add_element (Audio_element *p)
     {
       audio_staffs_.push (s);
     }
-  else if (Audio_column *c = dynamic_cast<Audio_column*> (p))
-    {
-      c->performance_ = this;
-    }
   audio_elem_p_list_ = new Killing_cons<Audio_element> (p, audio_elem_p_list_);
 }
 
diff --git a/lily/phrasing-slur-engraver.cc b/lily/phrasing-slur-engraver.cc
index eb4f883596..1671f24127 100644
--- a/lily/phrasing-slur-engraver.cc
+++ b/lily/phrasing-slur-engraver.cc
@@ -132,7 +132,7 @@ Phrasing_slur_engraver::process_acknowledged_grobs ()
 	{
 	  // push a new phrasing_slur onto stack.
 	  // (use temp. array to wait for all phrasing_slur STOPs)
-	  Grob* phrasing_slur = make_spanner ("PhrasingSlur");
+	  Grob* phrasing_slur = make_spanner ("PhrasingSlur", phrasing_slur_ev->self_scm ());
 	  Slur::set_interface (phrasing_slur); // can't remove.
 
 
@@ -143,7 +143,6 @@ Phrasing_slur_engraver::process_acknowledged_grobs ()
 
 	  start_phrasing_slurs.push (phrasing_slur);
 	  eventses_.push (phrasing_slur_ev);
-	  announce_grob (phrasing_slur, phrasing_slur_ev->self_scm ());
 	}
     }
   for (int i=0; i < start_phrasing_slurs.size (); i++)
diff --git a/lily/piano-pedal-engraver.cc b/lily/piano-pedal-engraver.cc
index df0d26e6a2..a43268aa77 100644
--- a/lily/piano-pedal-engraver.cc
+++ b/lily/piano-pedal-engraver.cc
@@ -185,12 +185,11 @@ Piano_pedal_engraver::process_music ()
 	  if (!p->line_spanner_)
 	    {
 	      String name  = String (p->name_) + "PedalLineSpanner";
-	      p->line_spanner_ = make_spanner (name.to_str0 ());
-
 	      Music * rq = (p->event_drul_[START]  ?  p->event_drul_[START]  :  p->event_drul_[STOP]);
+	      p->line_spanner_ = make_spanner (name.to_str0 (), rq->self_scm ());
+
 
 	      
-	      announce_grob (p->line_spanner_, rq->self_scm ());
 	    }
       
 	  /* Choose the appropriate grobs to add to the line spanner
@@ -295,16 +294,13 @@ Piano_pedal_engraver::create_text_grobs (Pedal_info *p, bool mixed)
     {
       String propname = String (p->name_) + "Pedal";
 
-      p->item_ = make_item (propname.to_str0 ());
-      p->item_->set_property ("text", s);
-      Axis_group_interface::add_element (p->line_spanner_, p->item_);
-	  
-      announce_grob (p->item_,
-		     (p->event_drul_[START]
-		      ? p->event_drul_[START]
-		      : p->event_drul_[STOP])->self_scm ());
+      p->item_ = make_item (propname.to_str0 (), (p->event_drul_[START]
+						  ? p->event_drul_[START]
+						  : p->event_drul_[STOP])->self_scm ());
     }
-
+  p->item_->set_property ("text", s);
+  Axis_group_interface::add_element (p->line_spanner_, p->item_);
+  
   if (!mixed)
     {
       p->event_drul_[START] = 0;
@@ -354,7 +350,7 @@ Piano_pedal_engraver::create_bracket_grobs (Pedal_info *p, bool mixed)
       p->start_ev_ = p->event_drul_[START];
       p->current_bracket_ev_ = p->event_drul_[START];
 
-      p->bracket_  = make_spanner ("PianoPedalBracket");
+      p->bracket_  = make_spanner ("PianoPedalBracket", p->event_drul_[START]->self_scm ());
 
       /*
 	Set properties so that the stencil-creating function will
@@ -403,7 +399,6 @@ Piano_pedal_engraver::create_bracket_grobs (Pedal_info *p, bool mixed)
 	
       */
       Axis_group_interface::add_element (p->line_spanner_, p->bracket_);	      
-      announce_grob (p->bracket_, p->event_drul_[START]->self_scm ());
 
       if (!p->event_drul_[STOP])
 	{
diff --git a/lily/rest-collision-engraver.cc b/lily/rest-collision-engraver.cc
index 149ad79831..e63fc171b0 100644
--- a/lily/rest-collision-engraver.cc
+++ b/lily/rest-collision-engraver.cc
@@ -40,9 +40,9 @@ Rest_collision_engraver::process_acknowledged_grobs ()
 	  && rest_count_  < 2))
     return;
 
-  rest_collision_ = make_item ("RestCollision");
+  rest_collision_ = make_item ("RestCollision", SCM_EOL);
 
-  announce_grob (rest_collision_, SCM_EOL);
+  
   for (int i=0; i < note_columns_.size (); i++)
     Rest_collision::add_column (rest_collision_,note_columns_[i]);
 }
diff --git a/lily/rest-engraver.cc b/lily/rest-engraver.cc
index 6426973f8c..48621d2f61 100644
--- a/lily/rest-engraver.cc
+++ b/lily/rest-engraver.cc
@@ -65,7 +65,7 @@ Rest_engraver::process_music ()
 {
   if (rest_req_ && !rest_) 
     {
-      rest_ = make_item ("Rest");
+      rest_ = make_item ("Rest", rest_req_->self_scm ());
 
       int durlog  = unsmob_duration (rest_req_->get_property ("duration"))-> duration_log ();
       
@@ -76,12 +76,12 @@ Rest_engraver::process_music ()
       
       if (dots)
 	{
-	  dot_ = make_item ("Dots");
+	  dot_ = make_item ("Dots", SCM_EOL);
 
 	  Rhythmic_head::set_dots (rest_, dot_);
 	  dot_->set_parent (rest_, Y_AXIS);
 	  dot_->set_property ("dot-count", scm_int2num (dots));
-	  announce_grob (dot_, SCM_EOL);
+	  
 	}
 
       Pitch *p = unsmob_pitch (rest_req_->get_property ("pitch"));
@@ -100,7 +100,6 @@ Rest_engraver::process_music ()
 	  rest_->set_property ("staff-position", scm_int2num (pos));
 	}
       
-      announce_grob (rest_, rest_req_->self_scm ());
     }
 }
 
diff --git a/lily/rhythmic-column-engraver.cc b/lily/rhythmic-column-engraver.cc
index 282c567fa6..02dd91bb7d 100644
--- a/lily/rhythmic-column-engraver.cc
+++ b/lily/rhythmic-column-engraver.cc
@@ -83,14 +83,13 @@ Rhythmic_column_engraver::process_acknowledged_grobs ()
     {
       if (!note_column_)
 	{
-	  note_column_ = make_item ("NoteColumn");
-	  announce_grob (note_column_, rheads_[0]->self_scm ());
+	  note_column_ = make_item ("NoteColumn",rheads_[0]->self_scm ());
 
-	  spacing_ = make_item ("NoteSpacing");
+	  spacing_ = make_item ("NoteSpacing", SCM_EOL);
 	  spacing_->set_property ("left-items", scm_cons (note_column_->self_scm (), SCM_EOL));
 
 
-	  announce_grob (spacing_, SCM_EOL);
+	  
 
 	  if (last_spacing_)
 	    {
diff --git a/lily/score-engraver.cc b/lily/score-engraver.cc
index 1b4ebcf0c1..7df239b584 100644
--- a/lily/score-engraver.cc
+++ b/lily/score-engraver.cc
@@ -151,15 +151,13 @@ Score_engraver::announce_grob (Grob_info info)
 {
   announce_infos_.push (info);
   pscore_->system_->typeset_grob (info.grob_);
+    elems_.push (info.grob_);
 }
 
 void
 Score_engraver::typeset_grob (Grob *elem)
 {
-  if (!elem)
-    programming_error ("Score_engraver: empty elt\n");
-  else
-    elems_.push (elem);
+  //  elems_.push (elem);
 }
 
 void
@@ -168,7 +166,8 @@ Score_engraver::typeset_all ()
   for (int i =0; i < elems_.size (); i++) 
     {
       Grob * elem = elems_[i];
-      
+
+#if 0
       if (Spanner *s = dynamic_cast <Spanner *> (elem))
 	{
 	  /*
@@ -194,9 +193,14 @@ Score_engraver::typeset_all ()
 	  if (dynamic_cast<Item*> (s->get_parent (Y_AXIS)))
 	    programming_error ("Spanner Y-parent is an item.");
 	}
-      else 
+#endif
+      
+	if (dynamic_cast<Item*> (elem)) 
 	{
-	  if (!elem->get_parent (X_AXIS))
+	  if (!elem->get_parent (X_AXIS)
+	      && elem != command_column_
+	      && elem != musical_column_
+	      )
 	    {
 	      bool br = to_boolean (elem->get_property ("breakable"));
 	      Axis_group_interface::add_element (br ? command_column_ : musical_column_, elem);
diff --git a/lily/script-column-engraver.cc b/lily/script-column-engraver.cc
index 9fd77afb47..e8bf2c4f60 100644
--- a/lily/script-column-engraver.cc
+++ b/lily/script-column-engraver.cc
@@ -64,8 +64,8 @@ Script_column_engraver::process_acknowledged_grobs ()
 {
   if (!scol_ && scripts_.size () > 1)
     {
-      scol_ = make_item ("ScriptColumn");
-      announce_grob (scol_, SCM_EOL);
+      scol_ = make_item ("ScriptColumn", SCM_EOL);
+      
     }
 
   if (scol_)
diff --git a/lily/script-engraver.cc b/lily/script-engraver.cc
index 8ebf701bbf..4b8fa5306e 100644
--- a/lily/script-engraver.cc
+++ b/lily/script-engraver.cc
@@ -132,7 +132,7 @@ Script_engraver::process_music ()
     {
       Music* l=scripts_[i].event_;
 
-      Grob * p = make_item ("Script");
+      Grob * p = make_item ("Script", l->self_scm ());
 
       make_script_from_event (p, &scripts_[i].description_, context (),
 			      l->get_property ("articulation-type"),
@@ -144,9 +144,6 @@ Script_engraver::process_music ()
       SCM force_dir = l->get_property ("direction");
       if (is_direction (force_dir) && to_dir (force_dir))
 	p->set_property ("direction", force_dir);
-      
-      if (p)
-	announce_grob (p, l->self_scm ());
     }
 }
 
diff --git a/lily/separating-line-group-engraver.cc b/lily/separating-line-group-engraver.cc
index 3ab5b42256..b9b3fda402 100644
--- a/lily/separating-line-group-engraver.cc
+++ b/lily/separating-line-group-engraver.cc
@@ -75,9 +75,9 @@ Separating_line_group_engraver::process_music ()
 
   if (!sep_span_)
     {
-      sep_span_ = make_spanner ("SeparatingGroupSpanner");
+      sep_span_ = make_spanner ("SeparatingGroupSpanner", SCM_EOL);
 
-      announce_grob (sep_span_, SCM_EOL);
+      
       sep_span_->set_bound (LEFT, unsmob_grob (get_property ("currentCommandColumn")));
     }
 }
@@ -135,23 +135,23 @@ Separating_line_group_engraver::acknowledge_grob (Grob_info i)
 
   if (!p_ref_)
     {
-      p_ref_ = make_item ("SeparationItem");
+      p_ref_ = make_item ("SeparationItem", SCM_EOL);
 
       if (ib)
 	{
 	  p_ref_->set_property ("breakable", SCM_BOOL_T);
 	  context ()->set_property ("breakableSeparationItem", p_ref_->self_scm ());
 	}
-      announce_grob (p_ref_, SCM_EOL);
+      
 
       if (to_boolean (get_property ("createSpacing"))
 	  && p_ref_ == break_item_)
 	{
-	  Item *it  = make_item ("StaffSpacing");
+	  Item *it  = make_item ("StaffSpacing", SCM_EOL);
 	  current_spacings_.staff_spacing_ = it;
 	  it->set_property ("left-items", scm_cons (break_item_->self_scm (), SCM_EOL));
 	  
-	  announce_grob (it, SCM_EOL);
+	  
 
 	  if (int i = last_spacings_.note_spacings_.size ())
 	    {
diff --git a/lily/slash-repeat-engraver.cc b/lily/slash-repeat-engraver.cc
index 2ba59b6250..8b2c2400d7 100644
--- a/lily/slash-repeat-engraver.cc
+++ b/lily/slash-repeat-engraver.cc
@@ -110,8 +110,7 @@ Slash_repeat_engraver::process_music ()
 {
   if (repeat_ && now_mom () == next_moment_)
     {
-      beat_slash_ = make_item ("RepeatSlash");
-      announce_grob (beat_slash_, repeat_->self_scm ());
+      beat_slash_ = make_item ("RepeatSlash", repeat_->self_scm ());
       next_moment_ = next_moment_ + body_length_;
 
       get_global_context ()->add_moment_to_process (next_moment_);
diff --git a/lily/slur-engraver.cc b/lily/slur-engraver.cc
index 91498a7240..8d9e2b1934 100644
--- a/lily/slur-engraver.cc
+++ b/lily/slur-engraver.cc
@@ -149,7 +149,7 @@ Slur_engraver::process_music ()
 	{
 	  // push a new slur onto stack.
 	  // (use temp. array to wait for all slur STOPs)
-	  Grob* slur = make_spanner ("Slur");
+	  Grob* slur = make_spanner ("Slur", slur_ev->self_scm ());
 	  Slur::set_interface (slur); // cannot remove yet!
 
 
@@ -160,7 +160,6 @@ Slur_engraver::process_music ()
 	  
 	  start_slurs.push (slur);
 	  events_.push (slur_ev);
-	  announce_grob (slur, slur_ev->self_scm ());
 	}
     }
 
diff --git a/lily/spacing-engraver.cc b/lily/spacing-engraver.cc
index 6985a7903a..05803acdab 100644
--- a/lily/spacing-engraver.cc
+++ b/lily/spacing-engraver.cc
@@ -78,9 +78,9 @@ Spacing_engraver::process_music ()
 {
   if (!spacing_)
     {
-      spacing_ = make_spanner ("SpacingSpanner");
+      spacing_ = make_spanner ("SpacingSpanner", SCM_EOL);
       spacing_->set_bound (LEFT, unsmob_grob (get_property ("currentCommandColumn")));  
-      announce_grob (spacing_, SCM_EOL);
+      
     }
 }
 
diff --git a/lily/span-arpeggio-engraver.cc b/lily/span-arpeggio-engraver.cc
index 2bd12b0b31..fc841e4bac 100644
--- a/lily/span-arpeggio-engraver.cc
+++ b/lily/span-arpeggio-engraver.cc
@@ -65,8 +65,8 @@ Span_arpeggio_engraver::process_acknowledged_grobs ()
   if (!span_arpeggio_ && arpeggios_.size () > 1
       && to_boolean (get_property ("connectArpeggios")))
     {
-      span_arpeggio_ = make_item ("Arpeggio");
-      announce_grob (span_arpeggio_, SCM_EOL);      
+      span_arpeggio_ = make_item ("Arpeggio", SCM_EOL);
+            
     }
 }
 
diff --git a/lily/span-bar-engraver.cc b/lily/span-bar-engraver.cc
index b2ab37db86..5842c230b0 100644
--- a/lily/span-bar-engraver.cc
+++ b/lily/span-bar-engraver.cc
@@ -51,10 +51,10 @@ Span_bar_engraver::acknowledge_grob (Grob_info i)
 
       if (bars_.size () >= 2 && !spanbar_) 
 	{
-	  spanbar_ = make_item ("SpanBar");
+	  spanbar_ = make_item ("SpanBar", SCM_EOL);
 
 	  spanbar_->set_parent (bars_[0], X_AXIS);
-	  announce_grob (spanbar_, SCM_EOL);
+	  
 	}
     }
 }
diff --git a/lily/staff-symbol-engraver.cc b/lily/staff-symbol-engraver.cc
index 974c5ae1eb..e4f0574dd6 100644
--- a/lily/staff-symbol-engraver.cc
+++ b/lily/staff-symbol-engraver.cc
@@ -46,11 +46,11 @@ Staff_symbol_engraver::process_music ()
 {
   if (!span_)
     {
-      span_ = make_spanner ("StaffSymbol");
+      span_ = make_spanner ("StaffSymbol", SCM_EOL);
   
       span_->set_bound (LEFT, unsmob_grob (get_property ("currentCommandColumn")));
 
-      announce_grob (span_, SCM_EOL);
+      
     }
 }
 
diff --git a/lily/stanza-number-engraver.cc b/lily/stanza-number-engraver.cc
index b8443e75b5..7c103de38a 100644
--- a/lily/stanza-number-engraver.cc
+++ b/lily/stanza-number-engraver.cc
@@ -49,9 +49,9 @@ Stanza_number_engraver::process_music ()
     {
       last_stanza_ = stanza;
       
-      text_ = make_item ("StanzaNumber");
+      text_ = make_item ("StanzaNumber", SCM_EOL);
       text_->set_property ("text", stanza);
-      announce_grob (text_, SCM_EOL);
+      
     }
 }
 
diff --git a/lily/stem-engraver.cc b/lily/stem-engraver.cc
index d594868da3..be02b75464 100644
--- a/lily/stem-engraver.cc
+++ b/lily/stem-engraver.cc
@@ -65,7 +65,10 @@ Stem_engraver::acknowledge_grob (Grob_info i)
       
       if (!stem_) 
 	{
-	  stem_ = make_item ("Stem");
+	  /*
+	    We announce the cause of the head as cause of the stem.
+	    The stem needs a rhythmic structure to fit it into a beam.  */
+	  stem_ = make_item ("Stem",i.music_cause ()->self_scm ());
 
 	  stem_->set_property ("duration-log", scm_int2num (duration_log));
 
@@ -100,8 +103,7 @@ Stem_engraver::acknowledge_grob (Grob_info i)
 
 	      if (tremolo_flags)
 		{
-		  tremolo_ = make_item ("StemTremolo");
-		  announce_grob (tremolo_, tremolo_ev_->self_scm ());
+		  tremolo_ = make_item ("StemTremolo", tremolo_ev_->self_scm ());
 
 		  /*
 		    The number of tremolo flags is the number of flags of
@@ -117,10 +119,6 @@ Stem_engraver::acknowledge_grob (Grob_info i)
 		}
 	    }
 
-	  /*
-	    We announce the cause of the head as cause of the stem.
-	    The stem needs a rhythmic structure to fit it into a beam.  */
-	  announce_grob (stem_, i.music_cause ()->self_scm ());
 	}
 
       if (Stem::duration_log (stem_) != duration_log)
diff --git a/lily/system-start-delimiter-engraver.cc b/lily/system-start-delimiter-engraver.cc
index a0fdceb4dd..39e21f3dc4 100644
--- a/lily/system-start-delimiter-engraver.cc
+++ b/lily/system-start-delimiter-engraver.cc
@@ -73,10 +73,10 @@ System_start_delimiter_engraver::process_music ()
   if (!delim_)
     {
       SCM delim_name =get_property ("systemStartDelimiter");
-      delim_ = make_spanner_from_properties (context (), delim_name);
+      delim_ = make_spanner_from_properties (this, delim_name, SCM_EOL);
 
       delim_->set_bound (LEFT, unsmob_grob (get_property ("currentCommandColumn")));
-      announce_grob (delim_, SCM_EOL);
+      
     }
 }
 void
diff --git a/lily/system.cc b/lily/system.cc
index 3f8d7e6710..177756601f 100644
--- a/lily/system.cc
+++ b/lily/system.cc
@@ -52,10 +52,12 @@ System::typeset_grob (Grob * elem)
 {
   if (elem->pscore_)
     programming_error ("Adding element twice.");
-  
-  elem->pscore_ = pscore_;
-  Pointer_group_interface::add_grob (this, ly_symbol2scm ("all-elements"), elem);
-  scm_gc_unprotect_object (elem->self_scm ());
+  else
+    {
+      elem->pscore_ = pscore_;
+      Pointer_group_interface::add_grob (this, ly_symbol2scm ("all-elements"), elem);
+      scm_gc_unprotect_object (elem->self_scm ());
+    }
 }
 
 // todo: use map.
diff --git a/lily/tab-note-heads-engraver.cc b/lily/tab-note-heads-engraver.cc
index ecca3ed9e5..3a6285ec00 100644
--- a/lily/tab-note-heads-engraver.cc
+++ b/lily/tab-note-heads-engraver.cc
@@ -73,9 +73,9 @@ Tab_note_heads_engraver::process_music ()
       int number_of_strings = ((int) ly_length (stringTunings));
       bool high_string_one = to_boolean (get_property ("highStringOne"));
 
-      Item * note  = make_item ("TabNoteHead");
       
       Music * event = note_events_[i];
+      Item * note  = make_item ("TabNoteHead", event->self_scm ());
 
       
       Music * tabstring_event=0;
@@ -115,7 +115,7 @@ Tab_note_heads_engraver::process_music ()
 
       if (dur.dot_count ())
 	{
-	  Item * d = make_item ("Dots");
+	  Item * d = make_item ("Dots", event->self_scm ());
 	  Rhythmic_head::set_dots (note, d);
 	  
 	  if (dur.dot_count ()
@@ -123,7 +123,7 @@ Tab_note_heads_engraver::process_music ()
 	    d->set_property ("dot-count", scm_int2num (dur.dot_count ()));
 
 	  d->set_parent (note, Y_AXIS);
-	  announce_grob (d, SCM_EOL);
+	  
 	  dots_.push (d);
 	}
       
@@ -152,7 +152,6 @@ Tab_note_heads_engraver::process_music ()
       note->set_property ("text", text);      
       
       note->set_property ("staff-position", scm_int2num (pos));
-      announce_grob (note, event->self_scm ());
       notes_.push (note);
     }
 }
diff --git a/lily/text-engraver.cc b/lily/text-engraver.cc
index d398f4b2e7..ca3bd57347 100644
--- a/lily/text-engraver.cc
+++ b/lily/text-engraver.cc
@@ -84,7 +84,7 @@ Text_engraver::process_acknowledged_grobs ()
       Music * r = evs_[i];
       
       // URG: Text vs TextScript
-      Item *text = make_item ("TextScript");
+      Item *text = make_item ("TextScript", r->self_scm ());
 
       
       Axis ax = Y_AXIS;
@@ -109,7 +109,6 @@ Text_engraver::process_acknowledged_grobs ()
       SCM mark = r->get_property ("text");
 
       text->set_property ("text", mark);
-      announce_grob (text, r->self_scm ());
       texts_.push (text);
     }
 }
diff --git a/lily/text-spanner-engraver.cc b/lily/text-spanner-engraver.cc
index c5fb70991a..6ffd0c8847 100644
--- a/lily/text-spanner-engraver.cc
+++ b/lily/text-spanner-engraver.cc
@@ -81,11 +81,10 @@ Text_spanner_engraver::process_music ()
       else
 	{
 	  current_req_ = req_drul_[START];
-	  span_  = make_spanner ("TextSpanner");
+	  span_  = make_spanner ("TextSpanner", req_drul_[START]->self_scm ());
 
 	  
 	  Side_position_interface::set_axis (span_, Y_AXIS);
-	  announce_grob (span_, req_drul_[START]->self_scm ());
 	  req_drul_[START] = 0;
 	}
     }
diff --git a/lily/tie-engraver.cc b/lily/tie-engraver.cc
index ee2fdab41d..c1a145184c 100644
--- a/lily/tie-engraver.cc
+++ b/lily/tie-engraver.cc
@@ -97,21 +97,20 @@ Tie_engraver::acknowledge_grob (Grob_info i)
 	      && ly_c_equal_p (right_mus->get_property ("pitch"),
 			     left_mus->get_property ("pitch")))
 	    {
-	      Grob * p = make_spanner ("Tie");
+	      Grob * p = make_spanner ("Tie", last_event_->self_scm ());
 	      Tie::set_interface (p); // cannot remove yet!
 	  
 	      Tie::set_head (p, LEFT, th);
 	      Tie::set_head (p, RIGHT, h);
 	  
 	      ties_.push (p);
-	      announce_grob (p, last_event_->self_scm ());
 	    }
 	}
 
       if (ties_.size () && ! tie_column_)
 	{
-	  tie_column_ = make_spanner ("TieColumn");
-	  announce_grob (tie_column_, SCM_EOL);
+	  tie_column_ = make_spanner ("TieColumn", SCM_EOL);
+	  
 	}
 
       if (tie_column_)
diff --git a/lily/time-signature-engraver.cc b/lily/time-signature-engraver.cc
index c29863f989..2a5a456ffc 100644
--- a/lily/time-signature-engraver.cc
+++ b/lily/time-signature-engraver.cc
@@ -62,11 +62,8 @@ Time_signature_engraver::process_music ()
   
       
       last_time_fraction_ = fr; 
-      time_signature_ = make_item ("TimeSignature");
+      time_signature_ = make_item ("TimeSignature",SCM_EOL);
       time_signature_->set_property ("fraction",fr);
-
-      if (time_signature_)
-	announce_grob (time_signature_, SCM_EOL);
     }
 }
 
diff --git a/lily/translator-property.cc b/lily/translator-property.cc
index cb0658bf84..2c433a0086 100644
--- a/lily/translator-property.cc
+++ b/lily/translator-property.cc
@@ -13,6 +13,7 @@
 #include "warn.hh"
 #include "item.hh"
 #include "spanner.hh"
+#include "engraver.hh"
 
 /*
   Grob descriptions (ie. alists with layout properties) are
@@ -195,16 +196,27 @@ updated_grob_properties (Context * tg, SCM sym)
 }
 
 Item*
-make_item_from_properties (Context * tg, SCM x)
+make_item_from_properties (Translator *tr, SCM x, SCM cause)
 {
+  Context *tg = tr->context ();
+  
   SCM props = updated_grob_properties (tg, x);
-  return new Item (props);
+  Item *it= new Item (props);
+
+  dynamic_cast<Engraver*>(tr)->announce_grob (it, cause);
+  
+  return it;
 }
 
 Spanner*
-make_spanner_from_properties (Context *tg, SCM x)
+make_spanner_from_properties (Translator *tr, SCM x, SCM cause)
 {
+  Context *tg = tr->context ();
+  
   SCM props = updated_grob_properties (tg, x);
-  return new Spanner (props);
-}
+  Spanner *it= new Spanner (props);
 
+  dynamic_cast<Engraver*>(tr)->announce_grob (it, cause);
+  
+  return it;
+}
diff --git a/lily/tuplet-engraver.cc b/lily/tuplet-engraver.cc
index 6ec076d044..51a0fa56f8 100644
--- a/lily/tuplet-engraver.cc
+++ b/lily/tuplet-engraver.cc
@@ -70,7 +70,7 @@ Tuplet_engraver::process_acknowledged_grobs ()
       if (i < started_spanners_.size () && started_spanners_[i])
 	continue;
 
-      Spanner* glep = make_spanner ("TupletBracket");
+      Spanner* glep = make_spanner ("TupletBracket", time_scaled_musics_ [i]->self_scm ());
 
       if (i >= started_spanners_.size ())
 	started_spanners_.push (glep);
@@ -85,7 +85,6 @@ Tuplet_engraver::process_acknowledged_grobs ()
 	  glep->set_property ("text", t);
 	}
       
-      announce_grob (glep, time_scaled_musics_ [i]->self_scm ());
     }
 }
 
diff --git a/lily/vaticana-ligature-engraver.cc b/lily/vaticana-ligature-engraver.cc
index e8197fc1fa..b6d6e5b6b8 100644
--- a/lily/vaticana-ligature-engraver.cc
+++ b/lily/vaticana-ligature-engraver.cc
@@ -48,7 +48,7 @@ Vaticana_ligature_engraver::Vaticana_ligature_engraver ()
 Spanner *
 Vaticana_ligature_engraver::create_ligature_spanner ()
 {
-  return make_spanner ("VaticanaLigature");
+  return make_spanner ("VaticanaLigature", SCM_EOL);
 }
 
 bool
diff --git a/lily/vertical-align-engraver.cc b/lily/vertical-align-engraver.cc
index b703745c4b..69fa04e42d 100644
--- a/lily/vertical-align-engraver.cc
+++ b/lily/vertical-align-engraver.cc
@@ -35,9 +35,9 @@ Vertical_align_engraver::process_music ()
 {
   if (!valign_)
     {
-      valign_ =make_spanner ("VerticalAlignment");
+      valign_ =make_spanner ("VerticalAlignment", SCM_EOL);
       valign_->set_bound (LEFT,unsmob_grob (get_property ("currentCommandColumn")));
-      announce_grob (valign_ , SCM_EOL);
+      
     }
 }
 
diff --git a/lily/volta-engraver.cc b/lily/volta-engraver.cc
index fd313e4762..248d5740e9 100644
--- a/lily/volta-engraver.cc
+++ b/lily/volta-engraver.cc
@@ -165,9 +165,9 @@ Volta_engraver::process_music ()
     {
       started_mom_ = now_mom () ;
 
-      volta_span_ = make_spanner ("VoltaBracket");
+      volta_span_ = make_spanner ("VoltaBracket", SCM_EOL);
 
-      announce_grob (volta_span_, SCM_EOL);
+      
       volta_span_->set_property ("text", start_string_);
     }
 }
diff --git a/scm/music-functions.scm b/scm/music-functions.scm
index bdbe2d393d..62235b68ff 100644
--- a/scm/music-functions.scm
+++ b/scm/music-functions.scm
@@ -646,11 +646,11 @@ without context specification. Called  from parser."
 (define-public (set-accidental-style style . rest)
   "Set accidental style to STYLE. Optionally takes a context argument,
 e.g. 'Staff or 'Voice. The context defaults to Voice, except for piano styles, which
-use PianoStaff as a context. "
+use GrandStaff as a context. "
   (let ((context (if (pair? rest)
 		     (car rest) 'Staff))
 	(pcontext (if (pair? rest)
-		      (car rest) 'PianoStaff)))
+		      (car rest) 'GrandStaff)))
     (ly:export
      (cond
       ;; accidentals as they were common in the 18th century.
@@ -694,14 +694,14 @@ use PianoStaff as a context. "
       ((equal? style 'piano)
        (set-accidentals-properties #f
 				   '( Staff (same-octave . 0) (any-octave . 0) (same-octave . 1)
-					    PianoStaff (any-octave . 0) (same-octave . 1))
+					    GrandStaff (any-octave . 0) (same-octave . 1))
 				   '()
 				   pcontext))
       ((equal? style 'piano-cautionary)
        (set-accidentals-properties #f
 				   '(Staff (same-octave . 0))
 				   '(Staff (any-octave . 0) (same-octave . 1)
-					   PianoStaff (any-octave . 0) (same-octave . 1))
+					   GrandStaff (any-octave . 0) (same-octave . 1))
 				   pcontext))
       ;; do not set localKeySignature when a note alterated differently from
       ;; localKeySignature is found.
-- 
2.39.5