From: Han-Wen Nienhuys Date: Thu, 28 Jun 2001 23:06:14 +0000 (+0200) Subject: release: 1.5.0 X-Git-Tag: release/1.5.0 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=4995fea559cd5399b4f462de546a15195d76f4c3;p=lilypond.git release: 1.5.0 ===== * experimental grace notes: - add grace timing to Moment - hack to Sequential_music_iterator to use the correct timing for the note before a grace - change the implementation of \grace construct - property set/unset (eg. font size) is done through startGraceMusic and stopGraceMusic - various engraver fixes to deal with the fact that the main-time-moment may remain the same during several steps. - Change column creation logic in score-engraver. * Bugfix: don't crash when \name not set in \translator block. * rename ly/*.ly to ly/*-init.ly (except language files) to avoid name clashes * deprecate Property_engraver, add Font_size_engraver to Staff, Voice and Thread. * Change mailing list address: *gnu-music*@gnu.org becomes *lilypond*@gnu.org * Put span-bar lines only between the other barlines, not on top of them (thanks to Juergen Reuter) 1.4.4.j --- diff --git a/CHANGES b/CHANGES index 0ccd47a168..6fe737d185 100644 --- a/CHANGES +++ b/CHANGES @@ -1,176 +1,45 @@ - - -1.4.3.jcn2 -========== - -* Included documentatioon and post-flex lexer.cc patch for -Debian/unstable gcc-3.0. - -* Enhanced gcc autoconf and make messages. - -* Added -mieee to CFLAGS for alpha. - -* Fixed help and documentation of new LilyPond command line. - -* Redirected SuSE download to ftp.lilypond.org (where mirror script runs). - -1.4.3 -===== - -1.4.2.jcn4 -========== - -* Windows: bugfix for tex-wrappers, added tex wrapper for dvips. -LilyPond (read: ly2dvi) should now work right out of the box. - -Amazing; it seems that ly2dvi won't generate PK files without this -dvips wrapper. We had over 200 downloads of setup.exe, yet only one -`call for help'. Did all the others give up, or did none of them -bother to share their fix/file a bug report? Urg. - -* Included mktexnam.patch (again?). - -* Documentation fix (Mark Hindley). - -* Debian patch and bashism fix (Anthony). - -* Bugfix: local-install should depend on $(INSTALLATION_FILES). This fixes -./configure; make install in buildscripts/ (Michael Vanier). - -* Removed les-nereides from short-examples, as it is tweaked a lot, -contrary to what the webpage claims (didn't know that). - -1.4.2.mb1 -========== - -* ly2dvi, titledefs.tex: Typeset copyright notice at the bottom of the -first page. Make separate page styles for first and last page. - -* Bugfix: Default RehearsalMark font-family changed to roman (only -affects Scheme text markups). - -1.4.2.hwn1 -========== - -* Added support for Q: statement to abc2ly. (Laura Conrad) - -* Tie shape bugfix (Mark Hindley). - -* Bugfix: lilypond-book LatexPaper.__setattr__() - -* Bugfix: make Hyphen_spanner::brew_molecule() more robust. - -* Don't use stdin when no argument specified. - -* Naming smobs -> grobs - -* Bugfix: ledger lines on easy-notation note heads. - -1.4.2 +1.5.0 ===== -* Glossary fixes (Thanks Jean-Pierre Coulon). - -1.4.1.jcn3 -========== - -* Updated les-nereides. +* experimental grace notes: + - add grace timing to Moment + - hack to Sequential_music_iterator to use the correct timing for +the note before a grace + - change the implementation of \grace construct + - property set/unset (eg. font size) is done through startGraceMusic +and stopGraceMusic + - various engraver fixes to deal with the fact that the +main-time-moment may remain the same during several steps. + - Change column creation logic in score-engraver. -* Added \newpage command. +* Bugfix: don't crash when \name not set in \translator block. -* Doco fixes. +* rename ly/*.ly to ly/*-init.ly (except language files) to avoid +name clashes -* Debian make fix. +* deprecate Property_engraver, add Font_size_engraver to Staff, Voice +and Thread. -* Fix for index, small doco fixes. +* Change mailing list address: *gnu-music*@gnu.org becomes +*lilypond*@gnu.org -* Bugfix: use roman font (instead of feta) for unacorda pedal. +* Put span-bar lines only between the other barlines, not on top of +them (thanks to Juergen Reuter) -* Don't use cyclic symlinks for web doc. - -* Don't create `empty pngs' with touch, make symlinks instead. - -* Added extra header titling fields to ly2dvi too. - -1.4.1.mb2 -========= - -* documentation fixes - -* Add make rule to avoid problems building dvi documentation - -* Documentation fixes - -* Bugfix: tuplet-number-visibility - -1.4.1.hwn1 -========== - -* Do not lengthen the stem in case of a collision with the flag, but -move dots to the right. - -* Debian patches (Thanks, Anthony!) - -1.4.1 -===== - -1.4.0.jcn7 +1.4.4.jcn3 ========== + +TODO: look at other filledbox'es (stafflines and barlines don't match up). -* Added \tupletUp, \tupletDown, \tupletBoth. - -* Bugfix convert-ly: treCorde. - -* Slur attachment and extremity offsets taken relative to slur -direction; so that - - Slur \override #'attachment-offset = #'((0 . 1) . (0 . 1)) - -will always make the slur move away from the note head. - -* Bugfix: slurs on dotted or flagged notes. - -* Added @reng, @rgrob, and @rint macros for referencing engravers, -grobs and interfaces in documentation. - -* Bugfix for configure. - -* text2html: use python script, use
 instead of .
-
-* Fixed pa.ly.
-
-* Bugfix: lilypond mode: make view messages scroll by.
-
-* configure: check for splitting makeinfo; small fixes for
-non-splitting makeinfo doc.
-
-* Added some missing titling (dedication, translator) and fixed ps titling
-(Thanks David Arnold).
-
-* More doco fixes.  Added a small legend.
-
-* Bugfix: trend of broken slurs with user-overridden stem attachments.
-
-* Bugfix redhat.spec: use root attributes on files.
-
-* Bugfix: typo in update-lily, re-set download url to /development.
-
-* Removed some empty files.
-
-* Merged tutorials. Simplified the text.
-
-* Small doco fixes.
-
-1.4.0.uu1
-=========
-
-* Bugfix: percussion clef
-
-* Bugfix: multiple scripts.
+* Testing code off by default.  On: -e "(define ps-testing 1)" -fps
 
-* Bugfix: read TeX's afm files. Metrics are still messed up (too small), but no
-crash.
+* Output via TeX/dvips still gives problems.  Use direct postscript
+output for real testing.
 
-* Bugfix: fixed the problem where dots clash with other notes (Timothy S.
-Nelson)
+* Beam and stem fixes:
+ - Stems drawn in PostScript (should do all filledbox'es in PS?).
+ - Fixes for draw_box and draw_beam PostScript routines.
+ - Stems reach to top (or bottom) of beam.
+ - Beam uses correct stem thickness (only right beams, left TODO).
+ - testing code in effect: only outlines are drawn.
 
diff --git a/DEDICATION b/DEDICATION
index e29874c5e9..ad8fcd5309 100644
--- a/DEDICATION
+++ b/DEDICATION
@@ -5,10 +5,10 @@
 			 met through music. 
 
 
-	Those deserving special mentioning (in no particular order):
-Esther, Marijke, Heike, Inge, Judith, Hannah, Auke, Ilse, Evelyn,
-Maartje, Suzanne, Ilse (gee, again?), Marieke, Irene, Martine, and
-last (but certainly not least) Janneke!
+	Those deserving special mentioning (in no particular order): Esther,
+Marijke, Heike, Inge, Judith, Hannah, Auke, Ilse, Evelyn, Maartje, Suzanne,
+Ilse (gee, again?), Marieke, Irene, Martine, Idwine and last (but certainly not
+least) Janneke!
 
 	HWN
 
diff --git a/Documentation/misc/CHANGES-1.3 b/Documentation/misc/CHANGES-1.3
index 864e359b6d..476a69dc15 100644
--- a/Documentation/misc/CHANGES-1.3
+++ b/Documentation/misc/CHANGES-1.3
@@ -41,7 +41,7 @@ dvips are stored in outdir.
 * PO updates.
 
 * petite-ouverture-a-danser.ly bugfix, twinkle.ly bugfix
-V
+
 1.3.153
 =======
 
@@ -363,7 +363,7 @@ staff.
 
 * Add a check for regular identifiers to parser.
 
-1.3.145
+1.3.146
 =======
 
 * Make and ly2dvi fixes.
diff --git a/Documentation/misc/CHANGES-1.4 b/Documentation/misc/CHANGES-1.4
new file mode 100644
index 0000000000..af019b8376
--- /dev/null
+++ b/Documentation/misc/CHANGES-1.4
@@ -0,0 +1,157 @@
+1.4.2.jcn4
+==========
+
+* Windows: bugfix for tex-wrappers, added tex wrapper for dvips.
+LilyPond (read: ly2dvi) should now work right out of the box.
+
+Amazing; it seems that ly2dvi won't generate PK files without this
+dvips wrapper.  We had over 200 downloads of setup.exe, yet only one
+`call for help'.  Did all the others give up, or did none of them
+bother to share their fix/file a bug report?  Urg.
+
+* Included mktexnam.patch (again?).
+
+* Documentation fix (Mark Hindley).
+
+* Debian patch and bashism fix (Anthony).
+
+* Bugfix: local-install should depend on $(INSTALLATION_FILES).  This fixes
+./configure; make install in buildscripts/ (Michael Vanier).
+
+* Removed les-nereides from short-examples, as it is tweaked a lot,
+contrary to what the webpage claims (didn't know that).
+
+1.4.2.mb1
+==========
+
+* ly2dvi, titledefs.tex: Typeset copyright notice at the bottom of the
+first page. Make separate page styles for first and last page.
+
+* Bugfix: Default RehearsalMark font-family changed to roman (only
+affects Scheme text markups).
+
+1.4.2.hwn1
+==========
+
+* Added support for Q: statement to abc2ly. (Laura Conrad)
+
+* Tie shape bugfix (Mark Hindley).
+
+* Bugfix: lilypond-book LatexPaper.__setattr__()
+
+* Bugfix: make Hyphen_spanner::brew_molecule() more robust.
+
+* Don't use stdin when no argument specified.
+
+* Naming smobs -> grobs 
+
+* Bugfix: ledger lines on easy-notation note heads.
+
+1.4.2
+=====
+
+* Glossary fixes (Thanks Jean-Pierre Coulon).
+
+1.4.1.jcn3
+==========
+
+* Updated les-nereides.
+
+* Added \newpage command.
+
+* Doco fixes.
+
+* Debian make fix.
+
+* Fix for index, small doco fixes.
+
+* Bugfix: use roman font (instead of feta) for unacorda pedal.
+
+* Don't use cyclic symlinks for web doc.
+
+* Don't create `empty pngs' with touch, make symlinks instead.
+
+* Added extra header titling fields to ly2dvi too.
+
+1.4.1.mb2
+=========
+
+* documentation fixes
+
+* Add make rule to avoid problems building dvi documentation
+
+* Documentation fixes
+
+* Bugfix: tuplet-number-visibility
+
+1.4.1.hwn1
+==========
+
+* Do not lengthen the stem in case of a collision with the flag, but
+move dots to the right.
+
+* Debian patches (Thanks, Anthony!)
+
+1.4.1
+=====
+
+1.4.0.jcn7
+==========
+
+* Added \tupletUp, \tupletDown, \tupletBoth.
+
+* Bugfix convert-ly: treCorde.
+
+* Slur attachment and extremity offsets taken relative to slur
+direction; so that
+
+   Slur \override #'attachment-offset = #'((0 . 1) . (0 . 1))
+
+will always make the slur move away from the note head.
+
+* Bugfix: slurs on dotted or flagged notes.
+
+* Added @reng, @rgrob, and @rint macros for referencing engravers,
+grobs and interfaces in documentation.
+
+* Bugfix for configure.
+
+* text2html: use python script, use <pre> instead of <xmp>.
+
+* Fixed pa.ly.
+
+* Bugfix: lilypond mode: make view messages scroll by.
+
+* configure: check for splitting makeinfo; small fixes for
+non-splitting makeinfo doc.
+
+* Added some missing titling (dedication, translator) and fixed ps titling
+(Thanks David Arnold).
+
+* More doco fixes.  Added a small legend.
+
+* Bugfix: trend of broken slurs with user-overridden stem attachments.
+
+* Bugfix redhat.spec: use root attributes on files.
+
+* Bugfix: typo in update-lily, re-set download url to /development.
+
+* Removed some empty files.
+
+* Merged tutorials. Simplified the text.
+
+* Small doco fixes.
+
+1.4.0.uu1
+=========
+
+* Bugfix: percussion clef
+
+* Bugfix: multiple scripts.
+
+* Bugfix: read TeX's afm files. Metrics are still messed up (too small), but no
+crash.
+
+* Bugfix: fixed the problem where dots clash with other notes (Timothy S.
+Nelson)
+
diff --git a/Documentation/regression-test.tely b/Documentation/regression-test.tely
index 54d58e9fe8..e6114b6f1c 100644
--- a/Documentation/regression-test.tely
+++ b/Documentation/regression-test.tely
@@ -221,6 +221,8 @@ and documenting bugfixes.
 
 @lilypondfile[printfilename]{bar-number.ly}
 
+@lilypondfile[printfilename]{span-bar.ly}
+
 @lilypondfile[printfilename]{bar-scripts.ly}
 
 @lilypondfile[printfilename]{staff-margin.ly}
diff --git a/Documentation/topdocs/FAQ.texi b/Documentation/topdocs/FAQ.texi
index 257fccc37d..3612f583d0 100644
--- a/Documentation/topdocs/FAQ.texi
+++ b/Documentation/topdocs/FAQ.texi
@@ -19,7 +19,7 @@
 @subsection I'm stuck, HELP!
 
 Please read the
-@uref{http://appel.lilypond.org/wiki?LilyPondFaqs, full online
+@uref{http://lilypond.org/wiki?LilyPondFaqs, full online
 FAQs}.  Also, please look in the searchable mailinglist archives:
 
 @itemize @bullet
diff --git a/Documentation/topdocs/INSTALL.texi b/Documentation/topdocs/INSTALL.texi
index 8a0b07f13c..59f14e5688 100644
--- a/Documentation/topdocs/INSTALL.texi
+++ b/Documentation/topdocs/INSTALL.texi
@@ -489,10 +489,9 @@ interfere with your build, you may want to do this before the build too:
 
 @section Problems
 
-For help and questions use @email{help-gnu-music@@gnu.org} and
-@email{gnu-music-discuss@@gnu.org}.  Please consult the FAQ before
-mailing your problems.  If you find bugs, please send bug reports to
-@email{bug-gnu-music@@gnu.org}.
+For help and questions use @email{lilypond-user@@gnu.org}.  Please
+consult the FAQ before mailing your problems.  If you find bugs, please
+send bug reports to @email{bug-lilypond@@gnu.org}.
 
 Bugs that are not fault of LilyPond are documented here.
 
diff --git a/Documentation/topdocs/README.texi b/Documentation/topdocs/README.texi
index a9160cdb0d..421369f899 100644
--- a/Documentation/topdocs/README.texi
+++ b/Documentation/topdocs/README.texi
@@ -64,19 +64,20 @@ criticism, comments, bugreports, patches, etc., to the mailing list,
 We have the following mailing lists:
 
 @itemize @bullet
-@item @uref{http://mail.gnu.org/mailman/listinfo/info-gnu-music,info-gnu-music@@gnu.org}
+@item @uref{http://mail.gnu.org/mailman/listinfo/info-lilypond,info-lilypond@@gnu.org}
 is a low-volume list for information on the GNU Music project.
     This list is moderated; ask 
     @email{drl@@gnu.org, David R. Linn} or
     @email{hanwen@@cs.uu.nl, Han-Wen} to send announcements for this
 list.
 @item
-@uref{http://mail.gnu.org/mailman/listinfo/gnu-music-discuss,gnu-music-discuss@@gnu.org}
-  For general discussions concerning LilyPond.
+@uref{http://mail.gnu.org/mailman/listinfo/lilypond-devel,lilypond-devel@@gnu.org}
+  For discussions about developing lilypond, in particular the unstable series.
 
-@item @uref{http://mail.gnu.org/mailman/listinfo/help-gnu-music,help-gnu-music@@gnu.org}
-    For help with using LilyPond.
-@item @uref{http://mail.gnu.org/mailman/listinfo/bug-gnu-music,bug-gnu-music@@gnu.org}
+@item @uref{http://mail.gnu.org/mailman/listinfo/help-lilypond,help-lilypond@@gnu.org}
+  For discussions about using lilypond, in particular the stable series.
+
+@item @uref{http://mail.gnu.org/mailman/listinfo/bug-lilypond,bug-lilypond@@gnu.org}
 If you have bugreports, you should send them to this list.
 @end itemize
 
@@ -100,9 +101,9 @@ a script to do this for you is in @file{buildscripts/clean-fonts.sh}
 
 @section Bugs
 
-Send bug reports to @email{bug-gnu-music@@gnu.org}.  For help and
-questions use @email{help-gnu-music@@gnu.org} and
-@email{gnu-music-discuss@@gnu.org}.  Please consult the FAQ and
+Send bug reports to @email{bug-lilypond@@gnu.org}.  For help and
+questions use @email{help-lilypond@@gnu.org} and
+@email{lilypond-discuss@@gnu.org}.  Please consult the FAQ and
 installation instructions before mailing your problems.
 
 
diff --git a/Documentation/user/bugs.itexi b/Documentation/user/bugs.itexi
index fc51178df9..033837abff 100644
--- a/Documentation/user/bugs.itexi
+++ b/Documentation/user/bugs.itexi
@@ -27,7 +27,7 @@ system libraries, whether you downloaded a binary release)
 @end itemize
 
 
-You can send the report to @email{bug-gnu-music@@gnu.org}. This is a
+You can send the report to @email{bug-lilypondg@@gnu.org}. This is a
 mailinglist, but you don't have to be subscribed to it.  You may also
 enter the bug in the LilyPond wiki, at
 @uref{http://www.lilypond.org/wiki?LilyPondBugs}.
diff --git a/Documentation/user/convert-ly.itexi b/Documentation/user/convert-ly.itexi
index dc1590a6ed..f5bfe39042 100644
--- a/Documentation/user/convert-ly.itexi
+++ b/Documentation/user/convert-ly.itexi
@@ -53,6 +53,6 @@ work.
 
 @code{convert-ly} is written in @uref{http://www.python.org,Python}. It
 was written by @email{hanwen@@cs.uu.nl, Han-Wen Nienhuys}. Report bugs
-to @code{bug-gnu-music@@gnu.org}
+to @code{bug-lilypond@@gnu.org}
 
 
diff --git a/Documentation/user/converters.itely b/Documentation/user/converters.itely
index b6d09011ad..7609ed2ca2 100644
--- a/Documentation/user/converters.itely
+++ b/Documentation/user/converters.itely
@@ -75,7 +75,7 @@ robust midi2ly.
 @end table
 
 
-Report bugs to @email{bug-gnu-music@@gnu.org}.
+Report bugs to @email{bug-lilypond@@gnu.org}.
 
 
 Written by @email{Jan Nieuwenhuizen, janneke@@gnu.org}.
@@ -115,7 +115,7 @@ Known: articulation scripts are buggy.  Empty measures confuse etf2ly.
 
 Written by @email{Han-Wen Nienhuys,hanwen@@cs.uu.nl}.
 
-Report bugs to @email{bug-gnu-music@@gnu.org}.
+Report bugs to @email{bug-lilypond@@gnu.org}.
 
 @node abc2ly
 @section abc2ly
@@ -175,7 +175,7 @@ abc2ly ignores the ABC beaming.
 Written by @email{Han-Wen Nienhuys,hanwen@@cs.uu.nl}.
 @c How about Laura?   /MB
 
-Report bugs to @email{bug-gnu-music@@gnu.org}.
+Report bugs to @email{bug-lilypond@@gnu.org}.
 
 @node pmx2ly
 @section pmx2ly
@@ -183,7 +183,7 @@ Report bugs to @email{bug-gnu-music@@gnu.org}.
 PMX is a MusiXTeX preprocessor written by Don Simons, see
 @uref{http://icking-music-archive.sunsite.dk/Misc/Music/musixtex/software/pmx/}.
 
-Report bugs to @email{bug-gnu-music@@gnu.org}.
+Report bugs to @email{bug-lilypond@@gnu.org}.
 
 @subsection Invoking pmx2ly
 
@@ -204,7 +204,7 @@ set output filename to FILE
 version information
 @end table
 
-Report bugs to @email{bug-gnu-music@@gnu.org}.
+Report bugs to @email{bug-lilypond@@gnu.org}.
 
 Written by @email{Han-Wen Nienhuys,hanwen@@cs.uu.nl}.
 
@@ -242,7 +242,7 @@ version information
 @var{REFFILE}
 @end table
 
-Report bugs to @email{bug-gnu-music@@gnu.org}.
+Report bugs to @email{bug-lilypond@@gnu.org}.
 
 Written by @email{Han-Wen Nienhuys,hanwen@@cs.uu.nl}.
 
@@ -289,7 +289,7 @@ converted.
 
 Written by @email{Jan Nieuwenhuizen,janneke@@gnu.org}, based on pmx2ly.
 
-Report bugs to @email{bug-gnu-music@@gnu.org}.
+Report bugs to @email{bug-lilypond@@gnu.org}.
 
 
 
diff --git a/Documentation/user/ly2dvi.itexi b/Documentation/user/ly2dvi.itexi
index c1ee6242fa..5e4f97c6c2 100644
--- a/Documentation/user/ly2dvi.itexi
+++ b/Documentation/user/ly2dvi.itexi
@@ -150,7 +150,7 @@ selects the language for the warning messages of Ly2dvi and LilyPond.
 @unnumberedsubsec  Bugs
 
 Cannot generate @TeX{} or @code{PostScript} only.  Send bugreports to to
-@email{bug-gnu-music@@gnu.org}.
+@email{bug-lilypond@@gnu.org}.
 
 @unnumberedsubsec  Authors
 
diff --git a/Documentation/user/refman.itely b/Documentation/user/refman.itely
index ac17a848af..7a4bc4379b 100644
--- a/Documentation/user/refman.itely
+++ b/Documentation/user/refman.itely
@@ -544,6 +544,7 @@ Shortcut for
 @example
   \property Staff.clefGlyph = @var{glyph associated with clefname} 
   \property Staff.clefPosition = @var{clef Y-position for clefname}
+  \property Staff.centralCPosition = @var{position for central C} 
   \property Staff.clefOctavation = @var{extra transposition of clefname}
 @end example
 
@@ -3505,6 +3506,7 @@ pstops ...
 
 
 @refbugs
+
 There is no mechanism to select magnification of particular fonts,
 meaning that you don't have access to continuously scaled fonts.
 
diff --git a/Documentation/windows/compiling.texi b/Documentation/windows/compiling.texi
index 5110fb12e2..dc2b06439d 100644
--- a/Documentation/windows/compiling.texi
+++ b/Documentation/windows/compiling.texi
@@ -19,11 +19,19 @@ webpage}.  You may need the patch @file{guile-1.4-gnu-windows.patch}
 included in LilyPond's source distribution.
 @end table
 
+@subsection Cross compiling
+
 These binaries are cross compiled for Windows on a GNU/Linux box.  You
 may want to check out the
 @uref{http://www.lilypond.org/gnu-windows/cross.tar.gz,cross compilation
 scripts}.
 
+@subsection Compiling on Windows
+
+Compiling on Windows should be possible, but how should we now?  If you
+have any experiences you want to share, please do so at
+@uref{http://lilypond.org/wiki?CompilingOnWindows,Compiling on Windows}.
+Or write to one of the mailing lists.
 
 @section Windows installation specifics
 
diff --git a/Documentation/windows/installing.texi b/Documentation/windows/installing.texi
index 9f2fa8bf9b..a06bc0e476 100644
--- a/Documentation/windows/installing.texi
+++ b/Documentation/windows/installing.texi
@@ -90,7 +90,8 @@ and try again.
 @subsection Trouble
 
 For problems and solutions see
-@uref{Troubleshooting Windows,http://lilypond.org/TroubleshootingWindows}.
+@uref{http://lilypond.org/wiki?TroubleshootingWindows,Troubleshooting
+Windows}
 
 
 @subsection Additional software
diff --git a/FAQ.txt b/FAQ.txt
index 0db3958775..f4671b9707 100644
--- a/FAQ.txt
+++ b/FAQ.txt
@@ -8,8 +8,8 @@ I'm stuck, HELP!
 ----------------
 
    Please read the full online FAQs
-(http://appel.lilypond.org/wiki?LilyPondFaqs).  Also, please look in
-the searchable mailinglist archives:
+(http://lilypond.org/wiki?LilyPondFaqs).  Also, please look in the
+searchable mailinglist archives:
 
    * help-gnu-music (http://www.mail-archive.com/help-gnu-music@gnu.org)
 
diff --git a/INSTALL.txt b/INSTALL.txt
index eb9e403815..a9ed703b22 100644
--- a/INSTALL.txt
+++ b/INSTALL.txt
@@ -463,10 +463,9 @@ interfere with your build, you may want to do this before the build too:
 Problems
 ========
 
-   For help and questions use <help-gnu-music@gnu.org> and
-<gnu-music-discuss@gnu.org>.  Please consult the FAQ before mailing
-your problems.  If you find bugs, please send bug reports to
-<bug-gnu-music@gnu.org>.
+   For help and questions use <lilypond-user@gnu.org>.  Please consult
+the FAQ before mailing your problems.  If you find bugs, please send
+bug reports to <bug-lilypond@gnu.org>.
 
    Bugs that are not fault of LilyPond are documented here.
 
diff --git a/README.txt b/README.txt
index 9d530f818c..c5ea27a416 100644
--- a/README.txt
+++ b/README.txt
@@ -52,22 +52,23 @@ list, _not_ to us personally.
 
    We have the following mailing lists:
 
-   * info-gnu-music@gnu.org
-     (http://mail.gnu.org/mailman/listinfo/info-gnu-music) is a
+   * info-lilypond@gnu.org
+     (http://mail.gnu.org/mailman/listinfo/info-lilypond) is a
      low-volume list for information on the GNU Music project.
      This list is moderated; ask     David R. Linn <drl@gnu.org> or
      Han-Wen <hanwen@cs.uu.nl> to send announcements for this list.
 
-   * gnu-music-discuss@gnu.org
-     (http://mail.gnu.org/mailman/listinfo/gnu-music-discuss)   For
-     general discussions concerning LilyPond.
+   * lilypond-devel@gnu.org
+     (http://mail.gnu.org/mailman/listinfo/lilypond-devel)   For
+     discussions about developing lilypond, in particular the unstable
+     series.
 
-   * help-gnu-music@gnu.org
-     (http://mail.gnu.org/mailman/listinfo/help-gnu-music)     For help
-     with using LilyPond.
+   * help-lilypond@gnu.org
+     (http://mail.gnu.org/mailman/listinfo/help-lilypond)   For
+     discussions about using lilypond, in particular the stable series.
 
-   * bug-gnu-music@gnu.org
-     (http://mail.gnu.org/mailman/listinfo/bug-gnu-music) If you have
+   * bug-lilypond@gnu.org
+     (http://mail.gnu.org/mailman/listinfo/bug-lilypond) If you have
      bugreports, you should send them to this list.
 
 Windows 32
@@ -90,8 +91,8 @@ files, eg.,
 Bugs
 ====
 
-   Send bug reports to <bug-gnu-music@gnu.org>.  For help and questions
-use <help-gnu-music@gnu.org> and <gnu-music-discuss@gnu.org>.  Please
+   Send bug reports to <bug-lilypond@gnu.org>.  For help and questions
+use <help-lilypond@gnu.org> and <lilypond-discuss@gnu.org>.  Please
 consult the FAQ and installation instructions before mailing your
 problems.
 
diff --git a/VERSION b/VERSION
index 69c891282e..b76131dbcc 100644
--- a/VERSION
+++ b/VERSION
@@ -1,7 +1,7 @@
 PACKAGE_NAME=LilyPond
 MAJOR_VERSION=1
-MINOR_VERSION=4
-PATCH_LEVEL=4
+MINOR_VERSION=5
+PATCH_LEVEL=0
 MY_PATCH_LEVEL=
 
 # use the above to send patches: MY_PATCH_LEVEL is always empty for a
diff --git a/buildscripts/lilypond-login.sh b/buildscripts/lilypond-login.sh
index ec2dac64df..e809b66224 100755
--- a/buildscripts/lilypond-login.sh
+++ b/buildscripts/lilypond-login.sh
@@ -7,8 +7,17 @@
 # strange shell, this C
 set datadir="@datadir@"
 
-setenv GS_FONTPATH "$datadir/afm:@datadir@/pfa:$GS_FONTPATH"
-setenv GS_LIB "$datadir/ps:$GS_LIB"
+if ( $?GS_FONTPATH ) then
+       setenv GS_FONTPATH "$datadir/afm:/usr/share/lilypond/pfa:$GS_FONTPATH"
+ else
+       setenv GS_FONTPATH "$datadir/afm:/usr/share/lilypond/pfa"
+ endif
+ if ( $?GS_LIB ) then
+       setenv GS_LIB "$datadir/ps:$GS_LIB"
+ else
+       setenv GS_LIB "$datadir/ps"
+ endif
+
 
 # setenv LILYPONDPREFIX "$datadir"
 
diff --git a/flower/include/rational.hh b/flower/include/rational.hh
index 0b1d5d972d..270ee56341 100644
--- a/flower/include/rational.hh
+++ b/flower/include/rational.hh
@@ -39,8 +39,7 @@ public:
   void invert ();
   int num () const { return sign_ * num_; }
   int den () const { return den_; }
-  int num_i () const { return sign_ * num_; }
-  int den_i () const { return den_; }
+
   Rational trunc_rat () const;
   Rational div_rat (Rational) const;
   Rational mod_rat (Rational) const;
diff --git a/input/bugs/beam.ly b/input/bugs/beam.ly
new file mode 100644
index 0000000000..44e7dfee39
--- /dev/null
+++ b/input/bugs/beam.ly
@@ -0,0 +1,15 @@
+\header {
+  texidoc="beam-stem attachment test"
+}
+	
+\score {
+  \context RhythmicStaff \notes {
+    \stemUp [c8 c]
+    \stemDown [c8 c]
+    \stemUp [c8. c16]
+  }
+  \paper {
+    linewidth = -1.0
+    magnification = 64
+  }
+}
\ No newline at end of file
diff --git a/input/bugs/newgrace.ly b/input/bugs/newgrace.ly
new file mode 100644
index 0000000000..9db2a2b46e
--- /dev/null
+++ b/input/bugs/newgrace.ly
@@ -0,0 +1,8 @@
+\score {  \notes {
+  \clef bass
+  <{ 
+    \grace { [c16  ] }
+    \relative b,  b2  
+   } >
+}
+}
diff --git a/input/regression/grace-bar-line.ly b/input/regression/grace-bar-line.ly
new file mode 100644
index 0000000000..69b0ceed92
--- /dev/null
+++ b/input/regression/grace-bar-line.ly
@@ -0,0 +1,13 @@
+\header {
+
+texidoc = "Bar line should come before the grace note.";
+}
+
+	
+
+
+
+\score  {\notes \relative c' \context Staff  { 
+ f1 \ngrace { [a'16 f]  } g1 }
+		\paper { linewidth = -1. }
+ } 
diff --git a/input/regression/grace-start.ly b/input/regression/grace-start.ly
new file mode 100644
index 0000000000..1094d3b5fd
--- /dev/null
+++ b/input/regression/grace-start.ly
@@ -0,0 +1,9 @@
+\header {
+texidoc = "Pieces may begin with grace notes."
+}
+\score  {\notes \relative c' \context Staff  { 
+ \grace { [a'16 f]  } g1
+ \grace { [a16 bes]  }  c1
+  }
+  \paper { linewidth = -1. }
+}
diff --git a/input/regression/grace-sync.ly b/input/regression/grace-sync.ly
new file mode 100644
index 0000000000..0ddcdf37f8
--- /dev/null
+++ b/input/regression/grace-sync.ly
@@ -0,0 +1,15 @@
+\header  {
+  texidoc = "grace notes in different voices/staffs are synchronized."
+}
+
+\score  {\notes < \context Staff  { c2
+ \ngrace  c8
+ c2 c4 }
+		\context Staff = SB { c2 \clef bass
+ %\ngrace { [dis8 ( d8] }
+
+  ) c2 c4 }
+		\context Staff = SC { c2 c2 c4 }
+		>
+		\paper { linewidth = -1. }
+ } 
diff --git a/input/regression/span-bar.ly b/input/regression/span-bar.ly
new file mode 100644
index 0000000000..9bebddd626
--- /dev/null
+++ b/input/regression/span-bar.ly
@@ -0,0 +1,37 @@
+\header {
+texidoc = "Span bars draw only in between staff bar lines, so setting those to transparent shows bar lines between systems only.
+"
+}
+
+\score {
+ \notes \relative c' \context StaffGroup = groupie <
+  \context Staff = SA { c1 c1 c1}
+  \context Lyrics = LA \lyrics <
+   { bla1 die bla }
+  >
+  \context Staff = SB { a1 a1 a1}
+  \context Lyrics = LB \lyrics <
+   { bla1 die bla }
+   { foo bar foo }
+  >
+  \context Staff = SC { f1 f1 f1}
+  \context Lyrics = LC \lyrics <
+   { bla1 die bla }
+   { foo bar foo }
+   { foo bar foo }
+  >
+  \context Staff = SD { d1 d1 d1}
+  \context Lyrics = LD \lyrics <
+   { bla1 die bla }
+   { foo bar foo }
+   { foo bar foo }
+   { foo bar foo }
+  >
+ >
+ \paper {
+  \translator {
+   \StaffContext
+   BarLine \override #'transparent = ##t
+  }
+ }
+}
diff --git a/input/test/trills.ly b/input/test/trills.ly
new file mode 100644
index 0000000000..ab7cc17555
--- /dev/null
+++ b/input/test/trills.ly
@@ -0,0 +1,42 @@
+\header {
+  texidoc="Document trills, pralls and turns"
+  title="Marques des agr\'ements et leur signification"
+  copyright="(1689)"
+}
+
+\score {
+  <
+    \property Score.TimeSignature = \turnOff
+    \context GrandStaff <
+      \context Staff=upper \notes\relative c'' {
+	\time 1/4
+	c4-\prallprall
+	\time 3/8
+	c4.^"TODO"
+	c4.-\downprall
+	c4.-\upprall
+	\time 5/8
+	c4-\turn c4.-\upprall
+      }
+      \context Lyrics=one \lyrics {
+	"Tremblement"4
+	"Tremblement"4.
+	"Cadence"
+	"autre"
+	"Double"4 "cadence"4.
+      }
+      \context Lyrics=two \lyrics {
+	"simple"4
+	"appuy\'e"4.
+      }
+      \context Staff=lower \notes\relative c'' {
+        % autobeamer has som problems here
+	[\repeat unfold 4 { d32 c }]
+	d8~[\repeat unfold 4 { d32 c }]
+	d32 c b c \repeat unfold 4 { d32 c }
+	b32 c d c \repeat unfold 4 { d32 c }
+	[c32( b a16 b )c] [b32 c d c \repeat unfold 4 { d32 c }]
+      }
+    >
+  >
+}
\ No newline at end of file
diff --git a/lily/auto-beam-engraver.cc b/lily/auto-beam-engraver.cc
index b3353789cd..b4191f36bc 100644
--- a/lily/auto-beam-engraver.cc
+++ b/lily/auto-beam-engraver.cc
@@ -119,11 +119,11 @@ Auto_beam_engraver::test_moment (Direction dir, Moment test_mom)
 
   Moment one_beat = *unsmob_moment (get_property ("beatLength"));
   int num = *unsmob_moment (get_property ("measureLength")) / one_beat;
-  int den = one_beat.den_i ();
+  int den = one_beat.den ();
   SCM time = gh_list (gh_int2scm (num), gh_int2scm (den), SCM_UNDEFINED);
 
-  SCM type = gh_list (gh_int2scm (test_mom.num_i ()),
-		      gh_int2scm (test_mom.den_i ()), SCM_UNDEFINED);
+  SCM type = gh_list (gh_int2scm (test_mom.num ()),
+		      gh_int2scm (test_mom.den ()), SCM_UNDEFINED);
 
   SCM settings = get_property ("autoBeamSettings");
   
@@ -176,7 +176,7 @@ Auto_beam_engraver::test_moment (Direction dir, Moment test_mom)
 	  Moment length = * unsmob_moment (get_property ("measureLength"));
 	  pos = length - pos;
 	}
-      r = pos.mod_rat (moment);
+      r = pos.main_part_.mod_rat (moment.main_part_);
     }
   else
     {
@@ -440,7 +440,7 @@ Auto_beam_engraver::acknowledge_grob (Grob_info info)
 			     durlog - 2);
       stem_l_arr_p_->push (stem_l);
       last_add_mom_ = now;
-      extend_mom_ = extend_mom_ >? now + rhythmic_req->length_mom ();
+      extend_mom_ = (extend_mom_ >? now) + rhythmic_req->length_mom ();
     }
 }
 
diff --git a/lily/auto-change-iterator.cc b/lily/auto-change-iterator.cc
index d39c10d5d5..2f29c4be38 100644
--- a/lily/auto-change-iterator.cc
+++ b/lily/auto-change-iterator.cc
@@ -123,7 +123,7 @@ Auto_change_iterator::process (Moment m)
 	{
 	  where_dir_ = s;
 	  String to_id = (s >= 0) ?  "up" : "down";
-	  String wh = ly_scm2string (music_l_->get_mus_property ("what"));
+	  String wh = ly_scm2string (music_l ()->get_mus_property ("what"));
 	  change_to (child_iter_p_, wh, to_id);	  
 	}
     }
diff --git a/lily/bar-engraver.cc b/lily/bar-engraver.cc
index 23e22f0e16..0108cf961a 100644
--- a/lily/bar-engraver.cc
+++ b/lily/bar-engraver.cc
@@ -65,8 +65,8 @@ Bar_engraver::finalize ()
 }
 
 /*
-  Bar_engraver should come *after* any engravers that expect bars to
-  modify whichBar in  deprecated_process_music () be typeset
+  Bar_engraver should come *after* any engravers that  
+  modify whichBar
 */
 void
 Bar_engraver::create_grobs ()
diff --git a/lily/beam-engraver.cc b/lily/beam-engraver.cc
index b5ebc0156f..e6f08096d6 100644
--- a/lily/beam-engraver.cc
+++ b/lily/beam-engraver.cc
@@ -220,14 +220,12 @@ Beam_engraver::finalize ()
   if (beam_p_)
     {
       prev_start_req_->origin ()->warning (_ ("unterminated beam"));
-#if 0
-      finished_beam_p_ = beam_p_;
-      finished_beam_info_p_ = beam_info_p_;
-      typeset_beam ();
-#else
+
+      /*
+	we don't typeset it, (we used to, but it was commented
+	out. Reason unknown) */
       beam_p_->suicide ();
       delete beam_info_p_;
-#endif
     }
 }
 
diff --git a/lily/beam.cc b/lily/beam.cc
index 77186ed8e2..2f314fa422 100644
--- a/lily/beam.cc
+++ b/lily/beam.cc
@@ -670,6 +670,9 @@ Beam::set_stem_lengths (Grob *me)
 
       Real stem_y = calc_stem_y_f (me, s, y, dy);
 
+      stem_y += Stem::get_direction (s)
+	* gh_scm2double (me->get_grob_property ("thickness")) / 2;
+
       /* caution: stem measures in staff-positions */
       Real id = me->relative_coordinate (common, Y_AXIS)
 	- stems[i]->relative_coordinate (common, Y_AXIS);
@@ -762,7 +765,6 @@ Beam::stem_beams (Grob*me,Item *here, Item *next, Item *prev,
  (prev && ! (prev->relative_coordinate (0, X_AXIS) < here->relative_coordinate (0, X_AXIS))))
       programming_error ("Beams are not left-to-right");
 
-  Real staffline_f = me->paper_l ()->get_var ("stafflinethickness");
   int multiplicity = get_multiplicity (me);
 
   SCM space_proc = me->get_grob_property ("space-function");
@@ -772,8 +774,7 @@ Beam::stem_beams (Grob*me,Item *here, Item *next, Item *prev,
   Real interbeam_f = gh_scm2double (space) ;
     
   Real bdy = interbeam_f;
-  Real stemdx = staffline_f;
-
+  
 #if 0
     // ugh -> use commonx
   Real dx = visible_stem_count (me) ?
@@ -811,12 +812,20 @@ Beam::stem_beams (Grob*me,Item *here, Item *next, Item *prev,
        Half beam should be one note-width, 
        but let's make sure two half-beams never touch
        */
-      Real w = here->relative_coordinate (0, X_AXIS) - prev->relative_coordinate (0, X_AXIS);
+
+      // FIXME: TODO (check) stem width / sloped beams
+      Real w = here->relative_coordinate (0, X_AXIS)
+	- prev->relative_coordinate (0, X_AXIS);
+      Real stem_w = gh_scm2double (prev->get_grob_property ("thickness"))
+	// URG
+	* me->paper_l ()->get_var ("stafflinethickness");
+
       w = w/2 <? nw_f;
       Molecule a;
       if (lhalfs)		// generates warnings if not
-	a =  Lookup::beam (dydx, w, thick);
+	a =  Lookup::beam (dydx, w + stem_w, thick);
       a.translate (Offset (-w, -w * dydx));
+      //a.translate_axis (stem_w/2, X_AXIS);
       for (int j = 0; j  < lhalfs; j++)
 	{
 	  Molecule b (a);
@@ -827,15 +836,23 @@ Beam::stem_beams (Grob*me,Item *here, Item *next, Item *prev,
 
   if (next)
     {
-      int rhalfs  = Stem::beam_count (here,RIGHT) - Stem::beam_count (next,LEFT);
-      int rwholebeams= Stem::beam_count (here,RIGHT) <? Stem::beam_count (next,LEFT) ;
+      int rhalfs  = Stem::beam_count (here,RIGHT)
+	- Stem::beam_count (next,LEFT);
+      int rwholebeams= Stem::beam_count (here,RIGHT)
+	<? Stem::beam_count (next,LEFT) ;
 
-      Real w = next->relative_coordinate (0, X_AXIS) - here->relative_coordinate (0, X_AXIS);
-      Molecule a = Lookup::beam (dydx, w + stemdx, thick);
-      a.translate_axis (- stemdx/2, X_AXIS);
+      Real w = next->relative_coordinate (0, X_AXIS)
+	- here->relative_coordinate (0, X_AXIS);
+
+      Real stem_w = gh_scm2double (next->get_grob_property ("thickness"))
+	// URG
+	* me->paper_l ()->get_var ("stafflinethickness");
+
+      Molecule a = Lookup::beam (dydx, w + stem_w, thick);
+      a.translate_axis (- stem_w/2, X_AXIS);
       int j = 0;
       Real gap_f = 0;
-
+      
       SCM gap = me->get_grob_property ("gap");
       if (gh_number_p (gap))
 	{
@@ -853,7 +870,7 @@ Beam::stem_beams (Grob*me,Item *here, Item *next, Item *prev,
 	  else
 	    gap_f = nw_f / 2;
 	  w -= 2 * gap_f;
-	  a = Lookup::beam (dydx, w + stemdx, thick);
+	  a = Lookup::beam (dydx, w + stem_w, thick);
 	}
 
       for (; j  < rwholebeams; j++)
diff --git a/lily/beaming-info.cc b/lily/beaming-info.cc
index fb828388de..97071ee65e 100644
--- a/lily/beaming-info.cc
+++ b/lily/beaming-info.cc
@@ -33,10 +33,10 @@ Beaming_info_list::min_denominator_index () const
 
   for (int i=1; i < infos_.size (); i++)
     {
-      if (infos_[i].start_mom_.den_i () < minden)
+      if (infos_[i].start_mom_.den () < minden)
 	{
 	  minidx = i;
-	  minden = infos_[i].start_mom_.den_i ();
+	  minden = infos_[i].start_mom_.den ();
 	}
     }
 
diff --git a/lily/change-iterator.cc b/lily/change-iterator.cc
index 96e7affd07..727cb9b681 100644
--- a/lily/change-iterator.cc
+++ b/lily/change-iterator.cc
@@ -15,8 +15,8 @@
 void
 Change_iterator::error (String reason)
 {
-  String to_type = ly_scm2string (music_l_->get_mus_property ("change-to-type"));
-  String to_id =  ly_scm2string (music_l_->get_mus_property ("change-to-id"));
+  String to_type = ly_scm2string (music_l ()->get_mus_property ("change-to-type"));
+  String to_id =  ly_scm2string (music_l ()->get_mus_property ("change-to-id"));
 
   String warn1 = _f ("can't change `%s' to `%s'", to_type, to_id) 
     + ": " + reason;
@@ -27,7 +27,7 @@ Change_iterator::error (String reason)
     + report_to_l ()->type_str_ + " = `"
     + report_to_l ()->id_str_ + "': ";
   warning (warn2);
-  music_l_->origin ()->warning (warn1);
+  music_l ()->origin ()->warning (warn1);
 }
 
 /*
@@ -39,8 +39,8 @@ Change_iterator::process (Moment m)
   Translator_group * current = report_to_l ();
   Translator_group * last = 0;
 
-  String to_type = ly_scm2string (music_l_->get_mus_property ("change-to-type"));
-  String to_id =  ly_scm2string (music_l_->get_mus_property ("change-to-id"));
+  String to_type = ly_scm2string (music_l ()->get_mus_property ("change-to-type"));
+  String to_id =  ly_scm2string (music_l ()->get_mus_property ("change-to-id"));
 
 
   /* find the type  of translator that we're changing.
diff --git a/lily/chord-tremolo-iterator.cc b/lily/chord-tremolo-iterator.cc
index 9c2aaf4a77..ea1d410b6b 100644
--- a/lily/chord-tremolo-iterator.cc
+++ b/lily/chord-tremolo-iterator.cc
@@ -19,7 +19,7 @@
 void
 Chord_tremolo_iterator::construct_children ()
 {
-  Repeated_music * rep = dynamic_cast<Repeated_music*> (music_l_);
+  Repeated_music * rep = dynamic_cast<Repeated_music*> (music_l ());
   factor_  = Moment (1, rep->repeat_count ());
   child_iter_p_ = get_iterator_p (rep->body ());
 }
@@ -41,11 +41,11 @@ Chord_tremolo_iterator::process (Moment m)
 {
   if (!m)
     {
-      Music_iterator *yeah = try_music (music_l_);
+      Music_iterator *yeah = try_music (music_l ());
       if (yeah)
 	set_translator (yeah->report_to_l ());
       else
-	music_l_->origin ()->warning (_ ("no one to print a tremolos"));
+	music_l ()->origin ()->warning (_ ("no one to print a tremolos"));
     }
 
   child_iter_p_->process (factor_ * m);
diff --git a/lily/clef-engraver.cc b/lily/clef-engraver.cc
index fb12bd8d9d..d16cb8a20b 100644
--- a/lily/clef-engraver.cc
+++ b/lily/clef-engraver.cc
@@ -167,10 +167,9 @@ Clef_engraver::inspect_clef_properties ()
 
       clef_p_->set_grob_property ("non-default", SCM_BOOL_T);
 
-       prev_cpos_ = clefpos;
-       prev_glyph_ = glyph;
-       prev_octavation_ = octavation;
-
+      prev_cpos_ = clefpos;
+      prev_glyph_ = glyph;
+      prev_octavation_ = octavation;
     }
 
   if (to_boolean (force_clef))
diff --git a/lily/duration.cc b/lily/duration.cc
index 37e75ac8d1..c0a97084bf 100644
--- a/lily/duration.cc
+++ b/lily/duration.cc
@@ -28,14 +28,14 @@ Duration::Duration ()
 {
   durlog_i_ = 0;
   dots_i_ = 0;
-  factor_ = Moment (1,1);
+  factor_ = Rational (1,1);
 }
 
 Duration::Duration (int l, int d)
 {
   durlog_i_ = l;
   dots_i_ = d;
-  factor_ = Moment (1,1);
+  factor_ = Rational (1,1);
 }
 
 Duration
@@ -52,13 +52,13 @@ Duration::length_mom () const
   Rational mom (1 << abs (durlog_i_));
 
   if (durlog_i_> 0)
-    mom = Moment (1)/mom;
+    mom = Rational (1)/mom;
 
   Rational delta = mom;
 
   for (int d = dots_i_; d; d--)
     {
-      delta /= Moment (2);
+      delta /= Rational (2);
       mom += delta;
     }
 
diff --git a/lily/folded-repeat-iterator.cc b/lily/folded-repeat-iterator.cc
index 16454dba80..3012c66429 100644
--- a/lily/folded-repeat-iterator.cc
+++ b/lily/folded-repeat-iterator.cc
@@ -59,7 +59,7 @@ Folded_repeat_iterator::pending_moment () const
 void
 Folded_repeat_iterator::construct_children ()
 {
-  Repeated_music  *  mus = dynamic_cast<Repeated_music*> (music_l_);
+  Repeated_music  *  mus = dynamic_cast<Repeated_music*> (music_l ());
   main_iter_p_ = get_iterator_p (mus->body ());
   if (!main_iter_p_->ok ())
     {
@@ -73,9 +73,9 @@ Folded_repeat_iterator::process (Moment m)
 {
   if (!m)
     {
-      bool success = try_music (music_l_);
+      bool success = try_music (music_l ());
       if (!success)
-	music_l_->origin ()->warning (_ ("no one to print a repeat brace"));
+	music_l ()->origin ()->warning (_ ("no one to print a repeat brace"));
     }
   
   if (main_iter_p_)
@@ -104,7 +104,7 @@ Folded_repeat_iterator::process (Moment m)
 void
 Folded_repeat_iterator::leave_body ()
 {
-  Repeated_music *  mus = dynamic_cast<Repeated_music *> (music_l_);
+  Repeated_music *  mus = dynamic_cast<Repeated_music *> (music_l ());
   delete main_iter_p_;
   main_iter_p_ = 0;
   main_length_mom_ +=  mus->body ()->length_mom ();
@@ -113,7 +113,7 @@ Folded_repeat_iterator::leave_body ()
 void
 Folded_repeat_iterator::enter_alternative ()
 {
-  Repeated_music *  mus = dynamic_cast<Repeated_music *> (music_l_);  
+  Repeated_music *  mus = dynamic_cast<Repeated_music *> (music_l ());  
   if (mus->alternatives ())
     {
       Simultaneous_music_iterator * s = new Simultaneous_music_iterator;
diff --git a/lily/font-size-engraver.cc b/lily/font-size-engraver.cc
new file mode 100644
index 0000000000..56f1555d9d
--- /dev/null
+++ b/lily/font-size-engraver.cc
@@ -0,0 +1,42 @@
+/*   
+  font-size-engraver.cc --  implement 
+  
+  source file of the GNU LilyPond music typesetter
+  
+  (c) 2001 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  
+ */
+
+#include "grob.hh"
+#include "engraver.hh"
+
+class Font_size_engraver : public Engraver
+{
+public:
+  VIRTUAL_COPY_CONS(Translator);
+  Font_size_engraver ();
+protected:
+  virtual void acknowledge_grob (Grob_info gi);
+private:
+};
+
+
+Font_size_engraver::Font_size_engraver ()
+{
+
+}
+
+void
+Font_size_engraver::acknowledge_grob (Grob_info gi)
+{
+  SCM sz = get_property ("fontSize");
+
+  if (gh_number_p (sz)
+      && gh_scm2int (sz)
+      && !gh_number_p (gi.elem_l_->get_grob_property ("font-relative-size")))
+    {
+      gi.elem_l_->set_grob_property ("font-relative-size", sz);
+    }
+}
+
+ADD_THIS_TRANSLATOR(Font_size_engraver);
diff --git a/lily/global-translator.cc b/lily/global-translator.cc
index e7fe6790d7..a1dd7c3501 100644
--- a/lily/global-translator.cc
+++ b/lily/global-translator.cc
@@ -83,6 +83,9 @@ Global_translator::finish ()
 void
 Global_translator::run_iterator_on_me (Music_iterator * iter)
 {
+  if (iter-> ok ())
+    prev_mom_ = now_mom_ = iter->pending_moment ();
+  
   while (iter->ok () || moments_left_i ())
     {
       Moment w;
@@ -90,7 +93,6 @@ Global_translator::run_iterator_on_me (Music_iterator * iter)
       if (iter->ok ())
 	{
 	  w = iter->pending_moment ();
-      
 	}
 
       w = sneaky_insert_extra_moment (w);
diff --git a/lily/grace-iterator.cc b/lily/grace-iterator.cc
index 18a7a62bf6..f73e610bad 100644
--- a/lily/grace-iterator.cc
+++ b/lily/grace-iterator.cc
@@ -47,7 +47,7 @@ Grace_iterator::process (Moment)
 Moment
 Grace_iterator::pending_moment () const
 {
-  return 0;
+  return  0;
 }
 
 
diff --git a/lily/grace-position-performer.cc b/lily/grace-position-performer.cc
index e275e891a7..7652ac98c6 100644
--- a/lily/grace-position-performer.cc
+++ b/lily/grace-position-performer.cc
@@ -60,7 +60,7 @@ Grace_position_performer::create_audio_elements ()
 	  for (int i=1; i < notes_.size (); i++)
 	    shortest_mom = shortest_mom <? notes_[i]->length_mom_;
 	  
-	  Rational grace_fraction_rat (1, 2);
+	  Moment grace_fraction_rat (1, 2);
 	  SCM prop = get_property ("graceFraction");
 	  if (unsmob_moment (prop))
 	    grace_fraction_rat = *unsmob_moment (prop);
@@ -81,7 +81,7 @@ Grace_position_performer::create_audio_elements ()
       for (int i=0; i < graces_.size (); i++)
 	grace_length_mom += graces_[i]->length_mom_;
 
-      Rational grace_factor_rat = delay_mom / grace_length_mom;
+      Moment grace_factor_rat = delay_mom / grace_length_mom;
 
       for (int i=0; i < graces_.size (); i++)
 	{
diff --git a/lily/include/duration.hh b/lily/include/duration.hh
index 685bddb5fc..bdb988a1c3 100644
--- a/lily/include/duration.hh
+++ b/lily/include/duration.hh
@@ -39,7 +39,7 @@ private:
   int durlog_i_;
   int dots_i_;
 
-  Moment factor_;
+  Rational factor_;
 
 };
 
diff --git a/lily/include/grace-music.hh b/lily/include/grace-music.hh
index 47def5db9d..897146133d 100644
--- a/lily/include/grace-music.hh
+++ b/lily/include/grace-music.hh
@@ -23,5 +23,16 @@ protected:
   virtual Moment length_mom () const;
 };
 
+class New_grace_music : public Music_wrapper
+{
+public:
+  VIRTUAL_COPY_CONS (Music);
+  New_grace_music (SCM);
+  New_grace_music ();
+protected:
+  virtual void compress (Moment);
+  virtual Moment length_mom () const;
+};
+
 #endif /* GRACE_MUSIC_HH */
 
diff --git a/lily/include/moment.hh b/lily/include/moment.hh
index 2583bb56ab..fca85bb458 100644
--- a/lily/include/moment.hh
+++ b/lily/include/moment.hh
@@ -15,33 +15,51 @@
 
 /**
    Rationals with glue for Guilification;
-
-   FIXME: remove self_scm_ and then remove this class */
-class Moment : public Rational
+*/
+class Moment
 {
   DECLARE_SIMPLE_SMOBS (Moment,);
 public:
-  Moment () { }
-  Moment (int m) : Rational (m) { }
-  Moment (int m, int n) : Rational (m,n) { }
-  Moment (Rational m) : Rational (m) { }
+  Moment ();
+  Moment (int m);
+  Moment (int m, int n);
+
+  Moment (Rational m);
+
+
+  void operator += (Moment const &m);
+  void operator -= (Moment const &m);  
 
+  void operator *= (Moment const &m);
+  void operator /= (Moment const &m);  
+
+  Rational main_part_;
+  Rational grace_mom_;
+
+  void set_infinite (int k);
+  
+  operator bool ();
+  int den () const;
+  int num () const;
   /*
     Deliver a copy of THIS as a smobified SCM
    */
-  SCM smobbed_copy () const; 
+  SCM smobbed_copy () const;
+  String str () const;
+  static int compare (Moment const&, Moment const&);
 };
+IMPLEMENT_ARITHMETIC_OPERATOR (Moment, + );
+IMPLEMENT_ARITHMETIC_OPERATOR (Moment, - );
+IMPLEMENT_ARITHMETIC_OPERATOR (Moment, / );
+IMPLEMENT_ARITHMETIC_OPERATOR (Moment, * );
 
 
 Moment * unsmob_moment (SCM);
+int compare (Moment const&,Moment const&);
+INSTANTIATE_COMPARE (Moment const&, Moment::compare);
 
 #if 0
-IMPLEMENT_ARITHMETIC_OPERATOR (Moment, / );
-IMPLEMENT_ARITHMETIC_OPERATOR (Moment, * );
-IMPLEMENT_ARITHMETIC_OPERATOR (Moment, + );
-IMPLEMENT_ARITHMETIC_OPERATOR (Moment, - );
 IMPLEMENT_ARITHMETIC_OPERATOR (Moment, % );
-INSTANTIATE_COMPARE (Moment const&, Rational::compare);
 #endif
 
 #endif /* MOMENT_HH */
diff --git a/lily/include/music-iterator.hh b/lily/include/music-iterator.hh
index 4041b5d028..bc99f499d3 100644
--- a/lily/include/music-iterator.hh
+++ b/lily/include/music-iterator.hh
@@ -52,11 +52,12 @@ class Music_iterator
 {
 protected:
   Moment music_length_;
-
+  Moment start_mom_;
 public:
   VIRTUAL_COPY_CONS (Music_iterator);
 
   Moment music_length_mom () const;
+  Moment music_start_mom () const;
   Music_iterator ();
   Music_iterator (Music_iterator const&);
   virtual ~Music_iterator ();
@@ -93,9 +94,6 @@ public:
   virtual void construct_children ();
   static SCM constructor_cxx_function;
   
-protected:
-  Music  * music_l_;
-
   /**
     Get an iterator for MUS, inheriting the translation unit from THIS.
    */
@@ -103,8 +101,10 @@ protected:
 
   virtual Music_iterator* try_music_in_children (Music *) const;
 
+  Music * music_l () const;
 private:
   Interpretation_context_handle handle_;
+  Music  * music_l_;
 };
 
 
diff --git a/lily/include/music-list.hh b/lily/include/music-list.hh
index b953c6a35c..a874660322 100644
--- a/lily/include/music-list.hh
+++ b/lily/include/music-list.hh
@@ -23,7 +23,7 @@ public:
   Simultaneous_music (SCM);
   virtual Pitch to_relative_octave (Pitch);
   virtual Moment length_mom () const;
-
+  virtual Moment start_mom () const;
   Simultaneous_music ();
 };
 
@@ -36,6 +36,7 @@ class Request_chord : public Simultaneous_music
 public:
   VIRTUAL_COPY_CONS (Music);
   virtual Pitch to_relative_octave (Pitch);
+  virtual Moment start_mom () const;
   Request_chord (SCM list);
 
   Request_chord ();
@@ -50,7 +51,8 @@ public:
   VIRTUAL_COPY_CONS (Music);
   Sequential_music (SCM);
   virtual Moment length_mom () const;
-
+  virtual Moment start_mom () const;
+  
   Sequential_music ();
 };
 
diff --git a/lily/include/music-sequence.hh b/lily/include/music-sequence.hh
index 797563830d..b22d029582 100644
--- a/lily/include/music-sequence.hh
+++ b/lily/include/music-sequence.hh
@@ -31,6 +31,9 @@ public:
   int length_i () const;
   Moment cumulative_length () const;
   Moment maximum_length () const;
+
+  Moment first_start () const;
+  Moment minimum_start () const;
   
 protected:
   virtual Pitch to_relative_octave (Pitch);
diff --git a/lily/include/music-wrapper.hh b/lily/include/music-wrapper.hh
index ec95046649..ed2cfe46c5 100644
--- a/lily/include/music-wrapper.hh
+++ b/lily/include/music-wrapper.hh
@@ -30,6 +30,7 @@ public:
   
   VIRTUAL_COPY_CONS (Music);
   virtual Moment length_mom () const;
+  virtual Moment start_mom () const;
   virtual Pitch to_relative_octave (Pitch);
   virtual void compress (Moment);
 };
diff --git a/lily/include/music.hh b/lily/include/music.hh
index 2c67ebdd90..2ce12fed36 100644
--- a/lily/include/music.hh
+++ b/lily/include/music.hh
@@ -50,7 +50,7 @@ public:
 
   /// The duration of this piece of music
   virtual Moment length_mom () const;
-
+  virtual Moment start_mom () const;
   void print () const;
   /// Transpose, with the interval central C to #p#
   virtual void transpose (Pitch p);
diff --git a/lily/include/new-grace-iterator.hh b/lily/include/new-grace-iterator.hh
new file mode 100644
index 0000000000..cb621e874e
--- /dev/null
+++ b/lily/include/new-grace-iterator.hh
@@ -0,0 +1,30 @@
+/*   
+  new-grace-iterator.hh -- declare New-Grace_iterator
+  
+  source file of the GNU LilyPond music typesetter
+  
+  (c) 1999--2001 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  
+ */
+
+#ifndef NEWGRACE_ITERATOR_HH
+#define NEWGRACE_ITERATOR_HH
+
+#include "music-wrapper-iterator.hh"
+
+class New_grace_iterator : public Music_wrapper_iterator
+{
+public:
+  VIRTUAL_COPY_CONS (Music_iterator);
+  ~New_grace_iterator ();
+  virtual void construct_children () ;
+  virtual void process (Moment);
+  static SCM constructor_cxx_function;
+  Moment pending_moment () const;
+};
+
+
+
+#endif /* GRACE_ITERATOR_HH */
+
+
diff --git a/lily/include/new-grace-music.hh b/lily/include/new-grace-music.hh
new file mode 100644
index 0000000000..aae5ce001d
--- /dev/null
+++ b/lily/include/new-grace-music.hh
@@ -0,0 +1,28 @@
+/*   
+  grace-music.hh -- declare Grace_music
+  
+  source file of the GNU LilyPond music typesetter
+  
+  (c) 1999--2001 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  
+ */
+
+#ifndef NGRACE_MUSIC_HH
+#define NGRACE_MUSIC_HH
+
+#include "music-wrapper.hh"
+
+class New_grace_music : public Music_wrapper
+{
+public:
+  VIRTUAL_COPY_CONS (Music);
+  New_grace_music (SCM);
+  New_grace_music ();
+protected:
+  virtual void compress (Moment);
+  virtual Moment length_mom () const;
+  virtual Moment start_mom () const;
+};
+
+#endif /* GRACE_MUSIC_HH */
+
diff --git a/lily/include/score-engraver.hh b/lily/include/score-engraver.hh
index bbb53792b6..815f04c05e 100644
--- a/lily/include/score-engraver.hh
+++ b/lily/include/score-engraver.hh
@@ -26,7 +26,7 @@ class Score_engraver :
     
   Paper_column* command_column_l_;
   Paper_column* musical_column_l_;
-  void make_columns (Moment);
+  void make_columns ();
   void set_columns (Paper_column*,Paper_column*);
   void typeset_all ();
     
diff --git a/lily/include/sequential-music-iterator.hh b/lily/include/sequential-music-iterator.hh
index 963faf2d07..6f13f44141 100644
--- a/lily/include/sequential-music-iterator.hh
+++ b/lily/include/sequential-music-iterator.hh
@@ -11,6 +11,15 @@
 
 #include "music-iterator.hh"
 
+
+struct Grace_skip 
+{
+  Moment start_;
+  Rational length_;
+  Rational grace_length_;  
+  Grace_skip *next_;
+};
+
 /** Sequential_music iteration: walk each element in turn, and
   construct an iterator for every element.
   
@@ -18,6 +27,8 @@
 class Sequential_music_iterator :  public Music_iterator
 {
 public:
+  Grace_skip * grace_skips_;
+  
   VIRTUAL_COPY_CONS (Music_iterator);
   static SCM constructor_cxx_function;
   Sequential_music_iterator ();
diff --git a/lily/include/spaceable-element.hh b/lily/include/spaceable-element.hh
index 2c40d2e8f5..272365ecd4 100644
--- a/lily/include/spaceable-element.hh
+++ b/lily/include/spaceable-element.hh
@@ -1,28 +1,3 @@
-/*   
-  spaceable-grob.hh -- declare Spaceable_grob
-  
-  source file of the GNU LilyPond music typesetter
-  
-  (c) 2000--2001 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-  
- */
 
-#ifndef SPACEABLE_GROB_HH
-#define SPACEABLE_GROB_HH
-
-#include "lily-guile.hh"
-#include "lily-proto.hh"
-
-struct Spaceable_grob
-{
-  /// set a minimum distance
-  static void add_rod (Grob*me, Grob * to, Real distance);
-  static void add_spring (Grob*me,Grob * to, Real dist, Real strength);
-  static void set_interface (Grob*);
-  static void remove_interface (Grob*);
-  static SCM get_minimum_distances (Grob*);
-  static SCM get_ideal_distances (Grob*);
-};
-
-#endif /* SPACEABLE_GROB_HH */
+#error
 
diff --git a/lily/include/spaceable-grob.hh b/lily/include/spaceable-grob.hh
new file mode 100644
index 0000000000..2c40d2e8f5
--- /dev/null
+++ b/lily/include/spaceable-grob.hh
@@ -0,0 +1,28 @@
+/*   
+  spaceable-grob.hh -- declare Spaceable_grob
+  
+  source file of the GNU LilyPond music typesetter
+  
+  (c) 2000--2001 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  
+ */
+
+#ifndef SPACEABLE_GROB_HH
+#define SPACEABLE_GROB_HH
+
+#include "lily-guile.hh"
+#include "lily-proto.hh"
+
+struct Spaceable_grob
+{
+  /// set a minimum distance
+  static void add_rod (Grob*me, Grob * to, Real distance);
+  static void add_spring (Grob*me,Grob * to, Real dist, Real strength);
+  static void set_interface (Grob*);
+  static void remove_interface (Grob*);
+  static SCM get_minimum_distances (Grob*);
+  static SCM get_ideal_distances (Grob*);
+};
+
+#endif /* SPACEABLE_GROB_HH */
+
diff --git a/lily/include/timing-translator.hh b/lily/include/timing-translator.hh
index 122f8d0d80..8a170e3019 100644
--- a/lily/include/timing-translator.hh
+++ b/lily/include/timing-translator.hh
@@ -31,7 +31,6 @@ protected:
 
 public:
   Moment measure_position () const;
-  Moment measure_length () const;  
-
+  Rational measure_length () const;  
 };
 #endif // TIMING_TRANSLATOR_HH
diff --git a/lily/lyric-combine-music-iterator.cc b/lily/lyric-combine-music-iterator.cc
index 3d9eecc7e0..6052b89ffd 100644
--- a/lily/lyric-combine-music-iterator.cc
+++ b/lily/lyric-combine-music-iterator.cc
@@ -53,7 +53,7 @@ Lyric_combine_music_iterator::ok () const
 void
 Lyric_combine_music_iterator::construct_children ()
 {
-  Lyric_combine_music const * m = dynamic_cast<Lyric_combine_music const*> (music_l_);
+  Lyric_combine_music const * m = dynamic_cast<Lyric_combine_music const*> (music_l ());
   
   music_iter_p_ = get_iterator_p (m->music_l ());
   lyric_iter_p_ = get_iterator_p (m->lyrics_l ());
diff --git a/lily/main.cc b/lily/main.cc
index b4c7811733..1f355bf961 100644
--- a/lily/main.cc
+++ b/lily/main.cc
@@ -101,6 +101,7 @@ static Getopt_long *oparser_p_static = 0;
        follow regular localisation guidelines).
  */
 static Long_option_init options_static[] = {
+  /* print example usage:  lilypond -e "(set-lily-option 'help 0)" ? */
   {_i ("EXPR"), "evaluate", 'e',_i ("evalute EXPR as Scheme after .scm init is read")},
   /* another bug in option parser: --output=foe is taken as an abbreviation
      for --output-format */
@@ -168,7 +169,7 @@ _ (
 
   cout << endl;
 
-  cout << _f ("Report bugs to %s", "bug-gnu-music@gnu.org") << endl;
+  cout << _f ("Report bugs to %s", "bug-lilypond@gnu.org") << endl;
 }
 
 void
diff --git a/lily/midi-item.cc b/lily/midi-item.cc
index 80d3e6e6bc..bf046d4644 100644
--- a/lily/midi-item.cc
+++ b/lily/midi-item.cc
@@ -201,12 +201,12 @@ Midi_time_signature::Midi_time_signature (Audio_time_signature* a)
 String
 Midi_time_signature::str () const
 {
-  int num_i = audio_l_->beats_i_;
-  int den_i = audio_l_->one_beat_i_;
+  int num = audio_l_->beats_i_;
+  int den = audio_l_->one_beat_i_;
 
   String str = "ff5804";
-  str += String_convert::i2hex_str (num_i, 2, '0');
-  str += String_convert::i2hex_str (intlog2 (den_i) , 2, '0');
+  str += String_convert::i2hex_str (num, 2, '0');
+  str += String_convert::i2hex_str (intlog2 (den) , 2, '0');
   str += String_convert::i2hex_str (clocks_per_1_i_, 2, '0');
   str += String_convert::i2hex_str (8, 2, '0');
   return String_convert::hex2bin_str (str);
diff --git a/lily/molecule.cc b/lily/molecule.cc
index b414b498ae..e577691f8f 100644
--- a/lily/molecule.cc
+++ b/lily/molecule.cc
@@ -15,7 +15,7 @@
 #include "string.hh"
 #include "molecule.hh"
 #include "debug.hh"
-#include "killing-cons.tcc"
+
 
 #include "ly-smobs.icc"
 
diff --git a/lily/moment.cc b/lily/moment.cc
index a1c9e071ec..8653e38514 100644
--- a/lily/moment.cc
+++ b/lily/moment.cc
@@ -83,3 +83,109 @@ Moment::equal_p (SCM a, SCM b)
   return (*m1 == *m2) ? SCM_BOOL_T : SCM_BOOL_F;
 }
 
+/****************************************************************/
+
+int
+compare (Moment const &a, Moment const &b)
+{
+  return Moment::compare (a,b);
+}
+
+int
+Moment::compare (Moment const &a, Moment const &b)
+{
+  int c = Rational::compare (a.main_part_,b.main_part_);
+  if (c)
+    return c;
+
+  return Rational::compare (a.grace_mom_, b.grace_mom_);
+}
+
+Moment::Moment ()
+{
+
+}
+
+Moment::Moment (int m)
+{
+  main_part_ = Rational(m);
+  grace_mom_  = Rational( 0);
+}
+
+Moment::Moment (int m, int n)
+{
+  main_part_ = Rational (m,n);
+  grace_mom_  = Rational (0);
+}
+
+Moment::Moment (Rational m)
+{
+  main_part_ = m;
+  grace_mom_  = Rational (0);
+}
+
+void
+Moment::operator += (Moment const &src)
+{
+  main_part_ +=src.main_part_ ;
+  grace_mom_ += src.grace_mom_;
+}
+void
+Moment::operator -= (Moment const &src)
+{
+  main_part_ -= src.main_part_ ;
+  grace_mom_ -= src.grace_mom_;
+}
+
+/*
+  only take the main part of SRC for multiplication.
+ */
+void
+Moment::operator *= (Moment const &src)
+{
+  main_part_ *= src.main_part_ ;
+  grace_mom_ *= src.main_part_;
+}
+
+/*
+  only take the main part of SRC for multiplication.
+ */
+void
+Moment::operator /= (Moment const &src)
+{
+  main_part_ /= src.main_part_ ;
+  grace_mom_ /= src.main_part_;
+}
+
+
+#if 0
+Moment::operator Rational()
+{
+  return main_part_;
+}
+#endif
+
+int
+Moment::den () const { return main_part_.den (); }
+
+int
+Moment::num () const { return main_part_.num (); }
+
+
+Moment::operator bool ()
+{
+  return main_part_ || grace_mom_;
+}
+
+void
+Moment::set_infinite (int k)
+{
+  main_part_.set_infinite (k);
+}
+
+
+String
+Moment::str () const
+{
+  return main_part_.str ();
+}
diff --git a/lily/music-iterator.cc b/lily/music-iterator.cc
index 7d5a5155be..f27f2f0d77 100644
--- a/lily/music-iterator.cc
+++ b/lily/music-iterator.cc
@@ -26,6 +26,7 @@ Music_iterator::Music_iterator (Music_iterator const& src)
   handle_ = *src.handle_.clone ();
   music_l_ = src.music_l_;
   music_length_ = src.music_length_;
+  start_mom_ = src.start_mom_;
 }
 
 Music_iterator::~Music_iterator ()
@@ -59,7 +60,6 @@ Music_iterator::pending_moment () const
   return 0;
 }
 
-
 void
 Music_iterator::process (Moment)
 {
@@ -102,8 +102,9 @@ Music_iterator::static_get_iterator_p (Music *m)
     }
 
   p->music_l_ = m;
+  assert (m);
   p->music_length_ = m->length_mom ();
-  
+  p->start_mom_ = m->start_mom ();
   return p;
 }
 
@@ -112,12 +113,20 @@ Moment
 Music_iterator::music_length_mom () const
 {
   return music_length_;
+
+}
+
+Moment
+Music_iterator::music_start_mom ()const
+{
+  return start_mom_;
 }
 
 void
 Music_iterator::init_translator (Music *m, Translator_group *report_l)
 {
   music_l_ = m;
+  assert (m);
   if (Context_specced_music * csm =dynamic_cast<Context_specced_music *> (m))
     {
       SCM ct = csm->get_mus_property ("context-type");
@@ -169,3 +178,9 @@ Music_iterator::try_music_in_children (Music *) const
 }
 
 IMPLEMENT_CTOR_CALLBACK (Music_iterator);
+
+Music *
+Music_iterator::music_l () const
+{
+  return music_l_;
+}
diff --git a/lily/music-list.cc b/lily/music-list.cc
index e3e188e9e2..8b13789179 100644
--- a/lily/music-list.cc
+++ b/lily/music-list.cc
@@ -1,104 +1 @@
-/*
-  music-list.cc -- implement Music_sequence, Simultaneous_music, Sequential_music
 
-  source file of the GNU LilyPond music typesetter
-
-  (c)  1997--2001 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-*/
-
-#include "music-list.hh"
-#include "music-wrapper.hh"
-#include "pitch.hh"
-#include "request.hh"
-#include "musical-request.hh"
-#include "music-iterator.hh"
-#include "main.hh"
-#include "killing-cons.tcc"
-#include "simultaneous-music-iterator.hh"
-#include "sequential-music-iterator.hh"
-#include "request-chord-iterator.hh"
-
-Moment
-Simultaneous_music::length_mom () const
-{
-  return maximum_length ();
-}
-
-Simultaneous_music::Simultaneous_music (SCM head)
-  : Music_sequence (head)
-{
-  set_mus_property ("iterator-ctor",
-		    Simultaneous_music_iterator::constructor_cxx_function);
-}
-
-Simultaneous_music::Simultaneous_music ()
-  : Music_sequence ()
-{
-  set_mus_property ("iterator-ctor",
-		    Simultaneous_music_iterator::constructor_cxx_function);
-  
-}
-
-Sequential_music::Sequential_music (SCM head)
-  : Music_sequence (head)
-{
-  set_mus_property ("iterator-ctor",
-		    Sequential_music_iterator::constructor_cxx_function);
-}
-Sequential_music::Sequential_music ()
-  : Music_sequence ()
-{
-  set_mus_property ("iterator-ctor",
-		    Sequential_music_iterator::constructor_cxx_function);
-}
-
-
-Moment
-Sequential_music::length_mom () const
-{
-  return cumulative_length ();
-}
-
-Pitch
-Simultaneous_music::to_relative_octave (Pitch p)
-{
-  return do_relative_octave (p, true);
-}
-
-Request_chord::Request_chord (SCM s)
-  : Simultaneous_music (s)
-{
-  set_mus_property ("iterator-ctor",
-		    Request_chord_iterator::constructor_cxx_function);
-}
-
-Request_chord::Request_chord ()
-{
-  set_mus_property ("iterator-ctor",
-		    Request_chord_iterator::constructor_cxx_function);
-}
-
-Pitch
-Request_chord::to_relative_octave (Pitch last)
-{
-  for (SCM s = music_list (); gh_pair_p (s);  s = gh_cdr (s))
-    {
-      Music * mus = unsmob_music (gh_car (s));
-      if (Melodic_req *m= dynamic_cast <Melodic_req *> (mus))
-	{
-	  Pitch pit = *unsmob_pitch (m->get_mus_property ("pitch"));
-	  
-	  pit.to_relative_octave (last);
-	  m->set_mus_property ("pitch", pit.smobbed_copy ());
-	  	  
-	  return pit;
-	}
-    }
-  return last;
-}
-
-
-
-ADD_MUSIC (Simultaneous_music);
-ADD_MUSIC (Sequential_music);
-ADD_MUSIC (Request_chord);
diff --git a/lily/music-output-def.cc b/lily/music-output-def.cc
index eb58cec14c..d3b6d7c7f6 100644
--- a/lily/music-output-def.cc
+++ b/lily/music-output-def.cc
@@ -86,7 +86,11 @@ Music_output_def::assign_translator (SCM transdef)
   Translator_def *tp = unsmob_translator_def (transdef);
   assert (tp);
 
-  String s = ly_scm2string (tp->type_name_);
+  
+  String s;
+  if (gh_string_p (tp->type_name_))
+      s =  ly_scm2string (tp->type_name_);
+
   translator_p_dict_p_->set (s, transdef);
 }
 
@@ -124,7 +128,10 @@ Music_output_def::get_global_translator_p ()
 int
 Music_output_def::print_smob (SCM s, SCM p, scm_print_state *)
 {
-  scm_puts ("#<Music_output_def>", p);
+  Translator_def * def = unsmob_translator_def (s);
+  scm_puts ("#<Music_output_def ", p);
+  scm_write (def->type_name_, p);
+  scm_puts (">", p);
   return 1;
 }
 
diff --git a/lily/music-sequence.cc b/lily/music-sequence.cc
index 5be315fcd1..35c8bb16b3 100644
--- a/lily/music-sequence.cc
+++ b/lily/music-sequence.cc
@@ -69,10 +69,24 @@ Music_sequence::transpose (Pitch rq)
 Moment
 Music_sequence::cumulative_length () const
 {
-  Moment last=0;
+  Moment cumulative;
+  
+  Moment last_len ; 
   for (SCM s = music_list (); gh_pair_p (s);  s = gh_cdr (s))
-    last += unsmob_music (gh_car (s))->length_mom ();
-  return  last;
+    {
+      Moment l = unsmob_music (gh_car (s))->length_mom ();
+      if (last_len.grace_mom_ && l.main_part_)
+	{
+	  last_len.grace_mom_ = Rational (0);
+	}
+      cumulative += last_len;
+      last_len = l;
+    }
+
+  last_len.grace_mom_ = Rational (0);
+  cumulative += last_len;
+  
+  return  cumulative;
 }
 
 Pitch
@@ -131,3 +145,37 @@ Music_sequence::Music_sequence ()
 {
   
 }
+
+Moment
+Music_sequence::minimum_start () const
+{
+  Moment m;
+  
+  for (SCM s = music_list (); gh_pair_p (s);  s = gh_cdr (s))
+    {
+      m = m <? unsmob_music (gh_car (s))->start_mom ();
+    }
+  return m;
+}
+
+Moment
+Music_sequence::first_start () const
+{
+  Moment m;
+  
+  for (SCM s = music_list (); gh_pair_p (s);  s = gh_cdr (s))
+    {
+      Music * mus = unsmob_music (gh_car (s));
+      Moment l = mus->length_mom ();
+
+      if (l.main_part_)
+	return mus->start_mom ();
+      else if (l.grace_mom_)
+	{
+	  m.grace_mom_ = - l.grace_mom_; 
+	  return m;
+	}
+    }
+  return m;
+}
+
diff --git a/lily/music-wrapper-iterator.cc b/lily/music-wrapper-iterator.cc
index a80577f387..c5f72417c9 100644
--- a/lily/music-wrapper-iterator.cc
+++ b/lily/music-wrapper-iterator.cc
@@ -34,7 +34,7 @@ void
 Music_wrapper_iterator::construct_children ()
 {
   child_iter_p_ =
-    get_iterator_p (dynamic_cast<Music_wrapper const*> (music_l_)->element ());
+    get_iterator_p (dynamic_cast<Music_wrapper const*> (music_l ())->element ());
 }
 
 bool
diff --git a/lily/music-wrapper.cc b/lily/music-wrapper.cc
index 3fc8d714c3..2541483ddd 100644
--- a/lily/music-wrapper.cc
+++ b/lily/music-wrapper.cc
@@ -58,3 +58,9 @@ Music_wrapper::Music_wrapper ()
 {
   
 }
+
+Moment
+Music_wrapper::start_mom () const
+{
+  return element ()->start_mom ();
+}
diff --git a/lily/music.cc b/lily/music.cc
index 917e14021b..1da9e5329f 100644
--- a/lily/music.cc
+++ b/lily/music.cc
@@ -89,6 +89,13 @@ Music::length_mom () const
   return 0;
 }
 
+Moment
+Music::start_mom () const
+{
+  Moment m ;
+  return m;
+}
+
 void
 print_alist (SCM a, SCM port)
 {
diff --git a/lily/musical-request.cc b/lily/musical-request.cc
index e4866b6064..21c6c5d090 100644
--- a/lily/musical-request.cc
+++ b/lily/musical-request.cc
@@ -61,7 +61,7 @@ Rhythmic_req::compress (Moment m)
 {
   Duration *d =  unsmob_duration (get_mus_property ("duration"));
 
-  set_mus_property ("duration", d ->compressed (m).smobbed_copy ());
+  set_mus_property ("duration", d ->compressed (m.main_part_).smobbed_copy ());
 }
 
 bool
diff --git a/lily/my-lily-lexer.cc b/lily/my-lily-lexer.cc
index 3a41467abc..c27bf01d0d 100644
--- a/lily/my-lily-lexer.cc
+++ b/lily/my-lily-lexer.cc
@@ -52,6 +52,7 @@ static Keyword_ent the_key_tab[]={
   {"elementdescriptions", ELEMENTDESCRIPTIONS},
   {"font", FONT},
   {"grace", GRACE},
+  {"ngrace", NGRACE},
   {"glissando", GLISSANDO},
   {"header", HEADER},
   {"in", IN_T},
diff --git a/lily/new-grace-iterator.cc b/lily/new-grace-iterator.cc
new file mode 100644
index 0000000000..99cd02e6ac
--- /dev/null
+++ b/lily/new-grace-iterator.cc
@@ -0,0 +1,52 @@
+/*   
+  new-grace-music.cc --  implement New-Grace_music
+  
+  source file of the GNU LilyPond music typesetter
+  
+  (c) 1999--2001 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  
+ */
+
+#include "new-grace-music.hh"
+#include "new-grace-iterator.hh"
+
+#include "grace-iterator.hh"
+#include "global-translator.hh"
+#include "warn.hh"
+
+
+New_grace_iterator::~New_grace_iterator () 
+{
+  //  child_iter_p_ = 0;
+}
+
+
+void
+New_grace_iterator::process (Moment m )
+{
+  Moment main ;
+  main.main_part_ = m.grace_mom_;
+  Music_wrapper_iterator::process (main);
+}
+
+void
+New_grace_iterator::construct_children ()
+{
+  Music_wrapper_iterator::construct_children ();
+}
+
+
+
+Moment
+New_grace_iterator::pending_moment () const
+{
+  Moment cp =Music_wrapper_iterator::pending_moment();
+
+  Moment pending;
+  pending.grace_mom_ = - music_length_.main_part_  + cp.main_part_;
+
+  return pending;
+}
+
+
+IMPLEMENT_CTOR_CALLBACK (New_grace_iterator);
diff --git a/lily/new-grace-music.cc b/lily/new-grace-music.cc
new file mode 100644
index 0000000000..d93708ce0f
--- /dev/null
+++ b/lily/new-grace-music.cc
@@ -0,0 +1,48 @@
+/*   
+  grace-music.cc --  implement New_grace_music
+  
+  source file of the GNU LilyPond music typesetter
+  
+  (c) 1999--2001 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  
+ */
+
+#include "new-grace-music.hh"
+#include "new-grace-iterator.hh"
+
+void
+New_grace_music::compress (Moment m) 
+{
+  Music_wrapper::compress (m); 
+}
+
+Moment
+New_grace_music::length_mom () const
+{
+  Moment l = Music_wrapper::length_mom ();
+  Moment gl;
+  gl.grace_mom_ = l.main_part_ + l.grace_mom_ ;
+  return gl;
+}
+
+
+Moment
+New_grace_music::start_mom () const
+{
+  return Music::start_mom ();
+}
+
+New_grace_music::New_grace_music ()
+{
+  set_mus_property ("iterator-ctor",
+		    New_grace_iterator::constructor_cxx_function);
+}
+
+New_grace_music::New_grace_music (SCM p)
+  : Music_wrapper (p)
+{
+  set_mus_property ("iterator-ctor",
+		    New_grace_iterator::constructor_cxx_function);
+}
+
+ADD_MUSIC (New_grace_music);
diff --git a/lily/output-property-music-iterator.cc b/lily/output-property-music-iterator.cc
index 5759b85b42..47ec4d784f 100644
--- a/lily/output-property-music-iterator.cc
+++ b/lily/output-property-music-iterator.cc
@@ -15,10 +15,10 @@ Output_property_music_iterator::process (Moment m)
 {
   if (last_processed_mom_ < Moment (0))
     {
-      bool accepted = try_music (music_l_);
+      bool accepted = try_music (music_l ());
       if (!accepted)
-	music_l_->origin ()->warning (_f ("Junking request: `%s'",
-					  classname (music_l_)));
+	music_l ()->origin ()->warning (_f ("Junking request: `%s'",
+					  classname (music_l ())));
     }
 
   skip (m);
diff --git a/lily/paper-column.cc b/lily/paper-column.cc
index 4e76ff5ed8..e9cd3be70e 100644
--- a/lily/paper-column.cc
+++ b/lily/paper-column.cc
@@ -10,7 +10,7 @@
 #include "paper-score.hh"
 #include "debug.hh"
 #include "axis-group-interface.hh"
-#include "spaceable-element.hh"
+#include "spaceable-grob.hh"
 
 void
 Paper_column::do_break_processing ()
diff --git a/lily/parser.yy b/lily/parser.yy
index eacdc63aa8..95caa860e0 100644
--- a/lily/parser.yy
+++ b/lily/parser.yy
@@ -188,7 +188,7 @@ yylex (YYSTYPE *s,  void * v_l)
 %token EXTENDER
 %token FONT
 %token GLISSANDO
-%token GRACE
+%token GRACE NGRACE
 %token HEADER
 %token HYPHEN
 %token IN_T
@@ -806,9 +806,43 @@ Composite_music:
 		chm->set_spot (*$3->origin ());
 	}
 	| GRACE Music {
-		$$ = new Grace_music (SCM_EOL);
+#if 1
+	/*
+		The other version is for easier debugging  of
+		Sequential_music_iterator in combination with grace notes.
+	*/
+
+		SCM start = THIS->lexer_p_->lookup_identifier ("startGraceMusic");
+		SCM stop = THIS->lexer_p_->lookup_identifier ("stopGraceMusic");
+		Music *startm = unsmob_music (start);
+		Music *stopm = unsmob_music (stop);
+
+		SCM ms = SCM_EOL;
+		if (stopm) {
+			stopm = stopm->clone ();
+			ms = gh_cons (stopm->self_scm (), ms);
+			scm_unprotect_object (stopm->self_scm ());
+		}
+		ms = gh_cons ($2->self_scm (), ms);
+		scm_unprotect_object ($2->self_scm());
+		if (startm) {
+			startm = startm->clone ();
+			ms = gh_cons (startm->self_scm () , ms);
+			scm_unprotect_object (startm->self_scm ());
+		}
+
+		Music* seq = new Sequential_music (SCM_EOL);
+		seq->set_mus_property ("elements", ms);
+
+		$$ = new New_grace_music (SCM_EOL);
+		$$->set_mus_property ("element", seq->self_scm ());
+		scm_unprotect_object (seq->self_scm ());
+#else
+		$$ = new New_grace_music (SCM_EOL);
 		$$->set_mus_property ("element", $2->self_scm ());
 		scm_unprotect_object ($2->self_scm ());
+#endif
+
 
 	}
 	| CONTEXT string '=' string Music {
@@ -1604,7 +1638,7 @@ multiplied_duration:
 		$$ = unsmob_duration ($$)->compressed ( $3) .smobbed_copy ();
 	}
 	| multiplied_duration '*' FRACTION {
-		Moment m (gh_scm2int (gh_car ($3)), gh_scm2int (gh_cdr ($3)));
+		Rational  m (gh_scm2int (gh_car ($3)), gh_scm2int (gh_cdr ($3)));
 
 		$$ = unsmob_duration ($$)->compressed (m).smobbed_copy ();
 	}
diff --git a/lily/part-combine-music-iterator.cc b/lily/part-combine-music-iterator.cc
index 043f83c557..68d0516ff5 100644
--- a/lily/part-combine-music-iterator.cc
+++ b/lily/part-combine-music-iterator.cc
@@ -62,7 +62,7 @@ Part_combine_music_iterator::ok () const
 void
 Part_combine_music_iterator::construct_children ()
 {
-  Part_combine_music const * m = dynamic_cast<Part_combine_music const*> (music_l_);
+  Part_combine_music const * m = dynamic_cast<Part_combine_music const*> (music_l ());
   
   first_iter_p_ = get_iterator_p (m->first_l ());
   second_iter_p_ = get_iterator_p (m->second_l ());
@@ -141,7 +141,7 @@ int
 Part_combine_music_iterator::get_state (Moment)
 {
   int state = UNKNOWN;
-  Part_combine_music const *p = dynamic_cast<Part_combine_music const* > (music_l_);
+  Part_combine_music const *p = dynamic_cast<Part_combine_music const* > (music_l ());
 
   String w = ly_scm2string (p->get_mus_property ("what"));
     
@@ -157,7 +157,7 @@ Part_combine_music_iterator::get_state (Moment)
   
   Moment now = pending_moment ();
 
-  if (!now.mod_rat (change_mom))
+  if (!now.main_part_.mod_rat (change_mom.main_part_))
     {
       SCM interval = SCM_BOOL_F;
       if (first_until_ < now)
@@ -341,7 +341,7 @@ Part_combine_music_iterator::process (Moment m)
   else
     state = state_;
   
-  Part_combine_music const *p = dynamic_cast<Part_combine_music const* > (music_l_);
+  Part_combine_music const *p = dynamic_cast<Part_combine_music const* > (music_l ());
 
 
   bool previously_combined_b = first_iter_p_->report_to_l ()->daddy_trans_l_
diff --git a/lily/percent-repeat-engraver.cc b/lily/percent-repeat-engraver.cc
index cd11b6a89d..0082971d9b 100644
--- a/lily/percent-repeat-engraver.cc
+++ b/lily/percent-repeat-engraver.cc
@@ -103,7 +103,7 @@ Percent_repeat_engraver::try_music (Music * m)
 	meas_len = *unsmob_moment (m);
 
       if (body_length_ < meas_len &&
-	  meas_len.mod_rat (body_length_) == Moment (0,0))
+	  meas_len.main_part_.mod_rat (body_length_.main_part_) == Moment (0,0))
 	repeat_sign_type_ = BEAT;
       else if (meas_len == body_length_)
 	repeat_sign_type_ = MEASURE;
diff --git a/lily/percent-repeat-iterator.cc b/lily/percent-repeat-iterator.cc
index b9248bb7a8..3d1120981b 100644
--- a/lily/percent-repeat-iterator.cc
+++ b/lily/percent-repeat-iterator.cc
@@ -35,7 +35,7 @@ Percent_repeat_iterator::ok () const
 void
 Percent_repeat_iterator::construct_children ()
 {
-  Repeated_music * mus =dynamic_cast<Repeated_music *> (music_l_);
+  Repeated_music * mus =dynamic_cast<Repeated_music *> (music_l ());
   finish_mom_ = mus->length_mom ();
   child_iter_p_ = get_iterator_p (mus->body ());
 }
@@ -46,11 +46,11 @@ Percent_repeat_iterator::process (Moment m)
 {
   if (!m)
     {
-      Music_iterator *yeah = try_music (music_l_);
+      Music_iterator *yeah = try_music (music_l ());
       if (yeah)
 	set_translator (yeah->report_to_l ());
       else
-	music_l_->origin ()->warning ( _ ("no one to print a percent"));
+	music_l ()->origin ()->warning ( _ ("no one to print a percent"));
     }
   
   if (child_iter_p_->ok ())
diff --git a/lily/property-iterator.cc b/lily/property-iterator.cc
index 84c8486d0b..cea57f3dc3 100644
--- a/lily/property-iterator.cc
+++ b/lily/property-iterator.cc
@@ -18,10 +18,10 @@
 void
 Property_iterator::process (Moment m)
 {
-  SCM sym = music_l_->get_mus_property ("symbol");
+  SCM sym = music_l ()->get_mus_property ("symbol");
   if (gh_symbol_p (sym))
     {
-      SCM val = music_l_->get_mus_property ("value");
+      SCM val = music_l ()->get_mus_property ("value");
       bool ok= true;
       if (val != SCM_EOL)
 	ok = type_check_assignment (val, sym, ly_symbol2scm ("translation-type?"));
@@ -34,7 +34,7 @@ Property_iterator::process (Moment m)
 void
 Property_unset_iterator::process (Moment m)
 {
-  SCM sym = music_l_->get_mus_property ("symbol");
+  SCM sym = music_l ()->get_mus_property ("symbol");
   if (gh_symbol_p (sym))
     {
       report_to_l ()->unset_property (sym);
@@ -46,11 +46,11 @@ Property_unset_iterator::process (Moment m)
 void
 Push_property_iterator::process (Moment m)
 {
-  SCM syms = music_l_->get_mus_property ("symbols");
-  SCM eprop = music_l_->get_mus_property ("grob-property");
-  SCM val = music_l_->get_mus_property ("grob-value");
+  SCM syms = music_l ()->get_mus_property ("symbols");
+  SCM eprop = music_l ()->get_mus_property ("grob-property");
+  SCM val = music_l ()->get_mus_property ("grob-value");
 
-  if (to_boolean (music_l_->get_mus_property ("pop-first")))
+  if (to_boolean (music_l ()->get_mus_property ("pop-first")))
     Translator_def::apply_pushpop_property (report_to_l (),
 					    syms, eprop, SCM_UNDEFINED);
 
@@ -62,8 +62,8 @@ Push_property_iterator::process (Moment m)
 void
 Pop_property_iterator::process (Moment m)
 {
-  SCM syms = music_l_->get_mus_property ("symbols");
-  SCM eprop = music_l_->get_mus_property ("grob-property");
+  SCM syms = music_l ()->get_mus_property ("symbols");
+  SCM eprop = music_l ()->get_mus_property ("grob-property");
   Translator_def::apply_pushpop_property (report_to_l (), syms, eprop, SCM_UNDEFINED);
   
   Simple_music_iterator::process (m);
diff --git a/lily/request-chord-iterator.cc b/lily/request-chord-iterator.cc
index 55372a463f..9cee9ae4f4 100644
--- a/lily/request-chord-iterator.cc
+++ b/lily/request-chord-iterator.cc
@@ -42,7 +42,7 @@ Request_chord_iterator::construct_children ()
 Request_chord*
 Request_chord_iterator::elt_l () const
 {
-  return (Request_chord*) music_l_;
+  return (Request_chord*) music_l ();
 }
 
 SCM
@@ -51,7 +51,7 @@ Request_chord_iterator::get_music (Moment) const
   SCM s = SCM_EOL;
   if (last_processed_mom_ < Moment (0))
     {
-      Music_sequence * ms = dynamic_cast<Music_sequence*> (music_l_);
+      Music_sequence * ms = dynamic_cast<Music_sequence*> (music_l ());
      
       for (SCM m = ms->music_list (); gh_pair_p (m); m = gh_cdr (m))
 	{
@@ -66,7 +66,7 @@ Request_chord_iterator::process (Moment m)
 {
   if (last_processed_mom_ < Moment (0))
     {
-      for (SCM s = dynamic_cast<Music_sequence *> (music_l_)->music_list ();
+      for (SCM s = dynamic_cast<Music_sequence *> (music_l ())->music_list ();
 	   gh_pair_p (s);  s = gh_cdr (s))
 	{
 	  Music *mus = unsmob_music (gh_car (s));
diff --git a/lily/request-chord.cc b/lily/request-chord.cc
new file mode 100644
index 0000000000..084042f021
--- /dev/null
+++ b/lily/request-chord.cc
@@ -0,0 +1,48 @@
+#include "pitch.hh" 
+#include "request-chord-iterator.hh"
+#include "music-list.hh"
+#include "musical-request.hh"
+
+Request_chord::Request_chord (SCM s)
+  : Simultaneous_music (s)
+{
+  set_mus_property ("iterator-ctor",
+		    Request_chord_iterator::constructor_cxx_function);
+}
+
+Request_chord::Request_chord ()
+{
+  set_mus_property ("iterator-ctor",
+		    Request_chord_iterator::constructor_cxx_function);
+}
+
+
+
+Pitch
+Request_chord::to_relative_octave (Pitch last)
+{
+  for (SCM s = music_list (); gh_pair_p (s);  s = gh_cdr (s))
+    {
+      Music * mus = unsmob_music (gh_car (s));
+      if (Melodic_req *m= dynamic_cast <Melodic_req *> (mus))
+	{
+	  Pitch pit = *unsmob_pitch (m->get_mus_property ("pitch"));
+	  
+	  pit.to_relative_octave (last);
+	  m->set_mus_property ("pitch", pit.smobbed_copy ());
+	  	  
+	  return pit;
+	}
+    }
+  return last;
+}
+
+Moment
+Request_chord::start_mom () const
+{
+  return Music::start_mom ();
+}
+
+
+
+ADD_MUSIC (Request_chord);
diff --git a/lily/rod.cc b/lily/rod.cc
index 932133f339..7fcfcbc52d 100644
--- a/lily/rod.cc
+++ b/lily/rod.cc
@@ -10,7 +10,7 @@
 #include "paper-column.hh"
 #include "debug.hh"
 #include "dimensions.hh"
-#include "spaceable-element.hh"
+#include "spaceable-grob.hh"
 
 Rod::Rod ()
 {
diff --git a/lily/scm-option.cc b/lily/scm-option.cc
index 8b26f5ece0..b98327d1a3 100644
--- a/lily/scm-option.cc
+++ b/lily/scm-option.cc
@@ -53,13 +53,20 @@ Switch on any experimental features.  Not for general public use.
 SCM
 set_lily_option (SCM var, SCM val)
 {
+  /*
+    Scheme option usage:
+    lilypond -e "(set-lily-option 'help 0)"
+   */
   if (var == ly_symbol2scm ("help"))
     {
       cout << '\n';
       cout << _ ("Scheme options:");
-      cout << "help"; 
-      cout << "midi-debug (boolean)"; 
-      cout << "testing-level (int)"; 
+      cout << '\n';
+      cout << "  help (any-symbol)"; 
+      cout << '\n';
+      cout << "  midi-debug (boolean)"; 
+      cout << '\n';
+      cout << "  testing-level (int)"; 
       cout << '\n';
       exit (0);
     }
diff --git a/lily/score-engraver.cc b/lily/score-engraver.cc
index c387a33959..733aa5a3c0 100644
--- a/lily/score-engraver.cc
+++ b/lily/score-engraver.cc
@@ -19,6 +19,9 @@
 #include "translator-def.hh"
 
 
+/*
+  TODO: the column creation logic is rather hairy. Revise it.
+ */
 Score_engraver::Score_engraver ()
 {
   scoreline_l_ =0;
@@ -29,19 +32,17 @@ Score_engraver::Score_engraver ()
 }
 
 void
-Score_engraver::make_columns (Moment w)
+Score_engraver::make_columns ()
 {
   /*
     ugh.
    */
-  if (!command_column_l_
-      || *unsmob_moment (command_column_l_->get_grob_property ("when")) != w)
+  if (!command_column_l_)
+    //      || *unsmob_moment (command_column_l_->get_grob_property ("when")) != w)
     {
       set_columns (new Paper_column (get_property (ly_symbol2scm ("NonMusicalPaperColumn"))),
 		   new Paper_column (get_property (ly_symbol2scm ("PaperColumn"))));
   
-      command_column_l_->set_grob_property ("when", w.smobbed_copy ());
-      musical_column_l_->set_grob_property ("when", w.smobbed_copy ());
       command_column_l_->set_grob_property ("breakable", SCM_BOOL_T);
 
       Grob_info i1 (command_column_l_, 0), i2 (musical_column_l_,0);
@@ -57,8 +58,8 @@ void
 Score_engraver::prepare (Moment w)
 {
   Global_translator::prepare (w);
-  make_columns (w);
 
+  make_columns ();
   start_translation_timestep ();
 }
 
@@ -70,6 +71,7 @@ Score_engraver::finish ()
    
   check_removal ();
   removal_processing ();
+
 }
 
 /*
@@ -89,11 +91,9 @@ Score_engraver::initialize ()
 
   pscore_p_->typeset_line (new Line_of_score (props));
   
-  make_columns (Moment (0));
+  make_columns ();
   scoreline_l_ = pscore_p_->line_l_;
-
   scoreline_l_->set_bound (LEFT, command_column_l_);
-  
   command_column_l_->set_grob_property ("breakable", SCM_BOOL_T);
 
   Engraver_group_engraver::initialize ();
@@ -104,12 +104,13 @@ void
 Score_engraver::finalize ()
 {
   Engraver_group_engraver::finalize ();
-  scoreline_l_->set_bound (RIGHT,command_column_l_);
-  command_column_l_->set_grob_property ("breakable", SCM_BOOL_T);
+
+  Grob * cc
+    = unsmob_grob (get_property (ly_symbol2scm ("currentCommandColumn")));
+  scoreline_l_->set_bound (RIGHT, cc);
+  cc->set_grob_property ("breakable", SCM_BOOL_T);
   
   typeset_all ();
-
-  set_columns (0,0);
 }
 
 void
@@ -217,25 +218,25 @@ Score_engraver::stop_translation_timestep ()
       if (! (breaks_i_%8))
 	progress_indication ("[" + to_str (breaks_i_) + "]");
     }
+
+  command_column_l_->set_grob_property ("when", now_mom_.smobbed_copy ());
+  musical_column_l_->set_grob_property ("when", now_mom_.smobbed_copy ());
+
+  scoreline_l_->add_column (command_column_l_);
+  scoreline_l_->add_column (musical_column_l_);
+  
+  command_column_l_ = 0;
+  musical_column_l_ = 0;
 }
 
 void
 Score_engraver::set_columns (Paper_column *new_command_l, 
 			     Paper_column *new_musical_l)
 {
-  Paper_column * news[] = {new_command_l, new_musical_l};
-  Paper_column **current[] = {&command_column_l_, &musical_column_l_};
-
-  for (int i=00; i< 2; i++) 
-    {
-      if (*current[i])
-	{
-	  scoreline_l_->add_column ((*current[i]));
-	}
-      if (news[i])
-	*current[i] = news[i];
-    }
-
+  assert (!command_column_l_ && !musical_column_l_);
+  command_column_l_ = new_command_l;
+  musical_column_l_ = new_musical_l;
+  
   if (new_musical_l)
     set_property ("currentMusicalColumn", new_musical_l->self_scm ());
   if (new_command_l)
diff --git a/lily/sequential-music-iterator.cc b/lily/sequential-music-iterator.cc
index ad1ae7b934..0f0f82d898 100644
--- a/lily/sequential-music-iterator.cc
+++ b/lily/sequential-music-iterator.cc
@@ -33,13 +33,14 @@ Sequential_music_iterator::Sequential_music_iterator ()
 {
   cursor_ = SCM_EOL;
   here_mom_ = Moment (0);
-
+  grace_skips_ = 0;
   iter_p_ =0;
 }
 
 Sequential_music_iterator::Sequential_music_iterator (Sequential_music_iterator const &src)
   : Music_iterator (src)
 {
+  grace_skips_ = src.grace_skips_;
   cursor_ = src.cursor_;
   here_mom_ = src.here_mom_;
   if (src.iter_p_)
@@ -53,10 +54,46 @@ Sequential_music_iterator::~Sequential_music_iterator ()
   delete iter_p_;
 }
 
+
+Grace_skip *
+get_grace_skips (SCM cursor)
+{
+  Moment here (0);
+  Moment last (here);
+  Grace_skip *head = 0;
+  Grace_skip **tail = &head;
+  bool first = true; 
+
+  
+  for (; gh_pair_p (cursor); cursor = gh_cdr (cursor))
+    {
+      Music * mus = unsmob_music (gh_car (cursor));
+      Moment l =mus->length_mom ();
+      if (l.main_part_)
+	{
+	  first = false;
+	  last = here;
+	  here += l;
+	}
+      else if(l.grace_mom_ && !first)
+	{
+	  assert (!l.main_part_);
+	  Grace_skip *p =new Grace_skip;
+	  p->start_ = last;
+	  p->length_ = (here - last).main_part_;
+	  p->grace_length_ = l.grace_mom_;
+	  p->next_ = 0;
+	  *tail = p;
+	  tail = &(*tail)->next_; 
+	}
+    }
+  return  head;
+}
+
 void
 Sequential_music_iterator::construct_children ()
 {
-  cursor_ = dynamic_cast<Music_sequence const*> (music_l_)->music_list ();
+  cursor_ = dynamic_cast<Music_sequence const*> (music_l ())->music_list ();
 
   iter_p_ = gh_pair_p (cursor_) ?  get_iterator_p (unsmob_music (gh_car (cursor_))) : 0;
   while (iter_p_ && !iter_p_->ok ())
@@ -64,12 +101,15 @@ Sequential_music_iterator::construct_children ()
       next_element ();
     }
 
+  grace_skips_ = get_grace_skips (cursor_);
+
+  here_mom_ = music_l ()->start_mom ();
+
   /*
     iter_p_->ok () is tautology, but what the heck.
    */
   if (iter_p_ && iter_p_->ok ()) 
     descend_to_child ();
-
 }
 
 
@@ -80,7 +120,30 @@ Sequential_music_iterator::construct_children ()
 void
 Sequential_music_iterator::next_element ()
 {
-  here_mom_ += iter_p_->music_length_mom ();
+  Moment len =iter_p_->music_length_mom ();
+  Moment start  = iter_p_->music_start_mom ();
+  assert (!grace_skips_  || grace_skips_->start_ >= here_mom_);
+
+  if (len.main_part_ && grace_skips_ && grace_skips_->start_ == here_mom_)
+    {
+      Moment sk;
+      sk.main_part_ = grace_skips_->length_;
+      here_mom_ +=  sk;
+      here_mom_.grace_mom_ = - grace_skips_->grace_length_;
+
+      Grace_skip * n =grace_skips_->next_;
+      delete       grace_skips_;
+      grace_skips_ = n;
+    }
+  else if (len.grace_mom_)
+    {
+      here_mom_.grace_mom_ =0;
+    }
+  else
+    {
+      here_mom_ += len - start;
+    }
+  
   delete iter_p_;
   cursor_ = gh_cdr (cursor_);
 
@@ -159,9 +222,9 @@ Sequential_music_iterator::get_music (Moment until)const
   return s;
 }
 /*
-  Skip events till UNTIL. We don't do any other side effects (such as
-  moving descending to child iterator contexts, because they might
-  depend on \context specs and \translator changes being executed
+  Skip events till UNTIL. We don't do any other side effects such as
+  descending to child iterator contexts, because they might depend on
+  \context specs and \translator changes being executed
     
  */
 void
@@ -185,7 +248,20 @@ Sequential_music_iterator::process (Moment until)
 {
   while (iter_p_)
     {
-      iter_p_->process (until - here_mom_);
+      if (grace_skips_ &&
+	  grace_skips_->start_ == here_mom_
+	  && (grace_skips_->start_ + grace_skips_->length_).main_part_ ==
+	  until.main_part_)
+	{
+	  /*
+	    do the stuff/note/rest preceding a grace.
+	   */
+	  Moment u = until;
+	  u.grace_mom_ = 0;
+	  iter_p_->process (u - here_mom_);
+	}
+      else
+	iter_p_->process (until - here_mom_ + iter_p_->music_start_mom ());
 
       /*
 	if the iter is still OK, there must be events left that have
@@ -204,7 +280,18 @@ Sequential_music_iterator::process (Moment until)
 Moment
 Sequential_music_iterator::pending_moment () const
 {
-  return iter_p_->pending_moment () + here_mom_;
+  Moment cp = iter_p_->pending_moment ();
+
+  if (grace_skips_
+      && here_mom_ == grace_skips_->start_
+      && cp.main_part_ >=  grace_skips_->length_)
+    {
+      cp += here_mom_ ;
+      cp.grace_mom_ = - grace_skips_->grace_length_;
+      return cp;
+    }
+  else
+    return cp + here_mom_ - iter_p_->music_start_mom ();
 }
 
 
diff --git a/lily/sequential-music.cc b/lily/sequential-music.cc
new file mode 100644
index 0000000000..8e38c38c8e
--- /dev/null
+++ b/lily/sequential-music.cc
@@ -0,0 +1,30 @@
+
+#include "music-list.hh"
+#include "sequential-music-iterator.hh"
+
+Sequential_music::Sequential_music (SCM head)
+  : Music_sequence (head)
+{
+  set_mus_property ("iterator-ctor",
+		    Sequential_music_iterator::constructor_cxx_function);
+}
+Sequential_music::Sequential_music ()
+  : Music_sequence ()
+{
+  set_mus_property ("iterator-ctor",
+		    Sequential_music_iterator::constructor_cxx_function);
+}
+
+
+Moment
+Sequential_music::length_mom () const
+{
+  return cumulative_length ();
+}
+ADD_MUSIC (Sequential_music);
+
+Moment
+Sequential_music::start_mom () const
+{
+  return first_start ();
+}
diff --git a/lily/simple-music-iterator.cc b/lily/simple-music-iterator.cc
index ef83a5abda..002f070009 100644
--- a/lily/simple-music-iterator.cc
+++ b/lily/simple-music-iterator.cc
@@ -41,7 +41,11 @@ Simple_music_iterator::pending_moment ()const
 void
 Simple_music_iterator::skip (Moment m)
 {
-  music_l_ = 0;
+  /*
+    docme??!!
+   */
+  //  music_l_ = 0;
+  
   last_processed_mom_ = m;
 }
 
diff --git a/lily/simple-spacer.cc b/lily/simple-spacer.cc
index cea9d7079d..2b9bbdde83 100644
--- a/lily/simple-spacer.cc
+++ b/lily/simple-spacer.cc
@@ -19,7 +19,7 @@
 #include "rod.hh"
 #include "warn.hh"
 #include "column-x-positions.hh"
-#include "spaceable-element.hh"
+#include "spaceable-grob.hh"
 #include "dimensions.hh"
 
 Simple_spacer::Simple_spacer ()
@@ -170,7 +170,7 @@ Simple_spacer::add_columns (Link_array<Grob> cols)
   for (int i=0; i < cols.size () - 1; i++)
     {
       SCM spring_params = SCM_UNDEFINED;
-      for (SCM s = Spaceable_grob::get_ideal_distances (cols[i]);
+      for (SCM s = cols[i]->get_grob_property ("ideal-distances");
 	   spring_params == SCM_UNDEFINED && gh_pair_p (s);
 	   s = gh_cdr (s))
 	{
diff --git a/lily/simultaneous-music-iterator.cc b/lily/simultaneous-music-iterator.cc
index 3265bee03d..d72c81cea1 100644
--- a/lily/simultaneous-music-iterator.cc
+++ b/lily/simultaneous-music-iterator.cc
@@ -12,6 +12,7 @@
 #include "music-list.hh"
 #include "killing-cons.tcc"
 
+
 Simultaneous_music_iterator::Simultaneous_music_iterator ()
 {
   separate_contexts_b_ = false;
@@ -48,7 +49,7 @@ void
 Simultaneous_music_iterator::construct_children ()
 {
   int j = 0;
-  Music_sequence const *sim = dynamic_cast<Music_sequence const*> (music_l_);
+  Music_sequence const *sim = dynamic_cast<Music_sequence const*> (music_l ());
 
   SCM i = sim->music_list ();
   for (; gh_pair_p (i); i = gh_cdr (i), j++)
diff --git a/lily/simultaneous-music.cc b/lily/simultaneous-music.cc
new file mode 100644
index 0000000000..51bc213974
--- /dev/null
+++ b/lily/simultaneous-music.cc
@@ -0,0 +1,41 @@
+
+#include "moment.hh"
+#include "pitch.hh"
+#include "simultaneous-music-iterator.hh"
+#include "music-list.hh"
+
+Moment
+Simultaneous_music::length_mom () const
+{
+  return maximum_length ();
+}
+
+Moment
+Simultaneous_music::start_mom () const
+{
+  return minimum_start ();
+}
+
+
+
+Simultaneous_music::Simultaneous_music (SCM head)
+  : Music_sequence (head)
+{
+  set_mus_property ("iterator-ctor",
+		    Simultaneous_music_iterator::constructor_cxx_function);
+}
+
+Simultaneous_music::Simultaneous_music ()
+  : Music_sequence ()
+{
+  set_mus_property ("iterator-ctor",
+		    Simultaneous_music_iterator::constructor_cxx_function);
+  
+}
+
+Pitch
+Simultaneous_music::to_relative_octave (Pitch p)
+{
+  return do_relative_octave (p, true);
+}
+ADD_MUSIC (Simultaneous_music);
diff --git a/lily/spaceable-element.cc b/lily/spaceable-element.cc
deleted file mode 100644
index b0d6779c7d..0000000000
--- a/lily/spaceable-element.cc
+++ /dev/null
@@ -1,82 +0,0 @@
-/*   
-  spaceable-element.cc --  implement Spaceable_grob
-  
-  source file of the GNU LilyPond music typesetter
-  
-  (c) 2000--2001 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-  
- */
-
-#include "spaceable-element.hh"
-#include "grob.hh"
-#include "warn.hh"
-
-SCM
-Spaceable_grob::get_minimum_distances (Grob*me)
-{
-  return me->get_grob_property ("minimum-distances");
-}
-
-/*todo: merge code of spring & rod?
- */
-void
-Spaceable_grob::add_rod (Grob *me , Grob * p, Real d)
-{
-  SCM mins = get_minimum_distances (me);
-  SCM newdist = gh_double2scm (d);
-  for (SCM s = mins; gh_pair_p (s); s = gh_cdr (s))
-    {
-      SCM dist = gh_car (s);
-      if (gh_car (dist) == p->self_scm ())
-	{
-	  gh_set_cdr_x (dist, scm_max (gh_cdr (dist),
-				       newdist));
-	  return ;
-	}
-    }
-
-  mins = gh_cons (gh_cons (p->self_scm (), newdist), mins);
-  me->set_grob_property ("minimum-distances", mins);
-}
-
-void
-Spaceable_grob::add_spring (Grob*me, Grob * p, Real d, Real strength)
-{
-  SCM mins = get_ideal_distances (me);
-  SCM newdist= gh_double2scm (d);
-  for (SCM s = mins; gh_pair_p (s); s = gh_cdr (s))
-    {
-      SCM dist = gh_car (s);
-      if (gh_car (dist) == p->self_scm ())
-	{
-	  programming_error ("already have that spring");
-	  return ;
-	}
-    }
-  SCM newstrength= gh_double2scm (strength);  
-  
-  mins = gh_cons (gh_cons (p->self_scm (), gh_cons (newdist, newstrength)), mins);
-  me->set_grob_property ("ideal-distances", mins);
-}
-
-SCM
-Spaceable_grob::get_ideal_distances (Grob*me)
-{
-  return me->get_grob_property ("ideal-distances");
-}
-
-
-void
-Spaceable_grob::remove_interface (Grob*me)
-{
-  me->remove_grob_property ("minimum-distances");
-  me->remove_grob_property ("ideal-distances");
-  me->remove_grob_property ("dir-list");
-}
-
-
-void
-Spaceable_grob::set_interface (Grob*me)
-{
-  me->set_interface (ly_symbol2scm ("spaceable-element-interface"));
-}
diff --git a/lily/spaceable-grob.cc b/lily/spaceable-grob.cc
new file mode 100644
index 0000000000..8aa3209f28
--- /dev/null
+++ b/lily/spaceable-grob.cc
@@ -0,0 +1,77 @@
+/*   
+  spaceable-grob.cc --  implement Spaceable_grob
+  
+  source file of the GNU LilyPond music typesetter
+  
+  (c) 2000--2001 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  
+ */
+
+#include "spaceable-grob.hh"
+#include "grob.hh"
+#include "warn.hh"
+
+SCM
+Spaceable_grob::get_minimum_distances (Grob*me)
+{
+  return me->get_grob_property ("minimum-distances");
+}
+
+/*todo: merge code of spring & rod?
+ */
+void
+Spaceable_grob::add_rod (Grob *me , Grob * p, Real d)
+{
+  SCM mins = get_minimum_distances (me);
+  SCM newdist = gh_double2scm (d);
+  for (SCM s = mins; gh_pair_p (s); s = gh_cdr (s))
+    {
+      SCM dist = gh_car (s);
+      if (gh_car (dist) == p->self_scm ())
+	{
+	  gh_set_cdr_x (dist, scm_max (gh_cdr (dist),
+				       newdist));
+	  return ;
+	}
+    }
+
+  mins = gh_cons (gh_cons (p->self_scm (), newdist), mins);
+  me->set_grob_property ("minimum-distances", mins);
+}
+
+void
+Spaceable_grob::add_spring (Grob*me, Grob * p, Real d, Real strength)
+{
+  SCM mins = me->get_grob_property ("ideal-distances");
+  SCM newdist= gh_double2scm (d);
+  for (SCM s = mins; gh_pair_p (s); s = gh_cdr (s))
+    {
+      SCM dist = gh_car (s);
+      if (gh_car (dist) == p->self_scm ())
+	{
+	  programming_error ("already have that spring");
+	  return ;
+	}
+    }
+  SCM newstrength= gh_double2scm (strength);  
+  
+  mins = gh_cons (gh_cons (p->self_scm (), gh_cons (newdist, newstrength)), mins);
+  me->set_grob_property ("ideal-distances", mins);
+}
+
+
+
+void
+Spaceable_grob::remove_interface (Grob*me)
+{
+  me->remove_grob_property ("minimum-distances");
+  me->remove_grob_property ("ideal-distances");
+  me->remove_grob_property ("dir-list");
+}
+
+
+void
+Spaceable_grob::set_interface (Grob*me)
+{
+  me->set_interface (ly_symbol2scm ("spaceable-grob-interface"));
+}
diff --git a/lily/spacing-engraver.cc b/lily/spacing-engraver.cc
index 0b3b586731..b02847bf66 100644
--- a/lily/spacing-engraver.cc
+++ b/lily/spacing-engraver.cc
@@ -64,7 +64,7 @@ int
 Rhythmic_tuple::time_compare (Rhythmic_tuple const &h1,
 			      Rhythmic_tuple const &h2)
 {
-  return (h1.end_ - h2.end_).sign ();
+  return (h1.end_ - h2.end_).main_part_.sign ();
 }
 
 Spacing_engraver::Spacing_engraver ()
diff --git a/lily/spacing-spanner.cc b/lily/spacing-spanner.cc
index bf85b60683..31d44a0d7e 100644
--- a/lily/spacing-spanner.cc
+++ b/lily/spacing-spanner.cc
@@ -53,10 +53,18 @@ Spacing_spanner::do_measure (Grob*me, Link_array<Grob> cols)
     {
       if (dynamic_cast<Paper_column*> (cols[i])->musical_b ())
 	{
+	  Moment *when = unsmob_moment (cols[i]->get_grob_property  ("when"));
+
+	  /*
+	    ignore grace notes for shortest notes.
+	   */
+	  if (when && when->grace_mom_)
+	    continue;
+	  
 	  SCM  st = cols[i]->get_grob_property ("shortest-starter-duration");
 	  Moment this_shortest = *unsmob_moment (st);
 	  shortest = shortest <? this_shortest;
-	  if (!mean_shortest.infty_b ())
+	  if (!mean_shortest.main_part_.infty_b ())
 	    {
 	      n++;
 	      mean_shortest += this_shortest;
@@ -65,7 +73,6 @@ Spacing_spanner::do_measure (Grob*me, Link_array<Grob> cols)
     }
   mean_shortest /= n;
 
-
   for (int i= 0; i < cols.size () - 1; i++)
     {
       Item * l = dynamic_cast<Item*> (cols[i]);
@@ -266,12 +273,28 @@ Spacing_spanner::note_spacing (Grob*me, Grob *lc, Grob *rc,
   Real dist = get_duration_space (me, shortest_playing_len, shortest);
   dist *= (double) (delta_t / shortest_playing_len);
 
+
+
   /*
     UGH: KLUDGE!
   */
   
   if (delta_t > Moment (1,32))
     dist += stem_dir_correction (me, lc,rc);
+
+
+  Moment *lm = unsmob_moment (lc->get_grob_property ("when"));
+  Moment *rm = unsmob_moment (rc->get_grob_property ("when"));
+
+  if (lm && rm)
+    {
+      if (lm->grace_mom_ && rm->grace_mom_)
+	dist *= 0.5;
+      else if (!rm->grace_mom_ && lm->grace_mom_)
+	dist *= 0.7;
+    }
+
+  
   return dist;
 }
 
diff --git a/lily/span-bar-engraver.cc b/lily/span-bar-engraver.cc
index a4e19592d0..9d110e8a63 100644
--- a/lily/span-bar-engraver.cc
+++ b/lily/span-bar-engraver.cc
@@ -59,8 +59,6 @@ Span_bar_engraver::acknowledge_grob (Grob_info i)
 	{
 	  spanbar_p_ = new Item (get_property ("SpanBar"));
 	  Span_bar::set_interface (spanbar_p_);
-		
-	  spanbar_p_->set_parent (bar_l_arr_[0], Y_AXIS);
 	  spanbar_p_->set_parent (bar_l_arr_[0], X_AXIS);
 
 	  announce_grob (spanbar_p_,0);
diff --git a/lily/span-bar.cc b/lily/span-bar.cc
index fddeb470fe..b564cf1790 100644
--- a/lily/span-bar.cc
+++ b/lily/span-bar.cc
@@ -25,6 +25,73 @@ Span_bar::add_bar (Grob*me, Grob*b)
   me->add_dependency (b);
 }
 
+MAKE_SCHEME_CALLBACK (Span_bar,brew_molecule,1);
+
+/**
+ * Limitations/Bugs:
+ *
+ * (1) Elements from 'me->get_grob_property ("elements")' must be
+ * ordered according to their y coordinates relative to their common
+ * axis group parent.  Otherwise, the computation goes mad.  (TODO:
+ * apply a sort algorithm that ensures this precondition.)  However,
+ * until now, I have seen no case where lily has not fulfilled this
+ * precondition.
+ *
+ * (2) This method depends on bar_engraver not being removed from
+ * staff context.  If bar_engraver is removed, the size of the staff
+ * lines is evaluated as 0, which results in a solid span bar line
+ * with faulty y coordinate.
+ */
+
+/*
+  This routine was originally by Juergen Reuter, but it was a on the
+  bulky side. Rewritten by Han-Wen. 
+ */
+SCM
+Span_bar::brew_molecule (SCM smobbed_me) 
+{
+  Grob *me = unsmob_grob (smobbed_me);
+  SCM first_elt = me->get_grob_property ("elements");
+
+  // compute common refpoint of elements
+  Grob *refp = me;
+  for (SCM elts = first_elt; gh_pair_p (elts); elts = gh_cdr (elts))
+    {
+      SCM smobbed_staff_bar = gh_car (elts);
+      Grob *staff_bar = unsmob_grob (smobbed_staff_bar);
+      refp = staff_bar->common_refpoint (refp, Y_AXIS);
+    }
+
+  // evaluate glyph
+  Span_bar::evaluate_glyph(me);
+  SCM glyph = me->get_grob_property (ly_symbol2scm ("glyph"));
+  String glyph_str = ly_scm2string (glyph);
+
+  // compose span_bar_mol
+  Molecule span_bar_mol;
+  Grob *prev_staff_bar = 0;
+  for (SCM elts = first_elt; gh_pair_p (elts); elts = gh_cdr (elts))
+    {
+      SCM smobbed_staff_bar = gh_car (elts);
+      Grob *staff_bar = unsmob_grob (smobbed_staff_bar);
+      if (prev_staff_bar)
+	{
+	  Interval l(prev_staff_bar->extent (refp, Y_AXIS)[UP],
+		     staff_bar->extent (refp, Y_AXIS)[DOWN]);
+
+	  Molecule interbar
+	    = Bar::compound_barline (staff_bar, glyph_str, l.length());
+	  interbar.translate_axis (l.center (), Y_AXIS);
+	  span_bar_mol.add_molecule (interbar);
+	}
+      prev_staff_bar = staff_bar;
+    }
+
+  span_bar_mol.translate_axis (- me->relative_coordinate (refp, Y_AXIS), Y_AXIS);
+  
+  return span_bar_mol.smobbed_copy ();
+}
+
 MAKE_SCHEME_CALLBACK (Span_bar,width_callback,2);
 SCM
 Span_bar::width_callback (SCM element_smob, SCM scm_axis)
@@ -36,7 +103,7 @@ Span_bar::width_callback (SCM element_smob, SCM scm_axis)
 
   /*
     urg.
-   */
+  */
   Molecule m = Bar::compound_barline (se, gl, 40 PT);
   
   return ly_interval2scm (m.extent (X_AXIS));
@@ -52,7 +119,7 @@ Span_bar::before_line_breaking (SCM smob)
   /*
     no need to call   Bar::before_line_breaking (), because the info
     in ELEMENTS already has been procced by Bar::before_line_breaking ().
-   */
+  */
   return SCM_UNSPECIFIED;
 }
 
@@ -144,7 +211,7 @@ Span_bar::get_bar_size (SCM smob)
     {
       /*
 	This happens if the bars are hara-kiried from under us.
-       */
+      */
       me->suicide ();
       return gh_double2scm (-1);
     }
diff --git a/lily/spring.cc b/lily/spring.cc
index 476007d122..93ef33f59e 100644
--- a/lily/spring.cc
+++ b/lily/spring.cc
@@ -10,7 +10,7 @@
 #include "spring.hh"
 #include "debug.hh"
 #include "item.hh"
-#include "spaceable-element.hh"
+#include "spaceable-grob.hh"
 #include "paper-column.hh"
 
 Spring::Spring ()
diff --git a/lily/stem.cc b/lily/stem.cc
index 7eac4dfe63..aca140aaf7 100644
--- a/lily/stem.cc
+++ b/lily/stem.cc
@@ -511,6 +511,7 @@ Stem::brew_molecule (SCM smob)
   Interval stem_y (y1,y2);
   stem_y.unite (Interval (y2,y1));
 
+  // dy?
   Real dy = Staff_symbol_referencer::staff_space (me)/2.0;
     
   if (Grob *hed = support_head (me))
@@ -524,7 +525,10 @@ Stem::brew_molecule (SCM smob)
   
   if (!invisible_b (me))
     {
-      Real stem_width = gh_scm2double (me->get_grob_property ("thickness")) * me->paper_l ()->get_var ("stafflinethickness");
+      Real stem_width = gh_scm2double (me->get_grob_property ("thickness"))
+	// URG
+	* me->paper_l ()->get_var ("stafflinethickness");
+      
       Molecule ss =Lookup::filledbox (Box (Interval (-stem_width/2, stem_width/2),
 					   Interval (stem_y[DOWN]*dy, stem_y[UP]*dy)));
       mol.add_molecule (ss);
diff --git a/lily/tie-engraver.cc b/lily/tie-engraver.cc
index ca954b5e08..061650bbff 100644
--- a/lily/tie-engraver.cc
+++ b/lily/tie-engraver.cc
@@ -310,5 +310,5 @@ int
 CHead_melodic_tuple::time_compare (CHead_melodic_tuple const&h1,
 				   CHead_melodic_tuple const &h2)
 {
-  return (h1.end_ - h2.end_).sign ();
+  return Moment::compare(h1.end_,  h2.end_);
 }
diff --git a/lily/tie-performer.cc b/lily/tie-performer.cc
index ab1ef29966..e25e6cb4b2 100644
--- a/lily/tie-performer.cc
+++ b/lily/tie-performer.cc
@@ -231,5 +231,5 @@ int
 CNote_melodic_tuple::time_compare (CNote_melodic_tuple const&h1,
 				   CNote_melodic_tuple const &h2)
 {
-  return (h1.end_ - h2.end_).sign ();
+  return (h1.end_ - h2.end_).main_part_.sign ();
 }
diff --git a/lily/time-scaled-music-iterator.cc b/lily/time-scaled-music-iterator.cc
index ee8074c6bc..b666f766bd 100644
--- a/lily/time-scaled-music-iterator.cc
+++ b/lily/time-scaled-music-iterator.cc
@@ -18,11 +18,11 @@ Time_scaled_music_iterator::process (Moment m)
 {
   if (!m)
     {
-      Music_iterator *yeah = try_music (music_l_);
+      Music_iterator *yeah = try_music (music_l ());
       if (yeah)
 	set_translator (yeah->report_to_l ());
       else
-	music_l_->origin ()->warning (_ ("no one to print a tuplet start bracket"));
+	music_l ()->origin ()->warning (_ ("no one to print a tuplet start bracket"));
     }
 
   Music_wrapper_iterator::process (m);
diff --git a/lily/timing-engraver.cc b/lily/timing-engraver.cc
index ba462c1673..fb02109583 100644
--- a/lily/timing-engraver.cc
+++ b/lily/timing-engraver.cc
@@ -16,15 +16,28 @@
   Do time bookkeeping
  */
 class Timing_engraver : public Timing_translator, public Engraver
-{   
+{
 protected:
+  /*
+    Needed to know whether we're advancing in grace notes, or not.
+   */
+  Moment last_moment_;
+  
   virtual void start_translation_timestep ();
   virtual void stop_translation_timestep ();
   virtual void process_music ();
+
 public:
+  Timing_engraver ();
   VIRTUAL_COPY_CONS (Translator);
 };
 
+
+Timing_engraver::Timing_engraver ()
+{
+  last_moment_.main_part_ = Rational (-1);
+}
+
 ADD_THIS_TRANSLATOR (Timing_engraver);
 
 void
@@ -33,20 +46,27 @@ Timing_engraver::start_translation_timestep ()
   Timing_translator::start_translation_timestep ();
 
   SCM nonauto = get_property ("barNonAuto");
-
+  Moment now = now_mom ();
   SCM which = get_property ("whichBar");
+
+  /*
+    Set the first bar of the score? 
+   */
   if (!gh_string_p (which))
-    which = now_mom ()
+    which
+      = (now.main_part_ || now.main_part_ == last_moment_.main_part_)
       ? SCM_EOL : ly_str02scm ("|");
   
   if (!gh_string_p (which) && !to_boolean (nonauto))
     {
       SCM always = get_property ("barAlways");
-      if (!measure_position ()
-	  || (to_boolean (always)))
+      Moment mp = measure_position ();
+      if ( (last_moment_.main_part_ != now.main_part_
+	    && !mp.main_part_)
+	   || (to_boolean (always)))
 	{
 	  /* should this work, or be junked?  See input/bugs/no-bars.ly */
-	  which=get_property ("defaultBarType");
+	  which = get_property ("defaultBarType");
 	}
     }
 
@@ -57,7 +77,8 @@ void
 Timing_engraver::stop_translation_timestep ()
 {
   Timing_translator::stop_translation_timestep ();
-  daddy_trans_l_->set_property ("whichBar", SCM_EOL);  
+  daddy_trans_l_->set_property ("whichBar", SCM_EOL);
+  last_moment_ = now_mom ();
 }
 
 
diff --git a/lily/timing-translator.cc b/lily/timing-translator.cc
index aa48828530..dbe365e11c 100644
--- a/lily/timing-translator.cc
+++ b/lily/timing-translator.cc
@@ -18,7 +18,6 @@
   TODO: change the rest of lily, so communication with
   Timing_translator is only done through properties.  This means the
   class declaration can go here.  */
-
 bool
 Timing_translator::try_music (Music*r)
 {
@@ -33,7 +32,7 @@ Timing_translator::try_music (Music*r)
 void
 Timing_translator::process_music ()
 {
-  if (check_ && measure_position ())
+  if (check_ && measure_position ().main_part_)
     {
       check_->origin ()->warning (_f ("barcheck failed at: %s", 
 				      measure_position ().str ()));
@@ -44,7 +43,6 @@ Timing_translator::process_music ()
     }
 }
 
-
 void
 Timing_translator::stop_translation_timestep ()
 {
@@ -92,25 +90,21 @@ Timing_translator::initialize ()
   daddy_trans_l_->set_property ("beatLength", Moment (1,4).smobbed_copy ());
 }
 
-Moment
+Rational
 Timing_translator::measure_length () const
 {
   SCM l = get_property ("measureLength");
   if (unsmob_moment (l))
-    return *unsmob_moment (l);
+    return unsmob_moment (l)->main_part_;
   else
-    return Moment (1);
+    return Rational (1);
 }
 
-
-
 Timing_translator::Timing_translator ()
 {
 
-
 }
 
-
 Moment
 Timing_translator::measure_position () const
 {
@@ -120,8 +114,8 @@ Timing_translator::measure_position () const
   if (unsmob_moment (sm))
     {
       m = *unsmob_moment (sm);
-      while (m < Moment (0))
-	m += measure_length ();
+      while (m.main_part_ < Rational (0))
+	m.main_part_ += measure_length ();
     }
   
   return m;
@@ -130,7 +124,7 @@ Timing_translator::measure_position () const
 void
 Timing_translator::start_translation_timestep ()
 {
-	check_ =00;
+  check_ = 0;
   Translator *t = this;
   Global_translator *global_l =0;
   do
@@ -174,10 +168,10 @@ Timing_translator::start_translation_timestep ()
   SCM cad = get_property ("timing");
   bool c= to_boolean (cad);
 
-  Moment len = measure_length ();
-  while (c && measposp >= len)
+  Rational len = measure_length ();
+  while (c && measposp.main_part_ >= len)
     {
-      measposp -= len;
+      measposp.main_part_ -= len;
       b ++;
     }
 
diff --git a/lily/translator-group.cc b/lily/translator-group.cc
index 33fa92d9cd..2643670a0a 100644
--- a/lily/translator-group.cc
+++ b/lily/translator-group.cc
@@ -12,7 +12,6 @@
 #include "debug.hh"
 #include "moment.hh"
 #include "scm-hash.hh"
-#include "killing-cons.tcc"
 #include "translator-def.hh"
 
 Translator_group::Translator_group (Translator_group const&s)
diff --git a/lily/unfolded-repeat-iterator.cc b/lily/unfolded-repeat-iterator.cc
index 93bc97d5f3..56c6195aed 100644
--- a/lily/unfolded-repeat-iterator.cc
+++ b/lily/unfolded-repeat-iterator.cc
@@ -120,7 +120,7 @@ the  alternative just set.
 void
 Unfolded_repeat_iterator::next_element (bool side_effect) 
 {
-  Repeated_music * repmus =dynamic_cast<Repeated_music *> (music_l_);
+  Repeated_music * repmus =dynamic_cast<Repeated_music *> (music_l ());
   delete current_iter_p_;
   current_iter_p_ =0;
 
@@ -256,7 +256,7 @@ Unfolded_repeat_iterator::pending_moment () const
 void
 Unfolded_repeat_iterator::construct_children ()
 {
-  Repeated_music * mus =dynamic_cast<Repeated_music *> (music_l_);
+  Repeated_music * mus =dynamic_cast<Repeated_music *> (music_l ());
   
   alternative_cons_ = (mus->alternatives ())
     ? mus->alternatives ()->music_list ()
diff --git a/ly/a4-init.ly b/ly/a4-init.ly
new file mode 100644
index 0000000000..8c729c5f5b
--- /dev/null
+++ b/ly/a4-init.ly
@@ -0,0 +1,5 @@
+\version "1.3.146"
+% a4.ly
+
+hsize = 210.0 \mm
+vsize = 296.9 \mm
diff --git a/ly/a4.ly b/ly/a4.ly
deleted file mode 100644
index 8c729c5f5b..0000000000
--- a/ly/a4.ly
+++ /dev/null
@@ -1,5 +0,0 @@
-\version "1.3.146"
-% a4.ly
-
-hsize = 210.0 \mm
-vsize = 296.9 \mm
diff --git a/ly/accordion-defs-init.ly b/ly/accordion-defs-init.ly
new file mode 100644
index 0000000000..f363efc71d
--- /dev/null
+++ b/ly/accordion-defs-init.ly
@@ -0,0 +1,56 @@
+\version "1.3.146"
+% Symbols needed to print accordion music
+% 
+%  2' = T
+%  4' = F
+%  8' = E
+% 16' = S
+%
+
+accDiscant = \script "accDiscant"
+accDiscantF = \script "accDiscantF"
+accDiscantE = \script "accDiscantE"
+accDiscantEh = \script "accDiscantEh"
+accDiscantFE = \script "accDiscantFE"
+accDiscantFEh = \script "accDiscantFEh"
+accDiscantEE = \script "accDiscantEE"
+accDiscantFEE = \script "accDiscantFEE"
+accDiscantEEE = \script "accDiscantEEE"
+accDiscantFEEE = \script "accDiscantFEEE"
+accDiscantS = \script "accDiscantS"
+accDiscantFS = \script "accDiscantFS"
+accDiscantES = \script "accDiscantES"
+accDiscantEhS = \script "accDiscantEhS"
+accDiscantFES = \script "accDiscantFES"
+accDiscantFEhS = \script "accDiscantFEhS"
+accDiscantEES = \script "accDiscantEES"
+accDiscantFEES = \script "accDiscantFEES"
+accDiscantEEES = \script "accDiscantEEES"
+accDiscantFEEES = \script "accDiscantFEEES"
+accDiscantSS = \script "accDiscantSS"
+accDiscantESS = \script "accDiscantESS"
+accDiscantEESS = \script "accDiscantEESS"
+accDiscantEEESS = \script "accDiscantEEESS"
+
+accFreebase = \script "accFreebase"
+accFreebaseF = \script "accFreebaseF"
+accFreebaseE = \script "accFreebaseE"
+accFreebaseFE = \script "accFreebaseFE"
+
+accBayanbase = \script "accBayanbase"
+accBayanbaseT = \script "accBayanbaseT"
+accBayanbaseE = \script "accBayanbaseE"
+accBayanbaseTE = \script "accBayanbaseTE"
+accBayanbaseEE = \script "accBayanbaseEE"
+accBayanbaseTEE = \script "accBayanbaseTEE"
+
+accStdbase = \script "accStdbase"
+accStdbaseFE = \script "accStdbaseFE"
+accStdbaseTFE = \script "accStdbaseTFE"
+accStdbaseMES = \script "accStdbaseMES"
+accStdbaseTFMES = \script "accStdbaseTFMES"
+
+accSB = \script "accSB"
+accBB = \script "accBB"
+accOldEE = \script "accOldEE"
+accOldEES = \script "accOldEES"
diff --git a/ly/accordion-defs.ly b/ly/accordion-defs.ly
deleted file mode 100644
index f363efc71d..0000000000
--- a/ly/accordion-defs.ly
+++ /dev/null
@@ -1,56 +0,0 @@
-\version "1.3.146"
-% Symbols needed to print accordion music
-% 
-%  2' = T
-%  4' = F
-%  8' = E
-% 16' = S
-%
-
-accDiscant = \script "accDiscant"
-accDiscantF = \script "accDiscantF"
-accDiscantE = \script "accDiscantE"
-accDiscantEh = \script "accDiscantEh"
-accDiscantFE = \script "accDiscantFE"
-accDiscantFEh = \script "accDiscantFEh"
-accDiscantEE = \script "accDiscantEE"
-accDiscantFEE = \script "accDiscantFEE"
-accDiscantEEE = \script "accDiscantEEE"
-accDiscantFEEE = \script "accDiscantFEEE"
-accDiscantS = \script "accDiscantS"
-accDiscantFS = \script "accDiscantFS"
-accDiscantES = \script "accDiscantES"
-accDiscantEhS = \script "accDiscantEhS"
-accDiscantFES = \script "accDiscantFES"
-accDiscantFEhS = \script "accDiscantFEhS"
-accDiscantEES = \script "accDiscantEES"
-accDiscantFEES = \script "accDiscantFEES"
-accDiscantEEES = \script "accDiscantEEES"
-accDiscantFEEES = \script "accDiscantFEEES"
-accDiscantSS = \script "accDiscantSS"
-accDiscantESS = \script "accDiscantESS"
-accDiscantEESS = \script "accDiscantEESS"
-accDiscantEEESS = \script "accDiscantEEESS"
-
-accFreebase = \script "accFreebase"
-accFreebaseF = \script "accFreebaseF"
-accFreebaseE = \script "accFreebaseE"
-accFreebaseFE = \script "accFreebaseFE"
-
-accBayanbase = \script "accBayanbase"
-accBayanbaseT = \script "accBayanbaseT"
-accBayanbaseE = \script "accBayanbaseE"
-accBayanbaseTE = \script "accBayanbaseTE"
-accBayanbaseEE = \script "accBayanbaseEE"
-accBayanbaseTEE = \script "accBayanbaseTEE"
-
-accStdbase = \script "accStdbase"
-accStdbaseFE = \script "accStdbaseFE"
-accStdbaseTFE = \script "accStdbaseTFE"
-accStdbaseMES = \script "accStdbaseMES"
-accStdbaseTFMES = \script "accStdbaseTFMES"
-
-accSB = \script "accSB"
-accBB = \script "accBB"
-accOldEE = \script "accOldEE"
-accOldEES = \script "accOldEES"
diff --git a/ly/book-init-init.ly b/ly/book-init-init.ly
new file mode 100644
index 0000000000..f12fc8683b
--- /dev/null
+++ b/ly/book-init-init.ly
@@ -0,0 +1,14 @@
+% Toplevel initialisation file. 
+	
+\version "1.3.146"
+
+
+\include "declarations-init.ly"
+\include "paper16-init.ly"
+
+ \paper{
+	\paperSixteen
+}
+
+
+\maininput
diff --git a/ly/book-init.ly b/ly/book-init.ly
deleted file mode 100644
index f6c865109d..0000000000
--- a/ly/book-init.ly
+++ /dev/null
@@ -1,14 +0,0 @@
-% Toplevel initialisation file. 
-	
-\version "1.3.146"
-
-
-\include "declarations.ly"
-\include "paper16.ly"
-
- \paper{
-	\paperSixteen
-}
-
-
-\maininput
diff --git a/ly/center-init.ly b/ly/center-init.ly
new file mode 100644
index 0000000000..72ecace841
--- /dev/null
+++ b/ly/center-init.ly
@@ -0,0 +1,15 @@
+% Toplevel initialisation file. 
+	
+\version "1.3.146"
+
+
+\include "declarations-init.ly"
+\include "paper16-init.ly"
+
+ \paper { 
+  \paperSixteen
+%  linewidth = 7.\cm
+  linewidth = 11.\cm
+}
+
+\maininput
diff --git a/ly/center.ly b/ly/center.ly
deleted file mode 100644
index c3730fbbe8..0000000000
--- a/ly/center.ly
+++ /dev/null
@@ -1,15 +0,0 @@
-% Toplevel initialisation file. 
-	
-\version "1.3.146"
-
-
-\include "declarations.ly"
-\include "paper16.ly"
-
- \paper { 
-  \paperSixteen
-%  linewidth = 7.\cm
-  linewidth = 11.\cm
-}
-
-\maininput
diff --git a/ly/chord-modifiers-init.ly b/ly/chord-modifiers-init.ly
new file mode 100644
index 0000000000..dd82fdb331
--- /dev/null
+++ b/ly/chord-modifiers-init.ly
@@ -0,0 +1,17 @@
+\version "1.3.146"
+
+% urg!
+%
+\chordmodifiers #`(
+	(m . ,(make-pitch 0 2 -1 ))
+	(min . ,(make-pitch 0 2 -1 ))
+	(aug . ,(make-pitch 0 4 1 ))
+	;; (dim . ,(make-pitch -100 4 -1 ))	
+	(dim . ,(make-pitch -100 2 -1 ))
+	;; urg, not actually a chord-modifier, but it works
+	;;  c7 -> <c bes>, c 7+ -> c b
+	(maj . ,(make-pitch 0 6 1 ))
+	;; sus4 should delete 2 too...
+	(sus . ,(make-pitch 0 3 0 ))
+)
+
diff --git a/ly/chord-modifiers.ly b/ly/chord-modifiers.ly
deleted file mode 100644
index dd82fdb331..0000000000
--- a/ly/chord-modifiers.ly
+++ /dev/null
@@ -1,17 +0,0 @@
-\version "1.3.146"
-
-% urg!
-%
-\chordmodifiers #`(
-	(m . ,(make-pitch 0 2 -1 ))
-	(min . ,(make-pitch 0 2 -1 ))
-	(aug . ,(make-pitch 0 4 1 ))
-	;; (dim . ,(make-pitch -100 4 -1 ))	
-	(dim . ,(make-pitch -100 2 -1 ))
-	;; urg, not actually a chord-modifier, but it works
-	;;  c7 -> <c bes>, c 7+ -> c b
-	(maj . ,(make-pitch 0 6 1 ))
-	;; sus4 should delete 2 too...
-	(sus . ,(make-pitch 0 3 0 ))
-)
-
diff --git a/ly/declarations-init.ly b/ly/declarations-init.ly
new file mode 100644
index 0000000000..c200465244
--- /dev/null
+++ b/ly/declarations-init.ly
@@ -0,0 +1,56 @@
+
+\version "1.3.146"
+breve = \duration #(make-duration -1 0)
+longa = \duration #(make-duration -2 0 )
+maxima = \duration #(make-duration -3 0)
+
+\include "nederlands.ly"		% dutch
+\include "chord-modifiers-init.ly"
+\include "script-init.ly"
+
+% declarations for standard directions
+left = -1
+right = 1
+up = 1
+down = -1
+start = -1
+stop = 1
+smaller = -1
+bigger = 1
+center=0
+
+break =  \penalty  #-10000
+noBreak =  \penalty #10000
+\include "scale-definitions-init.ly"
+
+melisma = \property Staff.melismaBusy = ##t
+melismaEnd = \property Staff.melismaBusy = ##f
+
+
+\include "engraver-init.ly"
+\include "grace-init.ly"
+
+singleLine = \paper { linewidth = 1. }
+
+% ugh
+\include "midi-init.ly"
+
+papersize = "a4"
+paperfile = \papersize + "-init.ly"
+
+\include "generic-paper-init.ly"
+\include "paper20-init.ly"
+
+
+\include "dynamic-scripts-init.ly"
+\include "spanners-init.ly"
+
+\include "property-init.ly"
+
+
+
+% reset default duration
+unusedEntry = \notes { c4 }	
+
+% music = "\melodic\relative c"
+
diff --git a/ly/declarations.ly b/ly/declarations.ly
deleted file mode 100644
index 0bb5e95a6a..0000000000
--- a/ly/declarations.ly
+++ /dev/null
@@ -1,55 +0,0 @@
-
-\version "1.3.146"
-breve = \duration #(make-duration -1 0)
-longa = \duration #(make-duration -2 0 )
-maxima = \duration #(make-duration -3 0)
-
-\include "nederlands.ly"		% dutch
-\include "chord-modifiers.ly"
-\include "script.ly"
-
-% declarations for standard directions
-left = -1
-right = 1
-up = 1
-down = -1
-start = -1
-stop = 1
-smaller = -1
-bigger = 1
-center=0
-
-break =  \penalty  #-10000
-noBreak =  \penalty #10000
-\include "scale-definitions.ly"
-
-melisma = \property Staff.melismaBusy = ##t
-melismaEnd = \property Staff.melismaBusy = ##f
-
-
-\include "engraver.ly"
-
-singleLine = \paper { linewidth = 1. }
-
-% ugh
-\include "midi.ly"
-
-papersize = "a4"
-paperfile = \papersize + ".ly"
-
-\include "generic-paper.ly"
-\include "paper20.ly"
-
-
-\include "dynamic-scripts.ly"
-\include "spanners.ly"
-
-\include "property.ly"
-
-
-
-% reset default duration
-unusedEntry = \notes { c4 }	
-
-% music = "\melodic\relative c"
-
diff --git a/ly/drumpitch-init.ly b/ly/drumpitch-init.ly
new file mode 100644
index 0000000000..b55e8bb1f4
--- /dev/null
+++ b/ly/drumpitch-init.ly
@@ -0,0 +1,160 @@
+% GM drum pitches.
+% I use different accidentals to distinguish drums at the same GM pitch.
+% Always accidental 0 (white keys) or 1 (black keys) to get the "correct" gm name.
+% i.e. fis, for closed highat  ges, for highat.
+
+% 2001/03/25 Rune Zedeler <rune@zedeler.dk>
+
+
+%% TODO: don't pollute global namespace in this way . 
+
+
+#(define drum-pitch-names `(
+	(acousticbassdrum bda	,(make-pitch -3 6 0 ))
+	(bassdrum	  bd	,(make-pitch -2 0 0 ))
+	(hisidestick	  ssh	,(make-pitch -3 6 2))
+	(sidestick	  ss	,(make-pitch -2 0 1))
+	(losidestick	  ssl	,(make-pitch -2 1 -1))
+	(acousticsnare	  sna	,(make-pitch -2 1 0))
+	(snare		  sn	,(make-pitch -2 2 -2))
+	(handclap	  hc	,(make-pitch -2 1 1))
+	(electricsnare	  sne	,(make-pitch -2 2 0))
+	(lowfloortom	  tomfl	,(make-pitch -2 3 0))
+	(closedhihat	  hhc	,(make-pitch -2 3 1))
+	(hihat		  hh	,(make-pitch -2 4 -1))
+	(highfloortom	  tomfh	,(make-pitch -2 4 0))
+	(pedalhihat	  hhp	,(make-pitch -2 4 1))
+	(lowtom		  toml	,(make-pitch -2 5 0))
+	(openhihat	  hho	,(make-pitch -2 5 1))
+	(halfopenhihat	  hhho	,(make-pitch -2 5 1))
+	(lowmidtom	  tomml	,(make-pitch -2 6 0))
+	(himidtom	  tommh	,(make-pitch -1 0 0))
+	(crashcymbala	  cymca	,(make-pitch -1 0 1))
+	(crashcymbal	  cymc	,(make-pitch -1 1 -1))
+	(hightom	  tomh	,(make-pitch -1 1 0))
+	(ridecymbala	  cymra	,(make-pitch -1 1 1))
+	(ridecymbal	  cymr	,(make-pitch -1 2 -1))
+	(chinesecymbal	  cymch	,(make-pitch -1 2 0))
+	(ridebell	  rb	,(make-pitch -1 3 0))
+	(tambourine	  tamb	,(make-pitch -1 3 1))
+	(splashcymbal	  cyms	,(make-pitch -1 4 0))
+	(cowbell	  cb	,(make-pitch -1 4 1))
+	(crashcymbalb	  cymcb	,(make-pitch -1 5 0))
+	(vibraslap	  vibs	,(make-pitch -1 5 1))
+	(ridecymbalb	  cymrb	,(make-pitch -1 6 0))
+	(hibongo	  boh	,(make-pitch 0 0 0))
+	(lobongo	  bol	,(make-pitch 0 0 1))
+	(mutehiconga	  cghm	,(make-pitch 0 1 0))
+	(openhiconga	  cgho	,(make-pitch 0 1 1))
+	(hiconga	  cgh	,(make-pitch 0 2 -1))
+ (openloconga      cglo  ,(make-pitch 0 1 2))
+	(loconga	  cgl	,(make-pitch 0 2 0))
+	(hitimbale	  timh	,(make-pitch 0 3 0))
+	(lotimbale	  timl	,(make-pitch 0 3 1))
+	(hiagogo	  agh	,(make-pitch 0 4 0))
+	(loagogo	  agl	,(make-pitch 0 4 1))
+	(cabasa		  cab	,(make-pitch 0 5 0))
+	(maracas	  mar	,(make-pitch 0 5 1))
+	(shortwhistle	  whs	,(make-pitch 0 6 0))
+	(longwhistle	  whl	,(make-pitch 1 0 0))
+	(shortguiro	  guis	,(make-pitch 1 0 1))
+	(longguiro	  guil	,(make-pitch 1 1 0))
+	(guiro		  gui	,(make-pitch 1 0 2))
+	(claves		  cl	,(make-pitch 1 1 1))
+	(hiwoodblock	  wbh	,(make-pitch 1 2 0))
+	(lowoodblock	  wbl	,(make-pitch 1 3 0))
+	(mutecuica	  cuim	,(make-pitch 1 3 1))
+	(opencuica	  cuio	,(make-pitch 1 4 0))
+	(mutetriangle	  trim	,(make-pitch 1 4 1))
+	(triangle	  tri	,(make-pitch 1 4 2))
+	(opentriangle	  trio	,(make-pitch 1 5 0))
+	;; "transposing" pitches:
+	(oneup		  ua	,(make-pitch 0 1 0))
+	(twoup		  ub	,(make-pitch 0 2 0))
+	(threeup	  uc	,(make-pitch 0 3 0))
+	(fourup		  ud	,(make-pitch 0 4 0))
+	(fiveup		  ue	,(make-pitch 0 5 0))
+	(onedown	  da	,(make-pitch -1 6 0))
+	(twodown	  db	,(make-pitch -1 5 0))
+	(threedown	  dc	,(make-pitch -1 4 0))
+	(fourdown	  dd	,(make-pitch -1 3 0))
+	(fivedown	  de	,(make-pitch -1 2 0))
+))
+
+#(define drums `(
+	(acousticbassdrum default 	,#f	  ,(make-pitch -1 4 0))
+	(bassdrum	  default 	,#f	  ,(make-pitch -1 4 0))
+	(sidestick	  cross		,#f	  ,(make-pitch 0 1 0))
+	(acousticsnare	  default 	,#f	  ,(make-pitch 0 1 0))
+	(snare		  default 	,#f	  ,(make-pitch 0 1 0))
+	(handclap	  triangle	,#f	  ,(make-pitch 0 1 0))
+	(electricsnare	  default 	,#f	  ,(make-pitch 0 1 0))
+	(lowfloortom	  default 	,#f	  ,(make-pitch -1 3 0))
+	(closedhihat	  cross		"stopped" ,(make-pitch 0 3 0))
+	(hihat		  cross		,#f	  ,(make-pitch 0 3 0))
+	(highfloortom	  default 	,#f	  ,(make-pitch -1 5 0))
+	(pedalhihat	  cross		,#f	  ,(make-pitch -1 2 0))
+	(lowtom		  default 	,#f	  ,(make-pitch 0 0 0))
+	(openhihat	  cross		"open"	  ,(make-pitch 0 3 0))
+	(halfopenhihat	  xcircle	,#f	  ,(make-pitch 0 3 0))
+	(lowmidtom	  default 	,#f	  ,(make-pitch 0 1 0))
+	(himidtom	  default 	,#f	  ,(make-pitch 0 2 0))
+	(crashcymbala	  xcircle 	,#f	  ,(make-pitch 0 5 0))
+	(crashcymbal	  xcircle 	,#f	  ,(make-pitch 0 5 0))
+	(hightom	  default 	,#f	  ,(make-pitch 0 4 0))
+	(ridecymbala	  cross		,#f	  ,(make-pitch 0 5 0))
+	(ridecymbal	  cross		,#f	  ,(make-pitch 0 5 0))
+	(chinesecymbal	  mensural 	,#f	  ,(make-pitch 0 5 0))
+	(ridebell	  default	,#f	  ,(make-pitch 0 5 0))
+	(splashcymbal	  diamond 	,#f	  ,(make-pitch 0 5 0))
+	(cowbell	  triangle	,#f	  ,(make-pitch 0 5 0))
+	(crashcymbalb	  cross		,#f	  ,(make-pitch 0 5 0))
+	(vibraslap	  diamond 	,#f	  ,(make-pitch 0 4 0))
+	(ridecymbalb	  cross		,#f	  ,(make-pitch 0 5 0))
+ ))
+
+#(define timbales `(
+	(losidestick	  cross		,#f	  ,(make-pitch -1 6 0))
+	(lotimbale	  default	,#f	  ,(make-pitch -1 6 0))
+	(cowbell	  triangle	,#f	  ,(make-pitch 0 0 0))
+	(hisidestick	  cross		,#f	  ,(make-pitch 0 1 0))
+	(hitimbale	  default	,#f	  ,(make-pitch 0 1 0))
+ ))
+
+#(define congas `(
+	(losidestick	  cross		,#f	  ,(make-pitch -1 6 0))
+	(loconga	  default	,#f	  ,(make-pitch -1 6 0))
+	(openloconga      default       ,"open"   ,(make-pitch -1 6 0))
+	(hisidestick	  cross		,#f	  ,(make-pitch 0 1 0))
+	(hiconga	  default	,#f	  ,(make-pitch 0 1 0))
+	(openhiconga      default       "open"    ,(make-pitch 0 1 0))
+        (mutehiconga      default       "stopped" ,(make-pitch 0 1 0))
+  
+ ))
+
+#(define bongos `(
+	(lobongo	  default	,#f	  ,(make-pitch -1 6 0))
+	(hibongo	  default	,#f	  ,(make-pitch 0 1 0))
+ ))
+
+#(define guiro `(
+	(shortguiro	  default	"staccato",(make-pitch 0 0 0))
+	(longguiro	  default	"tenuto"  ,(make-pitch 0 0 0))
+	(guiro		  default	,#f	  ,(make-pitch 0 0 0))
+ ))
+
+#(define triangle `(
+	(opentriangle	  cross		"open"	  ,(make-pitch 0 0 0))
+	(mutetriangle	  cross		"stopped" ,(make-pitch 0 0 0))
+	(triangle	  cross		,#f	  ,(make-pitch 0 0 0))
+ ))
+
+
+
+\pitchnames
+#(append (map (lambda (x) (cons (car x) (caddr x))) drum-pitch-names)
+	 (map (lambda (x) (cons (cadr x) (caddr x))) drum-pitch-names)
+ )
+
+
+\version "1.3.146"
diff --git a/ly/drumpitch.ly b/ly/drumpitch.ly
deleted file mode 100644
index b55e8bb1f4..0000000000
--- a/ly/drumpitch.ly
+++ /dev/null
@@ -1,160 +0,0 @@
-% GM drum pitches.
-% I use different accidentals to distinguish drums at the same GM pitch.
-% Always accidental 0 (white keys) or 1 (black keys) to get the "correct" gm name.
-% i.e. fis, for closed highat  ges, for highat.
-
-% 2001/03/25 Rune Zedeler <rune@zedeler.dk>
-
-
-%% TODO: don't pollute global namespace in this way . 
-
-
-#(define drum-pitch-names `(
-	(acousticbassdrum bda	,(make-pitch -3 6 0 ))
-	(bassdrum	  bd	,(make-pitch -2 0 0 ))
-	(hisidestick	  ssh	,(make-pitch -3 6 2))
-	(sidestick	  ss	,(make-pitch -2 0 1))
-	(losidestick	  ssl	,(make-pitch -2 1 -1))
-	(acousticsnare	  sna	,(make-pitch -2 1 0))
-	(snare		  sn	,(make-pitch -2 2 -2))
-	(handclap	  hc	,(make-pitch -2 1 1))
-	(electricsnare	  sne	,(make-pitch -2 2 0))
-	(lowfloortom	  tomfl	,(make-pitch -2 3 0))
-	(closedhihat	  hhc	,(make-pitch -2 3 1))
-	(hihat		  hh	,(make-pitch -2 4 -1))
-	(highfloortom	  tomfh	,(make-pitch -2 4 0))
-	(pedalhihat	  hhp	,(make-pitch -2 4 1))
-	(lowtom		  toml	,(make-pitch -2 5 0))
-	(openhihat	  hho	,(make-pitch -2 5 1))
-	(halfopenhihat	  hhho	,(make-pitch -2 5 1))
-	(lowmidtom	  tomml	,(make-pitch -2 6 0))
-	(himidtom	  tommh	,(make-pitch -1 0 0))
-	(crashcymbala	  cymca	,(make-pitch -1 0 1))
-	(crashcymbal	  cymc	,(make-pitch -1 1 -1))
-	(hightom	  tomh	,(make-pitch -1 1 0))
-	(ridecymbala	  cymra	,(make-pitch -1 1 1))
-	(ridecymbal	  cymr	,(make-pitch -1 2 -1))
-	(chinesecymbal	  cymch	,(make-pitch -1 2 0))
-	(ridebell	  rb	,(make-pitch -1 3 0))
-	(tambourine	  tamb	,(make-pitch -1 3 1))
-	(splashcymbal	  cyms	,(make-pitch -1 4 0))
-	(cowbell	  cb	,(make-pitch -1 4 1))
-	(crashcymbalb	  cymcb	,(make-pitch -1 5 0))
-	(vibraslap	  vibs	,(make-pitch -1 5 1))
-	(ridecymbalb	  cymrb	,(make-pitch -1 6 0))
-	(hibongo	  boh	,(make-pitch 0 0 0))
-	(lobongo	  bol	,(make-pitch 0 0 1))
-	(mutehiconga	  cghm	,(make-pitch 0 1 0))
-	(openhiconga	  cgho	,(make-pitch 0 1 1))
-	(hiconga	  cgh	,(make-pitch 0 2 -1))
- (openloconga      cglo  ,(make-pitch 0 1 2))
-	(loconga	  cgl	,(make-pitch 0 2 0))
-	(hitimbale	  timh	,(make-pitch 0 3 0))
-	(lotimbale	  timl	,(make-pitch 0 3 1))
-	(hiagogo	  agh	,(make-pitch 0 4 0))
-	(loagogo	  agl	,(make-pitch 0 4 1))
-	(cabasa		  cab	,(make-pitch 0 5 0))
-	(maracas	  mar	,(make-pitch 0 5 1))
-	(shortwhistle	  whs	,(make-pitch 0 6 0))
-	(longwhistle	  whl	,(make-pitch 1 0 0))
-	(shortguiro	  guis	,(make-pitch 1 0 1))
-	(longguiro	  guil	,(make-pitch 1 1 0))
-	(guiro		  gui	,(make-pitch 1 0 2))
-	(claves		  cl	,(make-pitch 1 1 1))
-	(hiwoodblock	  wbh	,(make-pitch 1 2 0))
-	(lowoodblock	  wbl	,(make-pitch 1 3 0))
-	(mutecuica	  cuim	,(make-pitch 1 3 1))
-	(opencuica	  cuio	,(make-pitch 1 4 0))
-	(mutetriangle	  trim	,(make-pitch 1 4 1))
-	(triangle	  tri	,(make-pitch 1 4 2))
-	(opentriangle	  trio	,(make-pitch 1 5 0))
-	;; "transposing" pitches:
-	(oneup		  ua	,(make-pitch 0 1 0))
-	(twoup		  ub	,(make-pitch 0 2 0))
-	(threeup	  uc	,(make-pitch 0 3 0))
-	(fourup		  ud	,(make-pitch 0 4 0))
-	(fiveup		  ue	,(make-pitch 0 5 0))
-	(onedown	  da	,(make-pitch -1 6 0))
-	(twodown	  db	,(make-pitch -1 5 0))
-	(threedown	  dc	,(make-pitch -1 4 0))
-	(fourdown	  dd	,(make-pitch -1 3 0))
-	(fivedown	  de	,(make-pitch -1 2 0))
-))
-
-#(define drums `(
-	(acousticbassdrum default 	,#f	  ,(make-pitch -1 4 0))
-	(bassdrum	  default 	,#f	  ,(make-pitch -1 4 0))
-	(sidestick	  cross		,#f	  ,(make-pitch 0 1 0))
-	(acousticsnare	  default 	,#f	  ,(make-pitch 0 1 0))
-	(snare		  default 	,#f	  ,(make-pitch 0 1 0))
-	(handclap	  triangle	,#f	  ,(make-pitch 0 1 0))
-	(electricsnare	  default 	,#f	  ,(make-pitch 0 1 0))
-	(lowfloortom	  default 	,#f	  ,(make-pitch -1 3 0))
-	(closedhihat	  cross		"stopped" ,(make-pitch 0 3 0))
-	(hihat		  cross		,#f	  ,(make-pitch 0 3 0))
-	(highfloortom	  default 	,#f	  ,(make-pitch -1 5 0))
-	(pedalhihat	  cross		,#f	  ,(make-pitch -1 2 0))
-	(lowtom		  default 	,#f	  ,(make-pitch 0 0 0))
-	(openhihat	  cross		"open"	  ,(make-pitch 0 3 0))
-	(halfopenhihat	  xcircle	,#f	  ,(make-pitch 0 3 0))
-	(lowmidtom	  default 	,#f	  ,(make-pitch 0 1 0))
-	(himidtom	  default 	,#f	  ,(make-pitch 0 2 0))
-	(crashcymbala	  xcircle 	,#f	  ,(make-pitch 0 5 0))
-	(crashcymbal	  xcircle 	,#f	  ,(make-pitch 0 5 0))
-	(hightom	  default 	,#f	  ,(make-pitch 0 4 0))
-	(ridecymbala	  cross		,#f	  ,(make-pitch 0 5 0))
-	(ridecymbal	  cross		,#f	  ,(make-pitch 0 5 0))
-	(chinesecymbal	  mensural 	,#f	  ,(make-pitch 0 5 0))
-	(ridebell	  default	,#f	  ,(make-pitch 0 5 0))
-	(splashcymbal	  diamond 	,#f	  ,(make-pitch 0 5 0))
-	(cowbell	  triangle	,#f	  ,(make-pitch 0 5 0))
-	(crashcymbalb	  cross		,#f	  ,(make-pitch 0 5 0))
-	(vibraslap	  diamond 	,#f	  ,(make-pitch 0 4 0))
-	(ridecymbalb	  cross		,#f	  ,(make-pitch 0 5 0))
- ))
-
-#(define timbales `(
-	(losidestick	  cross		,#f	  ,(make-pitch -1 6 0))
-	(lotimbale	  default	,#f	  ,(make-pitch -1 6 0))
-	(cowbell	  triangle	,#f	  ,(make-pitch 0 0 0))
-	(hisidestick	  cross		,#f	  ,(make-pitch 0 1 0))
-	(hitimbale	  default	,#f	  ,(make-pitch 0 1 0))
- ))
-
-#(define congas `(
-	(losidestick	  cross		,#f	  ,(make-pitch -1 6 0))
-	(loconga	  default	,#f	  ,(make-pitch -1 6 0))
-	(openloconga      default       ,"open"   ,(make-pitch -1 6 0))
-	(hisidestick	  cross		,#f	  ,(make-pitch 0 1 0))
-	(hiconga	  default	,#f	  ,(make-pitch 0 1 0))
-	(openhiconga      default       "open"    ,(make-pitch 0 1 0))
-        (mutehiconga      default       "stopped" ,(make-pitch 0 1 0))
-  
- ))
-
-#(define bongos `(
-	(lobongo	  default	,#f	  ,(make-pitch -1 6 0))
-	(hibongo	  default	,#f	  ,(make-pitch 0 1 0))
- ))
-
-#(define guiro `(
-	(shortguiro	  default	"staccato",(make-pitch 0 0 0))
-	(longguiro	  default	"tenuto"  ,(make-pitch 0 0 0))
-	(guiro		  default	,#f	  ,(make-pitch 0 0 0))
- ))
-
-#(define triangle `(
-	(opentriangle	  cross		"open"	  ,(make-pitch 0 0 0))
-	(mutetriangle	  cross		"stopped" ,(make-pitch 0 0 0))
-	(triangle	  cross		,#f	  ,(make-pitch 0 0 0))
- ))
-
-
-
-\pitchnames
-#(append (map (lambda (x) (cons (car x) (caddr x))) drum-pitch-names)
-	 (map (lambda (x) (cons (cadr x) (caddr x))) drum-pitch-names)
- )
-
-
-\version "1.3.146"
diff --git a/ly/dynamic-scripts-init.ly b/ly/dynamic-scripts-init.ly
new file mode 100644
index 0000000000..0f2f3e6b24
--- /dev/null
+++ b/ly/dynamic-scripts-init.ly
@@ -0,0 +1,27 @@
+\version "1.3.146"
+
+%
+% declare the standard dynamic identifiers.
+%
+ppppp = \dynamicscript #"ppppp"
+pppp = \dynamicscript #"pppp"
+ppp = \dynamicscript #"ppp"
+pp = \dynamicscript #"pp"
+p = \dynamicscript #"p"
+mp = \dynamicscript #"mp"
+mf = \dynamicscript #"mf"
+f = \dynamicscript #"e"			% see feta-din layout
+ff = \dynamicscript #"ff"
+fff = \dynamicscript #"fff"
+ffff = \dynamicscript #"ffff"
+fp = \dynamicscript #"fp"
+
+sf = \dynamicscript #"sf"
+sfp = \dynamicscript #"sfp"
+sff = \dynamicscript #"sff"
+sfz = \dynamicscript #"sfz"
+fz = \dynamicscript #"fz"
+sp = \dynamicscript #"sp"
+spp = \dynamicscript #"spp"
+rfz = \dynamicscript #"rfz"
+
diff --git a/ly/dynamic-scripts.ly b/ly/dynamic-scripts.ly
deleted file mode 100644
index 0f2f3e6b24..0000000000
--- a/ly/dynamic-scripts.ly
+++ /dev/null
@@ -1,27 +0,0 @@
-\version "1.3.146"
-
-%
-% declare the standard dynamic identifiers.
-%
-ppppp = \dynamicscript #"ppppp"
-pppp = \dynamicscript #"pppp"
-ppp = \dynamicscript #"ppp"
-pp = \dynamicscript #"pp"
-p = \dynamicscript #"p"
-mp = \dynamicscript #"mp"
-mf = \dynamicscript #"mf"
-f = \dynamicscript #"e"			% see feta-din layout
-ff = \dynamicscript #"ff"
-fff = \dynamicscript #"fff"
-ffff = \dynamicscript #"ffff"
-fp = \dynamicscript #"fp"
-
-sf = \dynamicscript #"sf"
-sfp = \dynamicscript #"sfp"
-sff = \dynamicscript #"sff"
-sfz = \dynamicscript #"sfz"
-fz = \dynamicscript #"fz"
-sp = \dynamicscript #"sp"
-spp = \dynamicscript #"spp"
-rfz = \dynamicscript #"rfz"
-
diff --git a/ly/engraver-init.ly b/ly/engraver-init.ly
new file mode 100644
index 0000000000..968fd4b11e
--- /dev/null
+++ b/ly/engraver-init.ly
@@ -0,0 +1,413 @@
+\version "1.3.146"
+
+%
+% setup for Request->Element conversion. Guru-only
+%
+
+StaffContext=\translator {
+	\type "Engraver_group_engraver"
+	\name Staff 
+	\consists "Output_property_engraver"	
+	Generic_property_list = #generic-staff-properties
+	
+	\consists "Bar_engraver"
+ % Bar_engraver must be first so default bars aren't overwritten
+% with empty ones.
+	\consists "Font_size_engraver"
+
+%	\consists "Repeat_engraver"
+	\consists "Volta_engraver"
+	\consists "Separating_line_group_engraver"	
+
+
+
+	\consists "Clef_engraver"
+	\consists "Key_engraver"
+	\consists "Time_signature_engraver"
+	\consists "Staff_symbol_engraver"
+	\consists "Collision_engraver"
+	\consists "Rest_collision_engraver"
+	\consists "Local_key_engraver"
+	\consists "Piano_pedal_engraver"
+	\consists "Instrument_name_engraver"
+
+	\consistsend "Axis_group_engraver"
+	
+	MinimumVerticalExtent = #'(-4 . 4)
+	ExtraVerticalExtent = ##f
+	VerticalExtent = ##f 
+
+	% explicitly set instrument, so we don't get 
+	% weird effects when doing instrument names for
+	% piano staffs
+
+	instrument = ##f
+	instr = ##f
+	  
+	\accepts "Voice"
+}
+
+
+StaffContainerContext = \translator {
+	\type Engraver_group_engraver
+	\consists "Axis_group_engraver"
+	MinimumVerticalExtent = ##f
+	ExtraVerticalExtent = ##f
+	VerticalExtent = ##f 
+	
+	\accepts Staff
+	\name StaffContainer
+}
+
+InnerChoirStaffContext = \translator {
+	\type "Engraver_group_engraver"
+	\name InnerChoirStaff
+	alignmentReference = #0
+	\consists "System_start_delimiter_engraver"
+	SystemStartDelimiter \override #'glyph = #'bracket
+
+	\accepts "Staff"
+	\accepts "RhythmicStaff"
+	\accepts "GrandStaff"
+	\accepts "PianoStaff"
+	\accepts "Lyrics"
+	\accepts "ChordNames"
+}
+ChoirStaffContext = \translator {
+	\InnerChoirStaffContext
+	\name ChoirStaff
+	\accepts "InnerChoirStaff"
+	\accepts "InnerStaffGroup"
+}
+
+
+RhythmicStaffContext=\translator{
+	\type "Engraver_group_engraver"
+	
+	\consists "Output_property_engraver"	
+
+	Generic_property_list = #generic-staff-properties
+	MinimumVerticalExtent = ##f
+	ExtraVerticalExtent = ##f
+	VerticalExtent = ##f 
+
+	\consists "Pitch_squash_engraver"
+	\consists "Separating_line_group_engraver"	
+	\name RhythmicStaff
+	\alias "Staff"
+	
+	Bar \override #'bar-size = #4
+	VoltaBracket \override #'minimum-space =  #15  % urg, in \pt
+	VoltaBracket \override #'padding =  #5  % urg, in \pt
+	StaffSymbol \override #'line-count = #1	
+
+%	\consists "Repeat_engraver"
+	\consists "Volta_engraver"
+	\consists "Bar_engraver"
+	\consists "Time_signature_engraver"
+	\consists "Staff_symbol_engraver"
+	\consistsend "Axis_group_engraver"
+	\accepts "Voice"
+}
+
+
+VoiceContext = \translator {
+	\type "Engraver_group_engraver"
+	\name Voice
+
+	Generic_property_list = #generic-voice-properties
+	\consists "Font_size_engraver"
+	
+	% must come before all
+	\consists "Voice_devnull_engraver"
+	\consists "Output_property_engraver"	
+	\consists "Arpeggio_engraver"
+	\consists "Multi_measure_rest_engraver"
+	\consists "Text_spanner_engraver"
+	
+	\consists "Breathing_sign_engraver"
+ 	% \consists "Rest_engraver"
+	\consists "Dot_column_engraver"
+	\consists "Stem_engraver"
+	\consists "Beam_engraver"
+	\consists "Auto_beam_engraver"
+
+	\consists "Chord_tremolo_engraver"
+	\consists "Percent_repeat_engraver"
+	\consists "Melisma_engraver"
+
+%{
+ Must come before text_engraver, but after note_column engraver.
+
+%}
+	\consists "Dynamic_engraver"
+	\consists "Text_engraver"
+
+	\consists "Script_engraver"
+	\consists "Script_column_engraver"
+	\consists "Rhythmic_column_engraver"
+	\consists "Phrasing_slur_engraver"
+	\consists "Slur_engraver"
+	\consists "Tie_engraver"
+	\consists "Tuplet_engraver"
+	\consists "A2_engraver"
+
+	\consists "Skip_req_swallow_translator"
+	\accepts Thread % bug if you leave out this!
+}
+
+ThreadContext = \translator{
+	\type Engraver_group_engraver
+	\name Thread
+
+	\consists "Font_size_engraver"	
+	\consists "Thread_devnull_engraver"
+	\consists "Note_heads_engraver"
+	\consists "Rest_engraver"
+	\consists "Note_head_line_engraver"
+	\consists "Output_property_engraver"	
+	Generic_property_list = #generic-thread-properties
+}
+
+GrandStaffContext=\translator{
+	\type "Engraver_group_engraver"
+	\name GrandStaff
+	\consists "Span_bar_engraver"
+	\consists "Span_arpeggio_engraver"
+	\consists "System_start_delimiter_engraver"
+	SystemStartDelimiter \override #'glyph = #'brace
+	
+	Generic_property_list = #generic-grand-staff-properties
+	\accepts "Staff"
+}
+
+PianoStaffContext = \translator{
+	\GrandStaffContext
+	\name "PianoStaff"
+
+	\consists "Vertical_align_engraver"
+	\consists "Instrument_name_engraver"
+	
+	instrument = ##f
+	instr = ##f
+	
+	verticalAlignmentChildCallback = #Align_interface::fixed_distance_alignment_callback
+	VerticalAlignment \override #'forced-distance = #12
+	VerticalAlignment \override #'self-alignment-Y = #0
+%	\consistsend "Axis_group_engraver"
+}
+
+InnerStaffGroupContext= \translator {
+	\type "Engraver_group_engraver"
+	\name InnerStaffGroup
+
+	\consists "Span_bar_engraver"
+	\consists "Span_arpeggio_engraver"
+	\consists "Output_property_engraver"	
+	SystemStartDelimiter \override #'glyph = #'bracket
+
+	\consists "System_start_delimiter_engraver"
+	\accepts "Staff"
+	\accepts "RhythmicStaff"
+	\accepts "GrandStaff"
+	\accepts "PianoStaff"
+	
+	\accepts "Lyrics"
+	\accepts "ChordNames"
+}
+StaffGroupContext = \translator {
+	\InnerStaffGroupContext
+	\name StaffGroup
+	\accepts "InnerChoirStaff"
+	\accepts "ChoirStaff"
+	\accepts "InnerStaffGroup"
+}
+
+
+% UGH! JUNKME
+LyricsVoiceContext= \translator{
+	\type "Engraver_group_engraver"
+	\consistsend "Axis_group_engraver"
+	MinimumVerticalExtent = #(cons -1.2 1.2)
+	ExtraVerticalExtent = ##f
+	VerticalExtent = ##f 
+	\name LyricsVoice 
+	\consists "Separating_line_group_engraver"
+	\consists "Lyric_engraver"
+	\consists "Extender_engraver"
+	\consists "Hyphen_engraver"
+	\consists "Stanza_number_engraver"
+	phrasingPunctuation = #".,:!?\""
+	
+}
+NoteNamesContext = \translator {
+	\type "Engraver_group_engraver"
+	\name NoteNames
+	\consistsend "Axis_group_engraver"
+
+	MinimumVerticalExtent = ##f
+	ExtraVerticalExtent = ##f
+	VerticalExtent = ##f 
+
+	
+	\consists "Note_name_engraver"
+	\consists "Separating_line_group_engraver"
+}
+
+LyricsContext = \translator {
+	\type "Engraver_group_engraver"
+	\name Lyrics
+	\consists Vertical_align_engraver %need this for getting folded repeats right.
+	Generic_property_list = #generic-lyrics-properties
+
+	\consistsend "Axis_group_engraver"
+	MinimumVerticalExtent = ##f
+	ExtraVerticalExtent = ##f
+	VerticalExtent = ##f 
+	
+	\accepts "LyricsVoice"
+}
+
+
+ChordNamesContext = \translator {
+	\type "Engraver_group_engraver"
+	\name ChordNames
+
+	Generic_property_list = #generic-chord-staff-properties
+
+
+	\consists "Output_property_engraver"	
+	\consists "Separating_line_group_engraver"
+	\consists "Chord_name_engraver"
+	\consists "Skip_req_swallow_translator"
+	\consistsend "Axis_group_engraver"
+	MinimumVerticalExtent = ##f
+	ExtraVerticalExtent = ##f
+	VerticalExtent = ##f 
+
+	VerticalAxisGroup \override #'invisible-staff = ##t
+	}
+
+
+
+StupidScore = \translator {
+ 	\type "Score_engraver"
+	\name Score
+	\consists "Note_heads_engraver"
+}
+
+
+
+
+HaraKiriStaffContext = \translator {
+	\StaffContext
+	\remove "Axis_group_engraver"
+	\consistsend "Hara_kiri_engraver"
+	\consists "Instrument_name_engraver"
+	\accepts "Voice"
+}
+%{
+  The HaraKiriStaffContexts doesn't override \name,
+  so it is still named `Staff'.
+
+  %\translator { \HaraKiriStaffContext }
+%}
+
+
+
+
+ScoreContext = \translator {
+	\type Score_engraver
+	\name Score
+	
+
+	\consists "Repeat_acknowledge_engraver"
+	\consists "Timing_engraver"
+	\consists "Output_property_engraver"
+	\consists "System_start_delimiter_engraver"
+	\consists "Mark_engraver"	
+	\consists "Break_align_engraver"
+	\consists "Spacing_engraver"
+	\consists "Vertical_align_engraver"
+
+	\consists "Lyric_phrasing_engraver"
+	\consists "Bar_number_engraver"
+	\consists "Span_arpeggio_engraver"
+
+	\accepts "Staff"
+	\accepts "StaffContainer"
+	\accepts "StaffGroup"
+	\accepts "RhythmicStaff"	
+	\accepts "Lyrics"
+	\accepts "ChordNames"
+	\accepts "GrandStaff"
+	\accepts "ChoirStaff"
+	\accepts "PianoStaff"
+	\accepts "NoteNames"
+
+	soloText = #"Solo"
+	soloIIText = #"Solo II"
+	aDueText = #"a2"
+	soloADue = ##t
+	splitInterval = #'(0 . 1)
+	changeMoment = #`(,(make-moment 0 0) . ,(make-moment 1 512))
+
+	barAuto = ##t
+	voltaVisibility = ##t
+	%  name, glyph id, clef position 
+	% where is c0 in this clef?
+
+	clefGlyph = #"clefs-G"
+	clefPosition = #-2
+	centralCPosition = #-6
+	
+        automaticPhrasing = ##t
+	alignmentReference = #-1   % \down
+	defaultBarType = #"|"
+
+	explicitClefVisibility = #all-visible
+	explicitKeySignatureVisibility = #all-visible
+	
+	scriptDefinitions = #default-script-alist
+
+	verticalAlignmentChildCallback = #Align_interface::alignment_callback
+
+	pedalSustainStrings = #'("Ped." "*Ped." "*")
+	pedalUnaCordaStrings = #'("una corda" "" "tre corde")
+	pedalSostenutoStrings = #'()  % FIXME
+
+	tupletNumberFormatFunction = #denominator-tuplet-formatter
+	
+       keyAccidentalOrder = #'(
+         (6 . -1) (2  . -1) (5 . -1 ) (1  . -1) (4  . -1) (0  . -1) (3  . -1)
+	 (3  . 1) (0 . 1) (4 . 1) (1 . 1) (5 . 1) (2 . 1) (6 . 1)
+       )
+	breakAlignOrder = #'(
+	  Instrument_name
+	  Left_edge_item
+	  Span_bar
+	  Breathing_sign
+	  Clef_item
+	  Key_item
+	  Staff_bar
+	  Time_signature
+	  Custos
+	)
+
+
+	\elementdescriptions #all-grob-descriptions
+}
+
+OrchestralScoreContext= \translator {
+	\ScoreContext
+}
+EasyNotation =  \translator {
+	\ScoreContext
+	NoteHead \override #'molecule-callback = #Note_head::brew_ez_molecule
+	easyPlay = ##t
+}
+
+% retain for compatibility reasons.
+GraceContext = \translator {
+	\type "Engraver_group_engraver"
+}
diff --git a/ly/engraver.ly b/ly/engraver.ly
deleted file mode 100644
index b8fa85214a..0000000000
--- a/ly/engraver.ly
+++ /dev/null
@@ -1,461 +0,0 @@
-\version "1.3.146"
-
-%
-% setup for Request->Element conversion. Guru-only
-%
-
-StaffContext=\translator {
-	\type "Engraver_group_engraver"
-	\name Staff 
-	\consists "Output_property_engraver"	
-	Generic_property_list = #generic-staff-properties
-	\consists "Property_engraver"
-	
-	\consists "Bar_engraver"
- % Bar_engraver must be first so default bars aren't overwritten
-% with empty ones.
-
-
-%	\consists "Repeat_engraver"
-	\consists "Volta_engraver"
-	\consists "Separating_line_group_engraver"	
-
-
-
-	\consists "Clef_engraver"
-	\consists "Key_engraver"
-	\consists "Time_signature_engraver"
-	\consists "Staff_symbol_engraver"
-	\consists "Collision_engraver"
-	\consists "Rest_collision_engraver"
-	\consists "Local_key_engraver"
-	\consists "Piano_pedal_engraver"
-	\consists "Instrument_name_engraver"
-
-	\consistsend "Axis_group_engraver"
-	
-	MinimumVerticalExtent = #'(-4 . 4)
-	ExtraVerticalExtent = ##f
-	VerticalExtent = ##f 
-
-	% explicitly set instrument, so we don't get 
-	% weird effects when doing instrument names for
-	% piano staffs
-
-	instrument = ##f
-	instr = ##f
-	  
-	\accepts "Voice"
-}
-
-
-StaffContainerContext = \translator {
-	\type Engraver_group_engraver
-	\consists "Axis_group_engraver"
-	MinimumVerticalExtent = ##f
-	ExtraVerticalExtent = ##f
-	VerticalExtent = ##f 
-	
-	\accepts Staff
-	\name StaffContainer
-}
-
-InnerChoirStaffContext = \translator {
-	\type "Engraver_group_engraver"
-	\name InnerChoirStaff
-	alignmentReference = #0
-	\consists "System_start_delimiter_engraver"
-	SystemStartDelimiter \override #'glyph = #'bracket
-
-	\accepts "Staff"
-	\accepts "RhythmicStaff"
-	\accepts "GrandStaff"
-	\accepts "PianoStaff"
-	\accepts "Lyrics"
-	\accepts "ChordNames"
-}
-ChoirStaffContext = \translator {
-	\InnerChoirStaffContext
-	\name ChoirStaff
-	\accepts "InnerChoirStaff"
-	\accepts "InnerStaffGroup"
-}
-
-
-RhythmicStaffContext=\translator{
-	\type "Engraver_group_engraver"
-	
-	\consists "Property_engraver"
-	\consists "Output_property_engraver"	
-
-	Generic_property_list = #generic-staff-properties
-	MinimumVerticalExtent = ##f
-	ExtraVerticalExtent = ##f
-	VerticalExtent = ##f 
-
-	\consists "Pitch_squash_engraver"
-	\consists "Separating_line_group_engraver"	
-	\name RhythmicStaff
-	\alias "Staff"
-	
-	Bar \override #'bar-size = #4
-	VoltaBracket \override #'minimum-space =  #15  % urg, in \pt
-	VoltaBracket \override #'padding =  #5  % urg, in \pt
-	StaffSymbol \override #'line-count = #1	
-
-%	\consists "Repeat_engraver"
-	\consists "Volta_engraver"
-	\consists "Bar_engraver"
-	\consists "Time_signature_engraver"
-	\consists "Staff_symbol_engraver"
-	\consistsend "Axis_group_engraver"
-	\accepts "Voice"
-}
-
-
-VoiceContext = \translator {
-	\type "Engraver_group_engraver"
-	\name Voice
-
-	Generic_property_list = #generic-voice-properties
-
-	% must come before all
-	\consists "Voice_devnull_engraver"
-	\consists "Output_property_engraver"	
-	\consists "Arpeggio_engraver"
-	\consists "Multi_measure_rest_engraver"
-	\consists "Text_spanner_engraver"
-	\consists "Property_engraver"
-	
-	\consists "Breathing_sign_engraver"
- 	% \consists "Rest_engraver"
-	\consists "Dot_column_engraver"
-	\consists "Stem_engraver"
-	\consists "Beam_engraver"
-	\consists "Auto_beam_engraver"
-
-	\consists "Chord_tremolo_engraver"
-	\consists "Percent_repeat_engraver"
-	\consists "Melisma_engraver"
-
-%{
- Must come before text_engraver, but after note_column engraver.
-
-%}
-	\consists "Dynamic_engraver"
-	\consists "Text_engraver"
-
-	\consists "Script_engraver"
-	\consists "Script_column_engraver"
-	\consists "Rhythmic_column_engraver"
-	\consists "Phrasing_slur_engraver"
-	\consists "Slur_engraver"
-	\consists "Tie_engraver"
-	\consists "Tuplet_engraver"
-	\consists "Grace_position_engraver"
-	\consists "A2_engraver"
-
-	\consists "Skip_req_swallow_translator"
-	\accepts Thread % bug if you leave out this!
-	\accepts Grace
-}
-
-GraceContext=\translator {
-	\type "Grace_engraver_group"
-	\name "Grace"
-	\consists "Output_property_engraver"	
-
-	Generic_property_list = #generic-grace-properties
-	
-	\consists "Note_heads_engraver"
-	\consists "Local_key_engraver"
-	\consists "Stem_engraver"
-	\consists "Beam_engraver"
-	\consists "Slur_engraver"
-
-	\consists "Auto_beam_engraver"
-	\consists "Align_note_column_engraver"
-
-	\consists "Rhythmic_column_engraver"
-
-	\consists "Dynamic_engraver"% in Grace ???
-	\consists "Text_engraver" % in Grace ???
-
-	\consists "Property_engraver"
-
-	Stem \override  #'flag-style = #"grace"
-	Stem \override  #'stem-length = #6.0
-	Stem \override  #'direction = #1
-
-	NoteHead \override #'font-relative-size = #-1
-	Stem \override #'font-relative-size = #-1
-	Stem \override #'stem-shorten = #'(0)
-	Beam \override #'font-relative-size = #-1
-	TextScript \override #'font-relative-size = #-1
-	Slur \override #'font-relative-size = #-1
-	Accidentals \override #'font-relative-size = #-1
-	Beam \override #'thickness = #0.3
-	Beam \override #'space-function = #(lambda (x) 0.5)
-
-	Stem \override #'lengths = #(map (lambda (x) (* 0.8 x)) '(3.5 3.5 3.5 4.5 5.0))
-	Stem \override #'beamed-lengths =
-		#'(0.0 2.5 2.0 1.5)
-	Stem \override #'beamed-minimum-lengths
-		 = #(map (lambda (x) (* 0.8 x)) '(0.0 2.5 2.0 1.5))
-
-	weAreGraceContext = ##t   
-	graceAccidentalSpace= #1.5  % in staff space
-}
-
-ThreadContext = \translator{
-	\type Engraver_group_engraver
-	\name Thread
-	
-	\consists "Thread_devnull_engraver"
-	\consists "Note_heads_engraver"
-	\consists "Rest_engraver"
-	\consists "Note_head_line_engraver"
-	\consists "Output_property_engraver"	
-	Generic_property_list = #generic-thread-properties
-	\consists "Property_engraver"
-}
-
-GrandStaffContext=\translator{
-	\type "Engraver_group_engraver"
-	\name GrandStaff
-	\consists "Span_bar_engraver"
-	\consists "Span_arpeggio_engraver"
-	\consists "System_start_delimiter_engraver"
-	SystemStartDelimiter \override #'glyph = #'brace
-	
-	\consists "Property_engraver"	
-	Generic_property_list = #generic-grand-staff-properties
-	\accepts "Staff"
-}
-
-PianoStaffContext = \translator{
-	\GrandStaffContext
-	\name "PianoStaff"
-
-	\consists "Vertical_align_engraver"
-	\consists "Instrument_name_engraver"
-	
-	instrument = ##f
-	instr = ##f
-	
-	verticalAlignmentChildCallback = #Align_interface::fixed_distance_alignment_callback
-	VerticalAlignment \override #'forced-distance = #12
-	VerticalAlignment \override #'self-alignment-Y = #0
-%	\consistsend "Axis_group_engraver"
-}
-
-InnerStaffGroupContext= \translator {
-	\type "Engraver_group_engraver"
-	\name InnerStaffGroup
-
-	\consists "Span_bar_engraver"
-	\consists "Span_arpeggio_engraver"
-	\consists "Output_property_engraver"	
-	SystemStartDelimiter \override #'glyph = #'bracket
-
-	\consists "System_start_delimiter_engraver"
-	\accepts "Staff"
-	\accepts "RhythmicStaff"
-	\accepts "GrandStaff"
-	\accepts "PianoStaff"
-	
-	\accepts "Lyrics"
-	\accepts "ChordNames"
-}
-StaffGroupContext = \translator {
-	\InnerStaffGroupContext
-	\name StaffGroup
-	\accepts "InnerChoirStaff"
-	\accepts "ChoirStaff"
-	\accepts "InnerStaffGroup"
-}
-
-
-% UGH! JUNKME
-LyricsVoiceContext= \translator{
-	\type "Engraver_group_engraver"
-	\consistsend "Axis_group_engraver"
-	MinimumVerticalExtent = #(cons -1.2 1.2)
-	ExtraVerticalExtent = ##f
-	VerticalExtent = ##f 
-	\name LyricsVoice 
-	\consists "Separating_line_group_engraver"
-	\consists "Lyric_engraver"
-	\consists "Extender_engraver"
-	\consists "Hyphen_engraver"
-	\consists "Stanza_number_engraver"
-	phrasingPunctuation = #".,:!?\""
-	
-}
-NoteNamesContext = \translator {
-	\type "Engraver_group_engraver"
-	\name NoteNames
-	\consistsend "Axis_group_engraver"
-
-	MinimumVerticalExtent = ##f
-	ExtraVerticalExtent = ##f
-	VerticalExtent = ##f 
-
-	
-	\consists "Note_name_engraver"
-	\consists "Separating_line_group_engraver"
-}
-
-LyricsContext = \translator {
-	\type "Engraver_group_engraver"
-	\name Lyrics
-	\consists Vertical_align_engraver %need this for getting folded repeats right.
-	Generic_property_list = #generic-lyrics-properties
-	\consists "Property_engraver"
-	\consistsend "Axis_group_engraver"
-	MinimumVerticalExtent = ##f
-	ExtraVerticalExtent = ##f
-	VerticalExtent = ##f 
-	
-	\accepts "LyricsVoice"
-}
-
-
-ChordNamesContext = \translator {
-	\type "Engraver_group_engraver"
-	\name ChordNames
-
-	Generic_property_list = #generic-chord-staff-properties
-
-	\consists "Property_engraver"	
-	\consists "Output_property_engraver"	
-	\consists "Separating_line_group_engraver"
-	\consists "Chord_name_engraver"
-	\consists "Skip_req_swallow_translator"
-	\consistsend "Axis_group_engraver"
-	MinimumVerticalExtent = ##f
-	ExtraVerticalExtent = ##f
-	VerticalExtent = ##f 
-
-	VerticalAxisGroup \override #'invisible-staff = ##t
-	}
-
-
-
-StupidScore = \translator {
- 	\type "Score_engraver"
-	\name Score
-	\consists "Note_heads_engraver"
-}
-
-
-
-
-HaraKiriStaffContext = \translator {
-	\StaffContext
-	\remove "Axis_group_engraver"
-	\consistsend "Hara_kiri_engraver"
-	\consists "Instrument_name_engraver"
-	\accepts "Voice"
-}
-%{
-  The HaraKiriStaffContexts doesn't override \name,
-  so it is still named `Staff'.
-
-  %\translator { \HaraKiriStaffContext }
-%}
-
-
-
-
-ScoreContext = \translator {
-	\type Score_engraver
-	\name Score
-	
-
-	\consists "Repeat_acknowledge_engraver"
-	\consists "Timing_engraver"
-	\consists "Output_property_engraver"
-	\consists "System_start_delimiter_engraver"
-	\consists "Mark_engraver"	
-	\consists "Break_align_engraver"
-	\consists "Spacing_engraver"
-	\consists "Vertical_align_engraver"
-
-	\consists "Lyric_phrasing_engraver"
-	\consists "Bar_number_engraver"
-	\consists "Span_arpeggio_engraver"
-
-	\accepts "Staff"
-	\accepts "StaffContainer"
-	\accepts "StaffGroup"
-	\accepts "RhythmicStaff"	
-	\accepts "Lyrics"
-	\accepts "ChordNames"
-	\accepts "GrandStaff"
-	\accepts "ChoirStaff"
-	\accepts "PianoStaff"
-	\accepts "NoteNames"
-
-	soloText = #"Solo"
-	soloIIText = #"Solo II"
-	aDueText = #"a2"
-	soloADue = ##t
-	splitInterval = #'(0 . 1)
-	changeMoment = #`(,(make-moment 0 0) . ,(make-moment 1 512))
-
-	barAuto = ##t
-	voltaVisibility = ##t
-	%  name, glyph id, clef position 
-	% where is c0 in this clef?
-
-	clefGlyph = #"clefs-G"
-	clefPosition = #-2
-	centralCPosition = #-6
-	
-        automaticPhrasing = ##t
-	alignmentReference = #-1   % \down
-	defaultBarType = #"|"
-
-	explicitClefVisibility = #all-visible
-	explicitKeySignatureVisibility = #all-visible
-	
-	scriptDefinitions = #default-script-alist
-
-	verticalAlignmentChildCallback = #Align_interface::alignment_callback
-
-	pedalSustainStrings = #'("Ped." "*Ped." "*")
-	pedalUnaCordaStrings = #'("una corda" "" "tre corde")
-	pedalSostenutoStrings = #'()  % FIXME
-
-	tupletNumberFormatFunction = #denominator-tuplet-formatter
-	
-       keyAccidentalOrder = #'(
-         (6 . -1) (2  . -1) (5 . -1 ) (1  . -1) (4  . -1) (0  . -1) (3  . -1)
-	 (3  . 1) (0 . 1) (4 . 1) (1 . 1) (5 . 1) (2 . 1) (6 . 1)
-       )
-	breakAlignOrder = #'(
-	  Instrument_name
-	  Left_edge_item
-	  Span_bar
-	  Breathing_sign
-	  Clef_item
-	  Key_item
-	  Staff_bar
-	  Time_signature
-	  Custos
-	)
-
-
-	\elementdescriptions #all-grob-descriptions
-}
-
-OrchestralScoreContext= \translator {
-	\ScoreContext
-}
-EasyNotation =  \translator {
-	\ScoreContext
-	NoteHead \override #'molecule-callback = #Note_head::brew_ez_molecule
-	easyPlay = ##t
-}
-
diff --git a/ly/generate-interface-doc-init.ly b/ly/generate-interface-doc-init.ly
new file mode 100644
index 0000000000..a50eeaf3d0
--- /dev/null
+++ b/ly/generate-interface-doc-init.ly
@@ -0,0 +1,5 @@
+
+%
+% Running LilyPond on this file generates the short interface doc
+%
+#(eval-string (ly-gulp-file "generate-interface-doc.scm"))
diff --git a/ly/generate-interface-doc.ly b/ly/generate-interface-doc.ly
deleted file mode 100644
index a50eeaf3d0..0000000000
--- a/ly/generate-interface-doc.ly
+++ /dev/null
@@ -1,5 +0,0 @@
-
-%
-% Running LilyPond on this file generates the short interface doc
-%
-#(eval-string (ly-gulp-file "generate-interface-doc.scm"))
diff --git a/ly/generic-paper-init.ly b/ly/generic-paper-init.ly
new file mode 100644
index 0000000000..df96f2abcd
--- /dev/null
+++ b/ly/generic-paper-init.ly
@@ -0,0 +1,8 @@
+\version "1.3.146"
+
+\paper {
+	texsetting = ""
+	pssetting = ""
+	scmsetting = "(lilyponddefs.ps) findlibfile {exch pop //systemdict /run get exec} { /undefinedfilename signalerror } ifelse\n"% UGH. 
+
+}
diff --git a/ly/generic-paper.ly b/ly/generic-paper.ly
deleted file mode 100644
index df96f2abcd..0000000000
--- a/ly/generic-paper.ly
+++ /dev/null
@@ -1,8 +0,0 @@
-\version "1.3.146"
-
-\paper {
-	texsetting = ""
-	pssetting = ""
-	scmsetting = "(lilyponddefs.ps) findlibfile {exch pop //systemdict /run get exec} { /undefinedfilename signalerror } ifelse\n"% UGH. 
-
-}
diff --git a/ly/german-chords-init.ly b/ly/german-chords-init.ly
new file mode 100644
index 0000000000..cb741eba14
--- /dev/null
+++ b/ly/german-chords-init.ly
@@ -0,0 +1,41 @@
+\version "1.3.148"
+
+%  german-chords.ly:
+% german/norwegian/danish?
+
+% To get Bb instead of B, use
+% \include "german-chords.ly"
+% #(set! german-Bb #t)
+
+#(define german-Bb #f)
+
+#(define (pitch->chord-name-text-banter pitch steps)
+   (let ((dopitch (if (member (cdr pitch) '((6 -1) (6 -2)))
+		      (list 7 (+ (if german-Bb 0 1) (caddr pitch)))
+		      (cdr pitch)
+		 )))
+     (cons
+       (list-ref '("C" "D" "E" "F" "G" "A" "H" "B") (car dopitch))
+       (accidental->text-super (cadr dopitch))
+     )
+   )
+ )
+
+
+
+#(define (pitch->note-name-text-banter pitch)
+   (let ((dopitch (if (member (cdr pitch) '((6 -1) (6 -2)))
+		     (list 7 (+ 1 (caddr pitch)))
+		     (cdr pitch)
+		 )))
+     (list
+       (string-append
+	  (list-ref '("c" "d" "e" "f" "g" "a" "h" "b") (car dopitch))
+	  (if (or (equal? (car dopitch) 2) (equal? (car dopitch) 5))
+	    (list-ref '( "ses"  "s" "" "is" "isis") (+ 2 (cadr dopitch)))
+	    (list-ref '("eses" "es" "" "is" "isis") (+ 2 (cadr dopitch)))
+	  )
+       )
+     )
+   )
+ )
diff --git a/ly/german-chords.ly b/ly/german-chords.ly
deleted file mode 100644
index cb741eba14..0000000000
--- a/ly/german-chords.ly
+++ /dev/null
@@ -1,41 +0,0 @@
-\version "1.3.148"
-
-%  german-chords.ly:
-% german/norwegian/danish?
-
-% To get Bb instead of B, use
-% \include "german-chords.ly"
-% #(set! german-Bb #t)
-
-#(define german-Bb #f)
-
-#(define (pitch->chord-name-text-banter pitch steps)
-   (let ((dopitch (if (member (cdr pitch) '((6 -1) (6 -2)))
-		      (list 7 (+ (if german-Bb 0 1) (caddr pitch)))
-		      (cdr pitch)
-		 )))
-     (cons
-       (list-ref '("C" "D" "E" "F" "G" "A" "H" "B") (car dopitch))
-       (accidental->text-super (cadr dopitch))
-     )
-   )
- )
-
-
-
-#(define (pitch->note-name-text-banter pitch)
-   (let ((dopitch (if (member (cdr pitch) '((6 -1) (6 -2)))
-		     (list 7 (+ 1 (caddr pitch)))
-		     (cdr pitch)
-		 )))
-     (list
-       (string-append
-	  (list-ref '("c" "d" "e" "f" "g" "a" "h" "b") (car dopitch))
-	  (if (or (equal? (car dopitch) 2) (equal? (car dopitch) 5))
-	    (list-ref '( "ses"  "s" "" "is" "isis") (+ 2 (cadr dopitch)))
-	    (list-ref '("eses" "es" "" "is" "isis") (+ 2 (cadr dopitch)))
-	  )
-       )
-     )
-   )
- )
diff --git a/ly/grace-init.ly b/ly/grace-init.ly
new file mode 100644
index 0000000000..54211cb4d9
--- /dev/null
+++ b/ly/grace-init.ly
@@ -0,0 +1,58 @@
+
+
+ #(define (grace-beam-space-function multiplicity)
+         (* (if (<= multiplicity 3) 0.816 0.844) 0.8))
+
+
+ #(define (make-text-checker text)
+  (lambda (elt) (equal? text (ly-get-grob-property elt 'text))))
+
+
+startGraceMusic = {
+
+%{
+from GraceContext
+	Stem \override  #'flag-style = #"grace"
+	Stem \override  #'stem-length = #6.0
+	Stem \override  #'direction = #1
+
+	NoteHead \override #'font-relative-size = #-1
+	Stem \override #'font-relative-size = #-1
+	Stem \override #'stem-shorten = #'(0)
+	Beam \override #'font-relative-size = #-1
+	TextScript \override #'font-relative-size = #-1
+	Slur \override #'font-relative-size = #-1
+	Accidentals \override #'font-relative-size = #-1
+	Beam \override #'thickness = #0.3
+	Beam \override #'space-function = #(lambda (x) 0.5)
+
+	Stem \override #'lengths = #(map (lambda (x) (* 0.8 x)) '(3.5 3.5 3.5 4.5 5.0))
+	Stem \override #'beamed-lengths =
+		#'(0.0 2.5 2.0 1.5)
+	Stem \override #'beamed-minimum-lengths
+		 = #(map (lambda (x) (* 0.8 x)) '(0.0 2.5 2.0 1.5))
+%}
+
+
+    \property Voice.NoteHead \override #'font-relative-size = #-1
+    \property Voice.Stem \override #'length = #6
+    \property Voice.Stem \override #'beamed-lengths =
+        #(map (lambda (x) (* 1.25 x)) '(0.0 2.5 2.0 1.5))
+    \property Voice.Stem \override #'beamed-minimum-lengths =
+        #(map (lambda (x) (* 1.25 x)) '(0.0 1.5 1.25 1.0))
+    \property Voice.Beam \override #'space-function = #grace-beam-space-function
+    \property Voice.fontSize = #-2
+    \property Voice.Stem \override #'no-stem-extend = ##t
+
+%    \property Voice.Stem \override #'flag-style  = #"grace"
+}
+
+stopGraceMusic = {
+% \property Voice.Stem \revert #'flag-style
+    \property Voice.Stem \override #'no-stem-extend = ##f 
+    \property Voice.Stem \revert #'length
+    \property Voice.Stem \revert #'beamed-lengths
+    \property Voice.Stem \revert #'beamed-minimum-lengths
+    \property Voice.Beam \revert #'space-function
+    \property Voice.fontSize \unset
+}
diff --git a/ly/init.fly b/ly/init.fly
deleted file mode 100644
index 640f13692f..0000000000
--- a/ly/init.fly
+++ /dev/null
@@ -1,14 +0,0 @@
-% Toplevel initialisation file. 
-	
-\version "1.3.146"
-
-
-\include "declarations.ly"
-
-\score { 
-  \context Voice \notes\relative c {
-    \maininput
-  }
-  \paper { }  
-  \midi { }
-}
diff --git a/ly/init.ly b/ly/init.ly
index fea720a03c..0ddb2db3a9 100644
--- a/ly/init.ly
+++ b/ly/init.ly
@@ -3,6 +3,6 @@
 
 \version "1.3.146"
 
-\include "declarations.ly"
+\include "declarations-init.ly"
 
 \maininput
diff --git a/ly/init.sly b/ly/init.sly
deleted file mode 100644
index 497dfd8daa..0000000000
--- a/ly/init.sly
+++ /dev/null
@@ -1,17 +0,0 @@
-% Toplevel initialisation file. 
-	
-\version "1.3.146"
-
-
-\include "declarations.ly"
-
-\score { 
-  \context Voice \notes\relative c {
-    \maininput
-  }
-  \paper {
-
-	% indent = 0.0
-  }  
-  \midi{ }
-}
diff --git a/ly/ledger-init.ly b/ly/ledger-init.ly
new file mode 100644
index 0000000000..e1b774d343
--- /dev/null
+++ b/ly/ledger-init.ly
@@ -0,0 +1,8 @@
+\version "1.3.146"
+
+% ledger.ly
+
+hsize = 11.0 \in
+vsize = 17.0 \in
+
+
diff --git a/ly/ledger.ly b/ly/ledger.ly
deleted file mode 100644
index e1b774d343..0000000000
--- a/ly/ledger.ly
+++ /dev/null
@@ -1,8 +0,0 @@
-\version "1.3.146"
-
-% ledger.ly
-
-hsize = 11.0 \in
-vsize = 17.0 \in
-
-
diff --git a/ly/legal-init.ly b/ly/legal-init.ly
new file mode 100644
index 0000000000..47f413c0d3
--- /dev/null
+++ b/ly/legal-init.ly
@@ -0,0 +1,5 @@
+\version "1.3.146"
+% legal-init.ly
+
+hsize = 8.5 \in
+vsize = 14.0 \in
diff --git a/ly/legal.ly b/ly/legal.ly
deleted file mode 100644
index 4291b819f5..0000000000
--- a/ly/legal.ly
+++ /dev/null
@@ -1,5 +0,0 @@
-\version "1.3.146"
-% legal.ly
-
-hsize = 8.5 \in
-vsize = 14.0 \in
diff --git a/ly/letter-init.ly b/ly/letter-init.ly
new file mode 100644
index 0000000000..1ae8c499db
--- /dev/null
+++ b/ly/letter-init.ly
@@ -0,0 +1,7 @@
+\version "1.3.146"
+% letter-init.ly
+
+hsize = 8.5 \in
+vsize = 11.0 \in
+
+
diff --git a/ly/letter.ly b/ly/letter.ly
deleted file mode 100644
index c9be6592b5..0000000000
--- a/ly/letter.ly
+++ /dev/null
@@ -1,7 +0,0 @@
-\version "1.3.146"
-% letter.ly
-
-hsize = 8.5 \in
-vsize = 11.0 \in
-
-
diff --git a/ly/midi-init.ly b/ly/midi-init.ly
new file mode 100644
index 0000000000..730d92a483
--- /dev/null
+++ b/ly/midi-init.ly
@@ -0,0 +1,7 @@
+\version "1.3.146"
+\midi {
+        \tempo 4=60
+	\include "performer-init.ly"
+%	unfold_all = "1"
+}
+
diff --git a/ly/midi.ly b/ly/midi.ly
deleted file mode 100644
index a4283f4ccf..0000000000
--- a/ly/midi.ly
+++ /dev/null
@@ -1,7 +0,0 @@
-\version "1.3.146"
-\midi {
-        \tempo 4=60
-	\include "performer.ly"
-%	unfold_all = "1"
-}
-
diff --git a/ly/paper-as5-init.ly b/ly/paper-as5-init.ly
new file mode 100644
index 0000000000..f7f58a3a3d
--- /dev/null
+++ b/ly/paper-as5-init.ly
@@ -0,0 +1,17 @@
+% paper-as5-init.ly
+
+\version "1.3.146"
+
+paperAsFive = \paper {
+	staffheight = 5.\char
+
+	\stylesheet #(as-make-style-sheet 'as5)
+	
+	\translator { \StaffContext barSize = #5 }
+
+	% no beam-slope
+	%\translator { \VoiceContext beamHeight = #0 }
+	\include "params-as-init.ly"
+}
+
+\paper { \paperAsFive }
diff --git a/ly/paper-as5.ly b/ly/paper-as5.ly
deleted file mode 100644
index d325b9be52..0000000000
--- a/ly/paper-as5.ly
+++ /dev/null
@@ -1,17 +0,0 @@
-% paper-as5.ly
-
-\version "1.3.146"
-
-paperAsFive = \paper {
-	staffheight = 5.\char
-
-	\stylesheet #(as-make-style-sheet 'as5)
-	
-	\translator { \StaffContext barSize = #5 }
-
-	% no beam-slope
-	%\translator { \VoiceContext beamHeight = #0 }
-	\include "params-as.ly"
-}
-
-\paper { \paperAsFive }
diff --git a/ly/paper-as9-init.ly b/ly/paper-as9-init.ly
new file mode 100644
index 0000000000..86866b0eff
--- /dev/null
+++ b/ly/paper-as9-init.ly
@@ -0,0 +1,16 @@
+% paper-as9-init.ly
+
+\version "1.3.146"
+
+paperAsNine = \paper {
+	staffheight = 9.\char
+
+	%\translator { \StaffContext barSize = \staffheight }
+
+	\stylesheet #(as-make-style-sheet 'as9)
+
+	\include "params-as-init.ly"
+	
+}
+
+\paper { \paperAsNine }
diff --git a/ly/paper-as9.ly b/ly/paper-as9.ly
deleted file mode 100644
index d35590f5af..0000000000
--- a/ly/paper-as9.ly
+++ /dev/null
@@ -1,16 +0,0 @@
-% paper-as9.ly
-
-\version "1.3.146"
-
-paperAsNine = \paper {
-	staffheight = 9.\char
-
-	%\translator { \StaffContext barSize = \staffheight }
-
-	\stylesheet #(as-make-style-sheet 'as9)
-
-	\include "params-as.ly"
-	
-}
-
-\paper { \paperAsNine }
diff --git a/ly/paper-init.ly b/ly/paper-init.ly
new file mode 100644
index 0000000000..f6ac488597
--- /dev/null
+++ b/ly/paper-init.ly
@@ -0,0 +1,15 @@
+\version "1.3.146"
+% paper-init.ly
+
+%% Why som complicated?  /MB
+%linewidth20 = \hsize - 2.5 * \staffheight
+%textheight20 = \vsize - 5.0 * \staffheight
+%linewidth = \staffheight/20.0 * \linewidth20
+%textheight = \staffheight/20.0 * \textheight20
+
+linewidth = \hsize - 2.\cm
+% Leave the textheight calculation to the geometry package. /MB
+%textheight = \vsize - 4.\cm
+
+indent = \linewidth / 14.0
+
diff --git a/ly/paper.ly b/ly/paper.ly
deleted file mode 100644
index fb9aea728c..0000000000
--- a/ly/paper.ly
+++ /dev/null
@@ -1,15 +0,0 @@
-\version "1.3.146"
-% paper.ly
-
-%% Why som complicated?  /MB
-%linewidth20 = \hsize - 2.5 * \staffheight
-%textheight20 = \vsize - 5.0 * \staffheight
-%linewidth = \staffheight/20.0 * \linewidth20
-%textheight = \staffheight/20.0 * \textheight20
-
-linewidth = \hsize - 2.\cm
-% Leave the textheight calculation to the geometry package. /MB
-%textheight = \vsize - 4.\cm
-
-indent = \linewidth / 14.0
-
diff --git a/ly/paper11-init.ly b/ly/paper11-init.ly
new file mode 100644
index 0000000000..2cc39133f3
--- /dev/null
+++ b/ly/paper11-init.ly
@@ -0,0 +1,12 @@
+% paper11-init.ly
+
+\version "1.3.146"
+
+paperEleven = \paper {
+	staffheight = 11.0\pt
+	\stylesheet #(make-style-sheet 'paper11)
+
+	\include "params-init.ly"
+}
+
+\paper { \paperEleven }
diff --git a/ly/paper11.ly b/ly/paper11.ly
deleted file mode 100644
index 61dbaf5e08..0000000000
--- a/ly/paper11.ly
+++ /dev/null
@@ -1,12 +0,0 @@
-% paper11.ly
-
-\version "1.3.146"
-
-paperEleven = \paper {
-	staffheight = 11.0\pt
-	\stylesheet #(make-style-sheet 'paper11)
-
-	\include "params.ly"
-}
-
-\paper { \paperEleven }
diff --git a/ly/paper13-init.ly b/ly/paper13-init.ly
new file mode 100644
index 0000000000..cdccec434e
--- /dev/null
+++ b/ly/paper13-init.ly
@@ -0,0 +1,13 @@
+% paper13-init.ly
+
+\version "1.3.146"
+
+paperThirteen = \paper {
+	staffheight = 13.0\pt
+
+	\stylesheet #(make-style-sheet 'paper13)
+	
+	\include "params-init.ly"
+}
+
+\paper { \paperThirteen }
diff --git a/ly/paper13.ly b/ly/paper13.ly
deleted file mode 100644
index 445c37e929..0000000000
--- a/ly/paper13.ly
+++ /dev/null
@@ -1,13 +0,0 @@
-% paper13.ly
-
-\version "1.3.146"
-
-paperThirteen = \paper {
-	staffheight = 13.0\pt
-
-	\stylesheet #(make-style-sheet 'paper13)
-	
-	\include "params.ly"
-}
-
-\paper { \paperThirteen }
diff --git a/ly/paper16-init.ly b/ly/paper16-init.ly
new file mode 100644
index 0000000000..c747eac11d
--- /dev/null
+++ b/ly/paper16-init.ly
@@ -0,0 +1,12 @@
+% paper16-init.ly
+
+\version "1.3.146"
+
+paperSixteen = \paper {
+	staffheight = 16.0\pt
+	\stylesheet #(make-style-sheet 'paper16)
+
+	\include "params-init.ly"
+}
+
+\paper {\paperSixteen }
diff --git a/ly/paper16.ly b/ly/paper16.ly
index a03bfdd3e7..2621cae3e6 100644
--- a/ly/paper16.ly
+++ b/ly/paper16.ly
@@ -1,12 +1,2 @@
-% paper16.ly
 
-\version "1.3.146"
-
-paperSixteen = \paper {
-	staffheight = 16.0\pt
-	\stylesheet #(make-style-sheet 'paper16)
-
-	\include "params.ly"
-}
-
-\paper {\paperSixteen }
+\include "paper16-init.ly"
diff --git a/ly/paper20-init.ly b/ly/paper20-init.ly
new file mode 100644
index 0000000000..13a67f0809
--- /dev/null
+++ b/ly/paper20-init.ly
@@ -0,0 +1,13 @@
+% paper20-init.ly
+
+
+\version "1.3.146"
+
+paperTwenty = \paper {
+	staffheight = 20.0\pt
+	\stylesheet #(make-style-sheet 'paper20)
+	
+	\include "params-init.ly"
+}
+
+\paper { \paperTwenty }
diff --git a/ly/paper20.ly b/ly/paper20.ly
deleted file mode 100644
index b213bbc0ec..0000000000
--- a/ly/paper20.ly
+++ /dev/null
@@ -1,13 +0,0 @@
-% paper20.ly
-
-
-\version "1.3.146"
-
-paperTwenty = \paper {
-	staffheight = 20.0\pt
-	\stylesheet #(make-style-sheet 'paper20)
-	
-	\include "params.ly"
-}
-
-\paper { \paperTwenty }
diff --git a/ly/paper23-init.ly b/ly/paper23-init.ly
new file mode 100644
index 0000000000..bbb55106e0
--- /dev/null
+++ b/ly/paper23-init.ly
@@ -0,0 +1,12 @@
+% paper23-init.ly
+
+
+\version "1.3.146"
+
+paperTwentythree = \paper {
+	staffheight = 23.0\pt
+	\stylesheet #(make-style-sheet 'paper23)
+	\include "params-init.ly"
+}
+
+\paper { \paperTwentythree }
diff --git a/ly/paper23.ly b/ly/paper23.ly
deleted file mode 100644
index aa08a5e756..0000000000
--- a/ly/paper23.ly
+++ /dev/null
@@ -1,12 +0,0 @@
-% paper23.ly
-
-
-\version "1.3.146"
-
-paperTwentythree = \paper {
-	staffheight = 23.0\pt
-	\stylesheet #(make-style-sheet 'paper23)
-	\include "params.ly"
-}
-
-\paper { \paperTwentythree }
diff --git a/ly/paper26-init.ly b/ly/paper26-init.ly
new file mode 100644
index 0000000000..e64eba6a54
--- /dev/null
+++ b/ly/paper26-init.ly
@@ -0,0 +1,12 @@
+% paper26-init.ly
+
+\version "1.3.146"
+
+paperTwentysix = \paper {
+	staffheight = 26.0\pt
+	\stylesheet #(make-style-sheet 'paper26)	
+
+	\include "params-init.ly"
+}
+
+\paper { \paperTwentysix }
diff --git a/ly/paper26.ly b/ly/paper26.ly
index 5ff9ece986..c874b34f25 100644
--- a/ly/paper26.ly
+++ b/ly/paper26.ly
@@ -1,12 +1,2 @@
-% paper26.ly
 
-\version "1.3.146"
-
-paperTwentysix = \paper {
-	staffheight = 26.0\pt
-	\stylesheet #(make-style-sheet 'paper26)	
-
-	\include "params.ly"
-}
-
-\paper { \paperTwentysix }
+\include "paper26-init.ly"
diff --git a/ly/params-as-init.ly b/ly/params-as-init.ly
new file mode 100644
index 0000000000..b9928df8b1
--- /dev/null
+++ b/ly/params-as-init.ly
@@ -0,0 +1,30 @@
+\version "1.3.146"
+% params-as-init.ly
+% generic paper parameters
+
+outputscale = \staffheight / 4.0
+
+linewidth = 60.0 \char
+textheight = 60.0 \char
+indent = 8.0\char
+
+staffspace = (\staffheight - 1.0 ) / 4.0
+stafflinethickness = \staffspace / 2.0
+
+\translator { \NoteNamesContext }
+\translator { \ScoreContext }
+\translator { \ChoirStaffContext }
+\translator { \GraceContext }
+\translator { \RhythmicStaffContext}
+\translator { \StaffContext }
+\translator { \VoiceContext }
+\translator { \StaffGroupContext }
+\translator { \ChordNamesContext }
+\translator { \GrandStaffContext }
+\translator { \LyricsContext }
+\translator { \ThreadContext }
+\translator { \PianoStaffContext }
+\translator { \LyricsVoiceContext }
+\translator { \StaffContainerContext }
+
+
diff --git a/ly/params-as.ly b/ly/params-as.ly
deleted file mode 100644
index fafb495c0a..0000000000
--- a/ly/params-as.ly
+++ /dev/null
@@ -1,30 +0,0 @@
-\version "1.3.146"
-% params-as.ly
-% generic paper parameters
-
-outputscale = \staffheight / 4.0
-
-linewidth = 60.0 \char
-textheight = 60.0 \char
-indent = 8.0\char
-
-staffspace = (\staffheight - 1.0 ) / 4.0
-stafflinethickness = \staffspace / 2.0
-
-\translator { \NoteNamesContext }
-\translator { \ScoreContext }
-\translator { \ChoirStaffContext }
-\translator { \GraceContext }
-\translator { \RhythmicStaffContext}
-\translator { \StaffContext }
-\translator { \VoiceContext }
-\translator { \StaffGroupContext }
-\translator { \ChordNamesContext }
-\translator { \GrandStaffContext }
-\translator { \LyricsContext }
-\translator { \ThreadContext }
-\translator { \PianoStaffContext }
-\translator { \LyricsVoiceContext }
-\translator { \StaffContainerContext }
-
-
diff --git a/ly/params-init.ly b/ly/params-init.ly
new file mode 100644
index 0000000000..64fe88deee
--- /dev/null
+++ b/ly/params-init.ly
@@ -0,0 +1,46 @@
+\version "1.3.146"
+% JUNKME.
+
+%% deprecated
+papersizename = \papersize 
+
+% ly2dvi now uses `papersize' internally (and on cmd line)
+papersize = \papersize
+
+% FIXME
+% direct PostScript line height for single line staffs
+lineheight = 14
+
+paperfile = \papersize + "-init.ly"
+
+% paperfile = "a4-init.ly"
+
+\include \paperfile
+\include "paper-init.ly"
+
+staffspace = \staffheight / 4.0
+stafflinethickness = \staffspace / 10.0
+outputscale = \staffheight / 4.0
+
+\translator { \NoteNamesContext }
+\translator { \ScoreContext }
+\translator { \ChoirStaffContext}
+\translator { \InnerChoirStaffContext}
+
+\translator { \RhythmicStaffContext}
+\translator { \StaffContext }
+\translator { \VoiceContext}
+\translator { \StaffGroupContext }
+\translator { \InnerStaffGroupContext }
+\translator { \ChordNamesContext }
+\translator { \GrandStaffContext}
+\translator { \LyricsContext }
+\translator { \ThreadContext}
+\translator { \PianoStaffContext}
+\translator { \LyricsVoiceContext }
+\translator { \StaffContainerContext }
+
+
+
+
+
diff --git a/ly/params.ly b/ly/params.ly
deleted file mode 100644
index 13bab53ff6..0000000000
--- a/ly/params.ly
+++ /dev/null
@@ -1,46 +0,0 @@
-\version "1.3.146"
-% JUNKME.
-
-%% deprecated
-papersizename = \papersize 
-
-% ly2dvi now uses `papersize' internally (and on cmd line)
-papersize = \papersize
-
-% FIXME
-% direct PostScript line height for single line staffs
-lineheight = 14
-
-paperfile = \papersize + ".ly"
-
-% paperfile = "a4.ly"
-
-\include \paperfile
-\include "paper.ly"
-
-staffspace = \staffheight / 4.0
-stafflinethickness = \staffspace / 10.0
-outputscale = \staffheight / 4.0
-
-\translator { \NoteNamesContext }
-\translator { \ScoreContext }
-\translator { \ChoirStaffContext}
-\translator { \InnerChoirStaffContext}
-\translator { \GraceContext}
-\translator { \RhythmicStaffContext}
-\translator { \StaffContext }
-\translator { \VoiceContext}
-\translator { \StaffGroupContext }
-\translator { \InnerStaffGroupContext }
-\translator { \ChordNamesContext }
-\translator { \GrandStaffContext}
-\translator { \LyricsContext }
-\translator { \ThreadContext}
-\translator { \PianoStaffContext}
-\translator { \LyricsVoiceContext }
-\translator { \StaffContainerContext }
-
-
-
-
-
diff --git a/ly/part-paper-init.ly b/ly/part-paper-init.ly
new file mode 100644
index 0000000000..4e8fea418f
--- /dev/null
+++ b/ly/part-paper-init.ly
@@ -0,0 +1,10 @@
+\version "1.3.146"
+
+% JUNKME
+%part-paper-init.ly
+
+\paper {
+	\translator { \OrchestralPartStaffContext }
+	\translator { \ScoreContext skipBars = ##t }
+}
+
diff --git a/ly/part-paper.ly b/ly/part-paper.ly
deleted file mode 100644
index 5c2c17f170..0000000000
--- a/ly/part-paper.ly
+++ /dev/null
@@ -1,10 +0,0 @@
-\version "1.3.146"
-
-% JUNKME
-%part-paper.ly
-
-\paper {
-	\translator { \OrchestralPartStaffContext }
-	\translator { \ScoreContext skipBars = ##t }
-}
-
diff --git a/ly/performer-init.ly b/ly/performer-init.ly
new file mode 100644
index 0000000000..8cfa8204bd
--- /dev/null
+++ b/ly/performer-init.ly
@@ -0,0 +1,131 @@
+\version "1.3.146"
+%
+% setup for Request->Element conversion. Guru-only
+%
+StaffContext = \translator {
+	\type "Staff_performer"
+	\name Staff
+	\accepts Voice
+
+	\consists "Key_performer"
+	\consists "Tempo_performer"
+	\consists "Time_signature_performer"
+	dynamicStyle = #"dynamic"
+}
+\translator { \StaffContext }
+\translator { \StaffContext
+  \name RhythmicStaff
+}
+
+
+VoiceContext = \translator {
+	\type "Performer_group_performer"
+	\name Voice
+% All notes fall to Grace if you leave Thread out (huh?)
+	\consists "Dynamic_performer"
+	\consists "Span_dynamic_performer"
+	\consists "Piano_pedal_performer"
+	\consists "Grace_position_performer"
+	\accepts Thread
+	\accepts Grace
+}
+\translator { \VoiceContext }
+
+ThreadContext = \translator {
+	\type "Performer_group_performer"
+	\name Thread
+	\consists "Note_performer"
+	\consists "Tie_performer"
+}
+\translator { \ThreadContext }
+
+\translator {
+	\type "Grace_performer_group"
+	\name Grace
+	\consists "Note_performer"
+	\consists "Tie_performer"
+	 \consists "Swallow_performer"
+
+	 weAreGraceContext = #t
+}
+
+\translator
+{
+	\type "Performer_group_performer"
+	\name VoiceTwo\consists "Note_performer"
+
+}
+
+GrandStaffContext = \translator {
+	\type "Performer_group_performer"
+	\name GrandStaff
+	\accepts RhythmicStaff
+	\accepts Staff
+}
+\translator { \GrandStaffContext }
+
+PianoStaffContext = \translator {
+        \type "Performer_group_performer"
+	\name "PianoStaff"
+	\accepts Staff
+}
+\translator { \PianoStaffContext }
+
+\translator {
+	\type "Performer_group_performer"
+	\consists "Lyric_performer"
+	\name LyricsVoice
+}
+
+\translator{
+	\type "Performer_group_performer"
+	\name ChoirStaff
+	\accepts Staff
+}
+\translator { 
+	\type "Staff_performer"
+	\accepts LyricsVoice
+	\name Lyrics
+	\consists "Time_signature_performer"
+	\consists "Tempo_performer"
+}
+
+\translator {
+	\type "Staff_performer"
+	\accepts ChordNameVoice
+	\name ChordNames
+}
+
+\translator {
+	\type Performer_group_performer
+	\consists Note_performer
+	\name ChordNameVoice	
+}
+
+\translator {
+	\type Performer_group_performer
+
+	\name StaffGroup
+	\accepts Staff
+}
+
+ScoreContext = \translator {
+	\type "Score_performer"
+
+	\name Score
+	instrument = #"bright acoustic"
+	\accepts Staff
+	\accepts GrandStaff
+	\accepts PianoStaff
+	\accepts Lyrics 
+	\accepts StaffGroup
+	\accepts ChoirStaff
+	\accepts RhythmicStaff
+	\accepts ChordNames
+	\consists "Swallow_performer"
+
+	dynamicAbsoluteVolumeFunction = #default-dynamic-absolute-volume
+	instrumentEqualizer = #default-instrument-equalizer
+}
+\translator { \ScoreContext }
+
diff --git a/ly/performer.ly b/ly/performer.ly
deleted file mode 100644
index 8cfa8204bd..0000000000
--- a/ly/performer.ly
+++ /dev/null
@@ -1,131 +0,0 @@
-\version "1.3.146"
-%
-% setup for Request->Element conversion. Guru-only
-%
-StaffContext = \translator {
-	\type "Staff_performer"
-	\name Staff
-	\accepts Voice
-
-	\consists "Key_performer"
-	\consists "Tempo_performer"
-	\consists "Time_signature_performer"
-	dynamicStyle = #"dynamic"
-}
-\translator { \StaffContext }
-\translator { \StaffContext
-  \name RhythmicStaff
-}
-
-
-VoiceContext = \translator {
-	\type "Performer_group_performer"
-	\name Voice
-% All notes fall to Grace if you leave Thread out (huh?)
-	\consists "Dynamic_performer"
-	\consists "Span_dynamic_performer"
-	\consists "Piano_pedal_performer"
-	\consists "Grace_position_performer"
-	\accepts Thread
-	\accepts Grace
-}
-\translator { \VoiceContext }
-
-ThreadContext = \translator {
-	\type "Performer_group_performer"
-	\name Thread
-	\consists "Note_performer"
-	\consists "Tie_performer"
-}
-\translator { \ThreadContext }
-
-\translator {
-	\type "Grace_performer_group"
-	\name Grace
-	\consists "Note_performer"
-	\consists "Tie_performer"
-	 \consists "Swallow_performer"
-
-	 weAreGraceContext = #t
-}
-
-\translator
-{
-	\type "Performer_group_performer"
-	\name VoiceTwo\consists "Note_performer"
-
-}
-
-GrandStaffContext = \translator {
-	\type "Performer_group_performer"
-	\name GrandStaff
-	\accepts RhythmicStaff
-	\accepts Staff
-}
-\translator { \GrandStaffContext }
-
-PianoStaffContext = \translator {
-        \type "Performer_group_performer"
-	\name "PianoStaff"
-	\accepts Staff
-}
-\translator { \PianoStaffContext }
-
-\translator {
-	\type "Performer_group_performer"
-	\consists "Lyric_performer"
-	\name LyricsVoice
-}
-
-\translator{
-	\type "Performer_group_performer"
-	\name ChoirStaff
-	\accepts Staff
-}
-\translator { 
-	\type "Staff_performer"
-	\accepts LyricsVoice
-	\name Lyrics
-	\consists "Time_signature_performer"
-	\consists "Tempo_performer"
-}
-
-\translator {
-	\type "Staff_performer"
-	\accepts ChordNameVoice
-	\name ChordNames
-}
-
-\translator {
-	\type Performer_group_performer
-	\consists Note_performer
-	\name ChordNameVoice	
-}
-
-\translator {
-	\type Performer_group_performer
-
-	\name StaffGroup
-	\accepts Staff
-}
-
-ScoreContext = \translator {
-	\type "Score_performer"
-
-	\name Score
-	instrument = #"bright acoustic"
-	\accepts Staff
-	\accepts GrandStaff
-	\accepts PianoStaff
-	\accepts Lyrics 
-	\accepts StaffGroup
-	\accepts ChoirStaff
-	\accepts RhythmicStaff
-	\accepts ChordNames
-	\consists "Swallow_performer"
-
-	dynamicAbsoluteVolumeFunction = #default-dynamic-absolute-volume
-	instrumentEqualizer = #default-instrument-equalizer
-}
-\translator { \ScoreContext }
-
diff --git a/ly/property-init.ly b/ly/property-init.ly
new file mode 100644
index 0000000000..84c8d2d46e
--- /dev/null
+++ b/ly/property-init.ly
@@ -0,0 +1,157 @@
+% property-init.ly
+
+\version "1.3.146"
+
+stemUp = \property Voice.Stem \set #'direction = #1
+stemDown = \property Voice.Stem \set #'direction = #-1 
+stemBoth= \property Voice.Stem \revert #'direction
+
+slurUp   = \property Voice.Slur \override #'direction = #1
+slurDown = \property Voice.Slur \override #'direction = #-1
+slurBoth = \property Voice.Slur \revert #'direction 
+shiftOn  = \property Voice.NoteColumn \override #'horizontal-shift = #1
+shiftOnn  = \property Voice.NoteColumn \override #'horizontal-shift = #2
+shiftOnnn  = \property Voice.NoteColumn \override #'horizontal-shift = #3
+shiftOff  = \property Voice.NoteColumn \revert #'horizontal-shift 
+
+tieUp = \property Voice.Tie \override #'direction = #1
+tieDown = \property Voice.Tie \override #'direction = #-1
+tieBoth = \property Voice.Tie \revert #'direction 
+
+dynamicUp  = {
+  \property Voice.DynamicText \override #'direction = #1
+  \property Voice.DynamicLineSpanner \override #'direction = #1
+}
+dynamicDown = {
+  \property Voice.DynamicText \override #'direction = #-1
+  \property Voice.DynamicLineSpanner \override #'direction = #-1
+}
+dynamicBoth = {
+  \property Voice.DynamicText \revert #'direction
+  \property Voice.DynamicLineSpanner \revert #'direction
+}
+
+scriptUp  = {
+  \property Voice.TextScript \override #'direction = #1
+  \property Voice.Script \override #'direction = #1
+}
+scriptDown = {
+  \property Voice.TextScript \override #'direction = #-1
+  \property Voice.Script \override #'direction = #-1
+}
+scriptBoth = {
+  \property Voice.TextScript \revert #'direction
+  \property Voice.Script \revert #'direction
+}
+
+tupletUp  = {
+  \property Voice.TupletBracket \override #'direction = #1
+  \property Voice.TupletBracket \override #'direction = #1
+}
+tupletDown = {
+  \property Voice.TupletBracket \override #'direction = #-1
+  \property Voice.TupletBracket \override #'direction = #-1
+}
+tupletBoth = {
+  \property Voice.TupletBracket \revert #'direction
+  \property Voice.TupletBracket \revert #'direction
+}
+
+
+
+cadenzaOn = \property Score.timing = ##f
+cadenzaOff = {
+  \property Score.timing = ##t
+  \property Score.measurePosition = #(make-moment 0 1)
+}
+
+newpage = {
+  \break
+  % urg, only works for TeX output
+  \context Score \outputproperty #(make-type-checker 'paper-column-interface)
+    #'between-system-string = #"\\newpage"
+}
+
+% dynamic dir?  text script, articulation script dir?	
+oneVoice = { 	
+  \stemBoth
+  \slurBoth
+  \tieBoth
+  \shiftOff
+}
+
+voiceOne = {
+  \stemUp
+  \slurUp
+  \tieUp
+}
+
+voiceTwo = {
+  \stemDown
+  \slurDown
+  \tieDown
+}
+   
+voiceThree = {
+  \stemUp
+  \slurUp
+  \tieUp
+  \shiftOn
+}
+
+voiceFour = {
+  \stemDown
+  \slurDown
+  \tieDown
+  \shiftOn
+}
+
+% There's also dash, but setting dash period/length should be fixed.
+slurDotted = \property Voice.Slur \override #'dashed = #1
+slurSolid = \property Voice.Slur \revert #'dashed
+tieDotted = \property Voice.Tie \override #'dashed = #1
+tieSolid = \property Voice.Tie \revert #'dashed
+
+	
+tiny  = 
+	\property Voice.fontSize= -2
+
+
+small  = 
+	\property Voice.fontSize= -1
+
+
+normalsize = {
+	\property Voice.fontSize= 0
+}
+
+normalkey = {
+	\property Staff.keyOctaviation = ##f
+}
+
+specialkey = {
+	\property Staff.keyOctaviation = ##t
+}
+
+% End the incipit and print a ``normal line start''.
+endincipit = \notes{
+    \partial 16 s16  % Hack to handle e.g. \bar ".|" \endincipit
+    \context Staff \outputproperty #(make-type-checker 'clef-interface) #'full-size-change = ##t
+    \context Staff \outputproperty #(make-type-checker 'clef-interface) #'non-default = ##t
+    \bar ""
+}
+
+autoBeamOff = \property Voice.noAutoBeaming = ##t
+autoBeamOn = \property Voice.noAutoBeaming = ##f
+
+emptyText = \property Voice.textNonEmpty = ##f
+fatText = \property Voice.textNonEmpty = ##t
+
+showStaffSwitch = \property PianoStaff.followVoice = ##t
+hideStaffSwitch = \property PianoStaff.followVoice = ##f
+
+
+% To remove a Volta bracet or some other graphical object,
+% set it to turnOff. Example: \property Staff.VoltaBracket = \turnOff
+
+turnOff = #'((meta .  ((interfaces . ()))))
diff --git a/ly/property.ly b/ly/property.ly
deleted file mode 100644
index 1ebe98c918..0000000000
--- a/ly/property.ly
+++ /dev/null
@@ -1,157 +0,0 @@
-% property.ly
-
-\version "1.3.146"
-
-stemUp = \property Voice.Stem \set #'direction = #1
-stemDown = \property Voice.Stem \set #'direction = #-1 
-stemBoth= \property Voice.Stem \revert #'direction
-
-slurUp   = \property Voice.Slur \override #'direction = #1
-slurDown = \property Voice.Slur \override #'direction = #-1
-slurBoth = \property Voice.Slur \revert #'direction 
-shiftOn  = \property Voice.NoteColumn \override #'horizontal-shift = #1
-shiftOnn  = \property Voice.NoteColumn \override #'horizontal-shift = #2
-shiftOnnn  = \property Voice.NoteColumn \override #'horizontal-shift = #3
-shiftOff  = \property Voice.NoteColumn \revert #'horizontal-shift 
-
-tieUp = \property Voice.Tie \override #'direction = #1
-tieDown = \property Voice.Tie \override #'direction = #-1
-tieBoth = \property Voice.Tie \revert #'direction 
-
-dynamicUp  = {
-  \property Voice.DynamicText \override #'direction = #1
-  \property Voice.DynamicLineSpanner \override #'direction = #1
-}
-dynamicDown = {
-  \property Voice.DynamicText \override #'direction = #-1
-  \property Voice.DynamicLineSpanner \override #'direction = #-1
-}
-dynamicBoth = {
-  \property Voice.DynamicText \revert #'direction
-  \property Voice.DynamicLineSpanner \revert #'direction
-}
-
-scriptUp  = {
-  \property Voice.TextScript \override #'direction = #1
-  \property Voice.Script \override #'direction = #1
-}
-scriptDown = {
-  \property Voice.TextScript \override #'direction = #-1
-  \property Voice.Script \override #'direction = #-1
-}
-scriptBoth = {
-  \property Voice.TextScript \revert #'direction
-  \property Voice.Script \revert #'direction
-}
-
-tupletUp  = {
-  \property Voice.TupletBracket \override #'direction = #1
-  \property Voice.TupletBracket \override #'direction = #1
-}
-tupletDown = {
-  \property Voice.TupletBracket \override #'direction = #-1
-  \property Voice.TupletBracket \override #'direction = #-1
-}
-tupletBoth = {
-  \property Voice.TupletBracket \revert #'direction
-  \property Voice.TupletBracket \revert #'direction
-}
-
-
-
-cadenzaOn = \property Score.timing = ##f
-cadenzaOff = {
-  \property Score.timing = ##t
-  \property Score.measurePosition = #(make-moment 0 1)
-}
-
-newpage = {
-  \break
-  % urg, only works for TeX output
-  \context Score \outputproperty #(make-type-checker 'paper-column-interface)
-    #'between-system-string = #"\\newpage"
-}
-
-% dynamic dir?  text script, articulation script dir?	
-oneVoice = { 	
-  \stemBoth
-  \slurBoth
-  \tieBoth
-  \shiftOff
-}
-
-voiceOne = {
-  \stemUp
-  \slurUp
-  \tieUp
-}
-
-voiceTwo = {
-  \stemDown
-  \slurDown
-  \tieDown
-}
-   
-voiceThree = {
-  \stemUp
-  \slurUp
-  \tieUp
-  \shiftOn
-}
-
-voiceFour = {
-  \stemDown
-  \slurDown
-  \tieDown
-  \shiftOn
-}
-
-% There's also dash, but setting dash period/length should be fixed.
-slurDotted = \property Voice.Slur \override #'dashed = #1
-slurSolid = \property Voice.Slur \revert #'dashed
-tieDotted = \property Voice.Tie \override #'dashed = #1
-tieSolid = \property Voice.Tie \revert #'dashed
-
-	
-tiny  = 
-	\property Voice.fontSize= -2
-
-
-small  = 
-	\property Voice.fontSize= -1
-
-
-normalsize = {
-	\property Voice.fontSize= 0
-}
-
-normalkey = {
-	\property Staff.keyOctaviation = ##f
-}
-
-specialkey = {
-	\property Staff.keyOctaviation = ##t
-}
-
-% End the incipit and print a ``normal line start''.
-endincipit = \notes{
-    \partial 16 s16  % Hack to handle e.g. \bar ".|" \endincipit
-    \context Staff \outputproperty #(make-type-checker 'clef-interface) #'full-size-change = ##t
-    \context Staff \outputproperty #(make-type-checker 'clef-interface) #'non-default = ##t
-    \bar ""
-}
-
-autoBeamOff = \property Voice.noAutoBeaming = ##t
-autoBeamOn = \property Voice.noAutoBeaming = ##f
-
-emptyText = \property Voice.textNonEmpty = ##f
-fatText = \property Voice.textNonEmpty = ##t
-
-showStaffSwitch = \property PianoStaff.followVoice = ##t
-hideStaffSwitch = \property PianoStaff.followVoice = ##f
-
-
-% To remove a Volta bracet or some other graphical object,
-% set it to turnOff. Example: \property Staff.VoltaBracket = \turnOff
-
-turnOff = #'((meta .  ((interfaces . ()))))
diff --git a/ly/scale-definitions-init.ly b/ly/scale-definitions-init.ly
new file mode 100644
index 0000000000..b3268ffef9
--- /dev/null
+++ b/ly/scale-definitions-init.ly
@@ -0,0 +1,100 @@
+\version "1.3.146"
+
+
+major = #'(
+    (0 . 0)
+    (1 . 0)
+    (2 . 0)
+    (3 . 0)
+    (4 . 0)
+    (5 . 0)
+    (6 . 0)
+  )
+
+minor = #'(
+    (0 . 0)
+    (1 . 0)
+    (2 . -1)
+    (3 . 0)
+    (4 . 0)
+    (5 . -1)
+    (6 . -1)
+    )
+
+
+ionian = #'(
+    (0 . 0)
+    (1 . 0)
+    (2 . 0)
+    (3 . 0)
+    (4 . 0)
+    (5 . 0)
+    (6 . 0)
+  )  
+
+
+locrian = #'(
+    (0 . 0)
+    (1 . -1)
+    (2 . -1)
+    (3 . 0)
+    (4 . -1)
+    (5 . -1)
+    (6 . -1)
+  )  
+
+
+aeolian = #'(
+    (0 . 0)
+    (1 . 0)
+    (2 . -1)
+    (3 . 0)
+    (4 . 0)
+    (5 . -1)
+    (6 . -1)
+    )
+
+
+mixolydian = #'(
+    (0 . 0)
+    (1 . 0)
+    (2 . 0)
+    (3 . 0)
+    (4 . 0)
+    (5 . 0)
+    (6 . -1)
+  )  
+
+
+lydian = #'(
+    (0 . 0)
+    (1 . 0)
+    (2 . 0)
+    (3 . 1)
+    (4 . 0)
+    (5 . 0)
+    (6 . 0)
+  )  
+
+
+phrygian = #'(
+    (0 . 0)
+    (1 . -1)
+    (2 . -1)
+    (3 . 0)
+    (4 . 0)
+    (5 . -1)
+    (6 . -1)
+)  
+
+
+dorian = #'(
+    (0 . 0)
+    (1 . 0)
+    (2 . -1)
+    (3 . 0)
+    (4 . 0)
+    (5 . 0)
+    (6 . -1)
+  )
+
diff --git a/ly/scale-definitions.ly b/ly/scale-definitions.ly
deleted file mode 100644
index b3268ffef9..0000000000
--- a/ly/scale-definitions.ly
+++ /dev/null
@@ -1,100 +0,0 @@
-\version "1.3.146"
-
-
-major = #'(
-    (0 . 0)
-    (1 . 0)
-    (2 . 0)
-    (3 . 0)
-    (4 . 0)
-    (5 . 0)
-    (6 . 0)
-  )
-
-minor = #'(
-    (0 . 0)
-    (1 . 0)
-    (2 . -1)
-    (3 . 0)
-    (4 . 0)
-    (5 . -1)
-    (6 . -1)
-    )
-
-
-ionian = #'(
-    (0 . 0)
-    (1 . 0)
-    (2 . 0)
-    (3 . 0)
-    (4 . 0)
-    (5 . 0)
-    (6 . 0)
-  )  
-
-
-locrian = #'(
-    (0 . 0)
-    (1 . -1)
-    (2 . -1)
-    (3 . 0)
-    (4 . -1)
-    (5 . -1)
-    (6 . -1)
-  )  
-
-
-aeolian = #'(
-    (0 . 0)
-    (1 . 0)
-    (2 . -1)
-    (3 . 0)
-    (4 . 0)
-    (5 . -1)
-    (6 . -1)
-    )
-
-
-mixolydian = #'(
-    (0 . 0)
-    (1 . 0)
-    (2 . 0)
-    (3 . 0)
-    (4 . 0)
-    (5 . 0)
-    (6 . -1)
-  )  
-
-
-lydian = #'(
-    (0 . 0)
-    (1 . 0)
-    (2 . 0)
-    (3 . 1)
-    (4 . 0)
-    (5 . 0)
-    (6 . 0)
-  )  
-
-
-phrygian = #'(
-    (0 . 0)
-    (1 . -1)
-    (2 . -1)
-    (3 . 0)
-    (4 . 0)
-    (5 . -1)
-    (6 . -1)
-)  
-
-
-dorian = #'(
-    (0 . 0)
-    (1 . 0)
-    (2 . -1)
-    (3 . 0)
-    (4 . 0)
-    (5 . 0)
-    (6 . -1)
-  )
-
diff --git a/ly/script-init.ly b/ly/script-init.ly
new file mode 100644
index 0000000000..b0fcedd3dc
--- /dev/null
+++ b/ly/script-init.ly
@@ -0,0 +1,47 @@
+\version "1.3.146"
+
+
+dashHat= "marcato"
+dashPlus= "stopped"
+dashDash= "tenuto"
+dashBar= "staccatissimo"
+dashLarger= "accent"
+dashDot= "staccato"
+
+
+thumb = \script "thumb"
+accent = \script "accent"
+marcato = \script "marcato"
+staccatissimo = \script "staccatissimo"
+
+% portato is indicated
+% either by
+%   *  slurred & dotted notes. 
+%or by
+%  * slur and dash notes.
+% Neither are  really supported, but c4-.-- should work.
+% portato = \script "portato"
+
+fermata = \script "fermata"
+stopped = \script "stopped"
+staccato = \script "staccato"
+tenuto = \script "tenuto"
+upbow = \script "upbow"
+downbow = \script "downbow"
+lheel = \script "lheel"
+rheel = \script "rheel"
+ltoe = \script "ltoe"
+rtoe = \script "rtoe"
+turn = \script "turn"
+open = \script "open"
+flageolet = \script "flageolet"
+reverseturn = \script "reverseturn"
+trill = \script "trill"
+prall = \script "prall"
+mordent = \script "mordent"
+prallprall = \script "prallprall"
+prallmordent = \script "prallmordent"
+upprall = \script "upprall"
+downprall = \script "downprall"
+segno = \script "segno"
+coda = \script "coda"
diff --git a/ly/script.ly b/ly/script.ly
deleted file mode 100644
index b0fcedd3dc..0000000000
--- a/ly/script.ly
+++ /dev/null
@@ -1,47 +0,0 @@
-\version "1.3.146"
-
-
-dashHat= "marcato"
-dashPlus= "stopped"
-dashDash= "tenuto"
-dashBar= "staccatissimo"
-dashLarger= "accent"
-dashDot= "staccato"
-
-
-thumb = \script "thumb"
-accent = \script "accent"
-marcato = \script "marcato"
-staccatissimo = \script "staccatissimo"
-
-% portato is indicated
-% either by
-%   *  slurred & dotted notes. 
-%or by
-%  * slur and dash notes.
-% Neither are  really supported, but c4-.-- should work.
-% portato = \script "portato"
-
-fermata = \script "fermata"
-stopped = \script "stopped"
-staccato = \script "staccato"
-tenuto = \script "tenuto"
-upbow = \script "upbow"
-downbow = \script "downbow"
-lheel = \script "lheel"
-rheel = \script "rheel"
-ltoe = \script "ltoe"
-rtoe = \script "rtoe"
-turn = \script "turn"
-open = \script "open"
-flageolet = \script "flageolet"
-reverseturn = \script "reverseturn"
-trill = \script "trill"
-prall = \script "prall"
-mordent = \script "mordent"
-prallprall = \script "prallprall"
-prallmordent = \script "prallmordent"
-upprall = \script "upprall"
-downprall = \script "downprall"
-segno = \script "segno"
-coda = \script "coda"
diff --git a/ly/spanners-init.ly b/ly/spanners-init.ly
new file mode 100644
index 0000000000..3fdf1b7b31
--- /dev/null
+++ b/ly/spanners-init.ly
@@ -0,0 +1,53 @@
+\version "1.3.146"
+
+cr = \spanrequest \start "crescendo"
+decr = \spanrequest  \start "decrescendo"
+rc = \spanrequest   \stop "crescendo"
+rced = \spanrequest \stop "decrescendo"
+
+cresc = \notes {
+  \commandspanrequest \start "crescendo" 
+  \property Voice.crescendoText = #"cresc."
+  \property Voice.crescendoSpanner = #'dashed-line
+}
+
+% ah, this is handy: maybe drop resetting of properties in
+% dynamic-engraver ?
+endcresc = \notes {
+  \commandspanrequest \stop "crescendo" 
+  \property Voice.crescendoText \unset
+  \property Voice.crescendoSpanner \unset
+}
+
+dim = \notes {
+  \commandspanrequest \start "decrescendo" 
+  \property Voice.decrescendoText = #"dim."
+  \property Voice.decrescendoSpanner = #'dashed-line
+}
+
+enddim = \notes {
+  \commandspanrequest \stop "decrescendo" 
+   \property Voice.decrescendoText \unset
+ \property Voice.decrescendoSpanner \unset
+}
+
+%{
+
+cresc = \spanrequest \start "crescendo"
+endcresc = \spanrequest \stop "crescendo"
+
+%}
+
+% better name sustainstart/stop? 
+sustainDown = \spanrequest \start "Sustain"
+sustainUp = \spanrequest \stop "Sustain"
+
+unaCorda = \spanrequest \start "UnaCorda"
+treCorde = \spanrequest \stop "UnaCorda"
+
+sostenutoDown = \spanrequest \start "Sostenuto"
+sostenutoUp = \spanrequest \stop "Sostenuto"
+
+%crescpoco = \property Voice.crescendoText = "cresc. poco a poco"
+%decresc = \property Voice.crescendoText = "decr."
+%dim = \property Voice.crescendoText = "dim."
diff --git a/ly/spanners.ly b/ly/spanners.ly
deleted file mode 100644
index 3fdf1b7b31..0000000000
--- a/ly/spanners.ly
+++ /dev/null
@@ -1,53 +0,0 @@
-\version "1.3.146"
-
-cr = \spanrequest \start "crescendo"
-decr = \spanrequest  \start "decrescendo"
-rc = \spanrequest   \stop "crescendo"
-rced = \spanrequest \stop "decrescendo"
-
-cresc = \notes {
-  \commandspanrequest \start "crescendo" 
-  \property Voice.crescendoText = #"cresc."
-  \property Voice.crescendoSpanner = #'dashed-line
-}
-
-% ah, this is handy: maybe drop resetting of properties in
-% dynamic-engraver ?
-endcresc = \notes {
-  \commandspanrequest \stop "crescendo" 
-  \property Voice.crescendoText \unset
-  \property Voice.crescendoSpanner \unset
-}
-
-dim = \notes {
-  \commandspanrequest \start "decrescendo" 
-  \property Voice.decrescendoText = #"dim."
-  \property Voice.decrescendoSpanner = #'dashed-line
-}
-
-enddim = \notes {
-  \commandspanrequest \stop "decrescendo" 
-   \property Voice.decrescendoText \unset
- \property Voice.decrescendoSpanner \unset
-}
-
-%{
-
-cresc = \spanrequest \start "crescendo"
-endcresc = \spanrequest \stop "crescendo"
-
-%}
-
-% better name sustainstart/stop? 
-sustainDown = \spanrequest \start "Sustain"
-sustainUp = \spanrequest \stop "Sustain"
-
-unaCorda = \spanrequest \start "UnaCorda"
-treCorde = \spanrequest \stop "UnaCorda"
-
-sostenutoDown = \spanrequest \start "Sostenuto"
-sostenutoUp = \spanrequest \stop "Sostenuto"
-
-%crescpoco = \property Voice.crescendoText = "cresc. poco a poco"
-%decresc = \property Voice.crescendoText = "decr."
-%dim = \property Voice.crescendoText = "dim."
diff --git a/make/out/lilypond.lsm b/make/out/lilypond.lsm
index 223d9c39f0..406f128e38 100644
--- a/make/out/lilypond.lsm
+++ b/make/out/lilypond.lsm
@@ -1,15 +1,15 @@
 Begin3
 Title: LilyPond
-Version: 1.4.4
-Entered-date: 27JUN01
+Version: 1.5.0
+Entered-date: 29JUN01
 Description: @BLURB@
 Keywords: music notation typesetting midi fonts engraving
 Author: hanwen@cs.uu.nl (Han-Wen Nienhuys)
 	janneke@gnu.org (Jan Nieuwenhuizen)
 Maintained-by: hanwen@stack.nl (Han-Wen Nienhuys)
 Primary-site: sunsite.unc.edu /pub/Linux/apps/sound/convert
-	1000k lilypond-1.4.4.tar.gz 
+	1000k lilypond-1.5.0.tar.gz 
 Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
-	1000k lilypond-1.4.4.tar.gz 
+	1000k lilypond-1.5.0.tar.gz 
 Copying-policy: GPL
 End
diff --git a/make/out/lilypond.redhat.spec b/make/out/lilypond.redhat.spec
index d9044e4aab..e79cb62513 100644
--- a/make/out/lilypond.redhat.spec
+++ b/make/out/lilypond.redhat.spec
@@ -1,11 +1,11 @@
 %define info yes
 
 Name: lilypond
-Version: 1.4.4
+Version: 1.5.0
 Release: 1
 License: GPL
 Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.4.4.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.0.tar.gz
 Summary: Create and print music notation 
 URL: http://www.cs.uu.nl/~hanwen/lilypond
 BuildRoot: /tmp/lilypond-install
diff --git a/make/out/lilypond.suse.spec b/make/out/lilypond.suse.spec
index 864cd17a94..ba89252f43 100644
--- a/make/out/lilypond.suse.spec
+++ b/make/out/lilypond.suse.spec
@@ -14,11 +14,11 @@
 
 Distribution: SuSE Linux 7.0 (i386)
 Name: lilypond
-Version: 1.4.4
+Version: 1.5.0
 Release: 2
 Copyright:    GPL
 Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.4.4.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.0.tar.gz
 # music notation software for.. ?
 Summary: A program for printing sheet music.
 URL: http://www.lilypond.org/
diff --git a/midi2ly/duration.cc b/midi2ly/duration.cc
index 5289273358..6e1e9b54ae 100644
--- a/midi2ly/duration.cc
+++ b/midi2ly/duration.cc
@@ -44,8 +44,8 @@ Duration::duration_type_b (int t)
 void
 Duration::compress (Rational m)
 {
-  plet_.iso_i_ *= m.num_i ();
-  plet_.type_i_ *= m.den_i (); 
+  plet_.iso_i_ *= m.num ();
+  plet_.type_i_ *= m.den (); 
 }
 
 Rational
diff --git a/ps/lilyponddefs.ps b/ps/lilyponddefs.ps
index 53fed1bb2c..114d0beaaa 100644
--- a/ps/lilyponddefs.ps
+++ b/ps/lilyponddefs.ps
@@ -46,29 +46,6 @@
 	grestore
 } bind def
 
-%
-% FIXME.  translate to middle of box.
-%
-
-/draw-box % breapth width depth height
-{
-	/h exch def
-	/d exch def
-	/w exch def
-	/b exch def
-	gsave
-
-	0 setlinewidth
-	b neg d neg rmoveto
-	b w add 0 rlineto
-	0 d h add rlineto
-	b w add neg 0 rlineto
-	closepath % 0 d h add neg rlineto
-	fill
-
-	grestore
-} bind def
-
 /start-line % height
 {
 	dup base-line-skip gt {
diff --git a/ps/music-drawing-routines.ps b/ps/music-drawing-routines.ps
index 2ed8afd583..86b39dff6b 100644
--- a/ps/music-drawing-routines.ps
+++ b/ps/music-drawing-routines.ps
@@ -1,7 +1,9 @@
-%!PS-Adobe-1.0: lily.ps 
+%!PS-Adobe-1.0: music-drawing-routines.ps
 %
 % Functions for direct and embedded PostScript
 
+
+% FIXME: set with individual symbols
 % round cappings 
 1 setlinecap
 
@@ -10,17 +12,81 @@
 	1 copy mul exch 1 copy mul add sqrt 
 } bind def 
 
-/draw_beam % width slope thick 
-{ 
-        2 div /beam_thick exch def 
-        /beam_slope exch def 
-        /beam_wd exch def 
-        beam_slope beam_wd mul /beam_ht exch def 
-        0 beam_thick neg moveto  
-        beam_wd beam_ht rlineto  
-        0 beam_thick 2 mul rlineto 
-        0 beam_thick lineto 
-        closepath fill 
+% FIXME.  translate to middle of box.
+% Nice rectangle with rounded corners
+% FIXME: linewidth hardcoded.  check: too round?
+/draw_box % breapth width depth height
+{
+	%% FIXME: hardcoded
+	currentdict /testing known {
+		%% real thin lines for testing
+		/l 0.005 def
+	}{
+		/l 0.05 def
+	} ifelse
+
+	0 setlinecap
+	l setlinewidth
+	1 setlinejoin
+
+	l 2 div sub /h exch def
+	l 2 div sub /d exch def
+
+	%% UGH huh?
+	%% Where does this correction come from?
+	%% Why don't we need this in x direction?
+	h l 2 div sub /h exch def
+	d l 2 div sub /d exch def
+
+	l 2 div sub /w exch def
+	l 2 div sub /b exch def
+
+	b neg d neg moveto
+	b w add 0 rlineto
+	0 d h add rlineto
+	b w add neg 0 rlineto
+	0 d h add neg rlineto
+
+	currentdict /testing known {
+		%% outline only, for testing:
+		stroke
+	}{
+		closepath gsave stroke grestore fill
+	} ifelse
+} bind def
+
+% Nice beam with rounded corners
+% FIXME: linewidth hardcoded.  check: too round?
+/draw_beam % slope width thick 
+{
+	%% FIXME: hardcoded
+	currentdict /testing known {
+		%% real thin lines for testing
+		/l 0.01 def
+	}{
+		/l 0.1 def
+	} ifelse
+	l 2 div setlinewidth
+
+ 	0 setlinecap
+	1 setlinejoin
+
+	l sub /t exch def
+	l sub /w exch def
+	w mul /h exch def
+
+	l 2 div t 2 div neg moveto
+	w h rlineto
+	0 t rlineto
+	w neg h neg rlineto
+	0 t neg rlineto
+
+	currentdict /testing known {
+		%% outline only, for testing:
+		stroke
+	}{
+		closepath gsave stroke grestore fill
+	} ifelse
 } bind def 
 
 /draw_repeat_slash % width slope thick
diff --git a/scm/grob-description.scm b/scm/grob-description.scm
index 9d19e537d0..4ee94ca851 100644
--- a/scm/grob-description.scm
+++ b/scm/grob-description.scm
@@ -518,11 +518,9 @@
 	(SpanBar . (
 		(break-align-symbol . Staff_bar)
 		(bar-size-procedure . ,Span_bar::get_bar_size) 
-		(molecule-callback . ,Bar::brew_molecule)
+		(molecule-callback . ,Span_bar::brew_molecule)
 		(visibility-lambda . ,begin-of-line-invisible)
 		(X-extent-callback . ,Span_bar::width_callback)
-		(Y-offset-callbacks . (,Span_bar::center_on_spanned_callback))
-		
 		(breakable . #t)
 		(glyph . "|")
 		(before-line-breaking-callback . ,Span_bar::before_line_breaking)
diff --git a/scm/lily.scm b/scm/lily.scm
index 2b9d42b5cb..a0bfc1dec2 100644
--- a/scm/lily.scm
+++ b/scm/lily.scm
@@ -5,7 +5,7 @@
 ;;;; (c) 1998--2001 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;;; Han-Wen Nienhuys <hanwen@cs.uu.nl>
 
-;;; Library funtions
+;;; Library functions
 
 (use-modules (ice-9 regex))
 
diff --git a/scm/ps.scm b/scm/ps.scm
index 9528079126..8e4dc95ecf 100644
--- a/scm/ps.scm
+++ b/scm/ps.scm
@@ -52,10 +52,9 @@
        "lilypondpaperoutputscale div scalefont setfont } bind def "
        "\n"))
 
-
   (define (beam width slope thick)
     (string-append
-     (numbers->string (list width slope thick)) " draw_beam" ))
+     (numbers->string (list slope width thick)) " draw_beam" ))
 
   (define (comment s)
     (string-append "% " s))
@@ -108,7 +107,7 @@
   
   (define (filledbox breapth width depth height) 
     (string-append (numbers->string (list breapth width depth height))
-		   " draw-box" ))
+		   " draw_box" ))
 
   ;; obsolete?
   (define (font-def i s)
@@ -127,6 +126,7 @@
      " {exch pop //systemdict /run get exec} "
      (ly-gulp-file "music-drawing-routines.ps")
      "{ exch pop //systemdict /run get exec } "
+     (if (defined? 'ps-testing) "\n /testing true def" "")
     ))
   
   (define (lily-def key val)
@@ -171,7 +171,7 @@ lilypondpaperoutputscale lilypondpaperoutputscale scale
   
   (define (stem breapth width depth height) 
     (string-append (numbers->string (list breapth width depth height))
-		   " draw-box" ))
+		   " draw_box" ))
 
   (define (stop-line)
       "}\nstop-line\n")
diff --git a/scm/tex.scm b/scm/tex.scm
index 4c8904415d..c002a22b3f 100644
--- a/scm/tex.scm
+++ b/scm/tex.scm
@@ -97,13 +97,14 @@
   (define (header-end)
     (string-append
      "\\special{\\string! "
-
+     
      ;; URG: ly-gulp-file: now we can't use scm output without Lily
      (if use-regex
 	 ;; fixed in 1.3.4 for powerpc -- broken on Windows
 	 (regexp-substitute/global #f "\n"
 				   (ly-gulp-file "music-drawing-routines.ps") 'pre " %\n" 'post)
 	 (ly-gulp-file "music-drawing-routines.ps"))
+     (if (defined? 'ps-testing) "/testing true def%\n" "")
      "}"
      "\\input lilyponddefs\\newdimen\\outputscale \\outputscale=\\lilypondpaperoutputscale pt\\turnOnPostScript"))
 
@@ -164,13 +165,18 @@
     "}\\vss}\\interscoreline\n")
   (define (stop-last-line)
     "}\\vss}")
-  (define (filledbox breapth width depth height) 
+  (define (xfilledbox breapth width depth height) 
     (string-append 
      "\\kern" (number->dim (- breapth))
      "\\vrule width " (number->dim (+ breapth width))
      "depth " (number->dim depth)
      "height " (number->dim height) " "))
 
+  (define (filledbox breapth width depth height) 
+    (embedded-ps
+     (string-append (numbers->string (list breapth width depth height))
+		   " draw_box" )))
+
   (define (text s)
     (string-append "\\hbox{" (output-tex-string s) "}"))
   
diff --git a/scm/translator-property-description.scm b/scm/translator-property-description.scm
index 5900032c1b..f5aacffd24 100644
--- a/scm/translator-property-description.scm
+++ b/scm/translator-property-description.scm
@@ -179,6 +179,10 @@ procedure? "visibility-lambda function for explicit Key changes;
 
 (translator-property-description 'followVoice boolean?
 				 "if set, note heads are tracked  across staff switches by a thin line")
+(translator-property-description 'fontSize integer?
+				 "Used to set the relative size of all grobs
+in a context. This is done using the @code{Font_size_engraver}.")
+
 (translator-property-description 'forceClef boolean? "Show clef symbol, even if it hasn't changed. Only active for the first clef after the property is set, not for the full staff.")
 (translator-property-description 'forgetAccidentals boolean? "do
 not set localKeySignature when a note alterated differently from