From 9efbad2d9487a05b04423e7e9f062968e8f8eaf4 Mon Sep 17 00:00:00 2001
From: Han-Wen Nienhuys <hanwen@xs4all.nl>
Date: Fri, 23 Oct 1998 15:51:54 +0200
Subject: [PATCH] release: 1.1.0

---
 Documentation/man/GNUmakefile                 |   4 +-
 Documentation/topdocs/PATCHES.yo              |   8 +-
 NEWS                                          | 567 ++--------------
 NEWS-1.0                                      | 516 +++++++++++++++
 TODO                                          |   7 +-
 VERSION                                       |   4 +-
 aclocal.m4                                    |  52 +-
 config.make.in                                |   1 +
 configure                                     | 394 +++++++++---
 configure.in                                  |  14 +-
 dstreamrc                                     |   4 +
 flower/dstream.cc                             |   2 +-
 flower/include/dictionary.hh                  |   6 +-
 init/GNUmakefile                              |   4 +-
 init/catalan.ly                               |  73 +++
 init/declarations.ly                          |   2 +
 init/paper20.ly                               |   2 +-
 init/script.ly                                |   1 +
 input/GNUmakefile                             |   2 +-
 input/test/thumb.ly                           |  22 +
 lily/GNUmakefile                              |   3 +
 lily/abbrev.cc                                |   2 +-
 lily/abbreviation-beam-engraver.cc            |   6 +-
 lily/atom.cc                                  |   6 +-
 lily/auto-plet-engraver.cc                    |  27 +-
 lily/axis-group-element.cc                    |   5 +-
 lily/axis-group-item.cc                       |   4 +-
 lily/axis-group-spanner.cc                    |  14 +-
 lily/bar-column-engraver.cc                   |   2 +-
 lily/bar-column.cc                            |   2 +-
 lily/bar-engraver.cc                          |   6 +-
 lily/bar-number-engraver.cc                   |   2 +-
 lily/beam-engraver.cc                         |  10 +-
 lily/beam.cc                                  |   2 +-
 lily/clef-engraver.cc                         |   8 +-
 lily/collision-engraver.cc                    |   2 +-
 lily/collision.cc                             |   4 +-
 lily/command-request.cc                       |  10 +-
 lily/dimensions.cc                            |  19 +
 lily/dot-column-engraver.cc                   |   2 +-
 lily/dot-column.cc                            |   4 +-
 lily/dynamic-engraver.cc                      |  18 +-
 lily/engraver-group.cc                        |   8 +-
 lily/engraver.cc                              |   4 +-
 lily/gourlay-breaking.cc                      |   2 +-
 lily/graphical-lisp-element.cc                |   0
 lily/hara-kiri-line-group-engraver.cc         |   2 +-
 lily/hara-kiri-vertical-group-spanner.cc      |   4 +-
 lily/head-engraver.cc                         |   7 +-
 lily/heads-engraver.cc                        |   6 +-
 lily/include/atom.hh                          |   4 +-
 lily/include/auto-plet-engraver.hh            |   4 +-
 lily/include/dimensions.hh                    |   2 +
 lily/include/engraver.hh                      |   1 +
 lily/include/lily-guile.hh                    |  22 +
 lily/include/lily-proto.hh                    |   7 +-
 lily/include/lookup.hh                        |  40 +-
 lily/include/main.hh                          |   2 +-
 lily/include/paper-def.hh                     |  10 +-
 lily/include/paper-outputter.hh               |  20 +-
 lily/include/paper-stream.hh                  |   5 +-
 lily/include/ps-lookup.hh                     |  40 --
 lily/include/ps-outputter.hh                  |  27 -
 lily/include/ps-stream.hh                     |  21 -
 lily/include/score-element-info.hh            |   2 +
 lily/include/score-engraver.hh                |   1 +
 lily/include/tex-lookup.hh                    |  43 --
 lily/include/tex-outputter.hh                 |  27 -
 lily/include/tex-stream.hh                    |  21 -
 lily/item.cc                                  |  12 +-
 lily/key-engraver.cc                          |  10 +-
 lily/key-performer.cc                         |  10 +-
 lily/line-of-score.cc                         |   2 +-
 lily/local-key-engraver.cc                    |  12 +-
 lily/local-key-item.cc                        |   4 +-
 lily/lookup.cc                                | 249 +++++---
 lily/lyric-engraver.cc                        |   6 +-
 lily/lyric-performer.cc                       |   6 +-
 lily/main.cc                                  |  67 +-
 lily/mark-engraver.cc                         |   6 +-
 lily/midi-item.cc                             |  12 +-
 lily/multi-measure-rest-engraver.cc           |   4 +-
 lily/music-list.cc                            |   8 +-
 lily/music-output-def.cc                      |   6 +-
 lily/musical-request.cc                       |  12 +-
 lily/my-lily-lexer.cc                         |   1 +
 lily/my-lily-parser.cc                        |  12 +-
 lily/note-column.cc                           |  10 +-
 lily/note-performer.cc                        |  14 +-
 lily/p-score.cc                               |  14 +-
 lily/paper-def.cc                             | 123 +++-
 lily/paper-outputter.cc                       | 201 +++++-
 lily/paper-stream.cc                          |   4 +-
 lily/parser.yy                                |  23 +-
 lily/performer.cc                             |   2 +-
 lily/pitch-squash-engraver.cc                 |   2 +-
 lily/plet-engraver.cc                         |  10 +-
 lily/plet-spanner.cc                          |   6 +-
 lily/plet-swallow-engraver.cc                 |   4 +-
 lily/priority-halign-engraver.cc              |   2 +-
 lily/ps-lookup.cc                             | 285 ---------
 lily/ps-outputter.cc                          |  80 ---
 lily/ps-stream.cc                             |  55 --
 lily/rest-collision-engraver.cc               |   2 +-
 lily/rest-collision.cc                        |   4 +-
 lily/rest-engraver.cc                         |   6 +-
 lily/rhythmic-column-engraver.cc              |   5 +-
 lily/rhythmic-head.cc                         |   2 +-
 lily/score-element-info.cc                    |   1 +
 lily/score-element.cc                         |  16 +-
 lily/score-engraver.cc                        |  27 +-
 lily/score-priority-engraver.cc               |   4 +-
 lily/scores.cc                                |  11 -
 lily/script-column.cc                         |   6 +-
 lily/script-engraver.cc                       |   4 +-
 lily/script.cc                                |   2 +-
 lily/separating-group-spanner.cc              |   4 +-
 lily/separating-line-group-engraver.cc        |   2 +-
 lily/single-malt-grouping-item.cc             |   4 +-
 lily/slur-engraver.cc                         |   8 +-
 lily/slur.cc                                  |   4 +-
 lily/span-bar-engraver.cc                     |   4 +-
 lily/span-score-bar-engraver.cc               |   2 +-
 lily/spanner.cc                               |   4 +-
 lily/staff-margin-engraver.cc                 |   2 +-
 lily/stem-engraver.cc                         |   8 +-
 lily/stem.cc                                  |   4 +-
 lily/super-element.cc                         |   2 +-
 lily/tex-lookup.cc                            | 209 ------
 lily/tex-outputter.cc                         |  79 ---
 lily/tex-stream.cc                            |  54 --
 lily/text-spanner.cc                          |   2 +-
 lily/tie.cc                                   |   6 +-
 lily/ties-engraver.cc                         |  18 +-
 lily/time-signature-engraver.cc               |   2 +-
 lily/time-signature-performer.cc              |   4 +-
 lily/timing-translator.cc                     |  26 +-
 lily/translator-group.cc                      |  16 +-
 make/out/lelievijver.lsm                      |   8 +-
 make/out/lilypond.lsm                         |   8 +-
 make/out/lilypond.spec                        |   4 +-
 make/stepmake.make                            |   2 +-
 make/toplevel.make.in                         |   2 +-
 mf/GNUmakefile                                |  41 +-
 mf/feta-autometric.mf                         |   2 +-
 mf/feta-beum.mf                               |   2 +-
 mf/feta-bolletjes.mf                          |   2 +-
 mf/feta-braces16.mf                           |   2 +-
 mf/feta-braces20.mf                           |   2 +-
 mf/feta-eindelijk.mf                          |  10 +-
 mf/feta-generic.mf                            |   2 +-
 mf/feta-klef.mf                               |   9 +-
 mf/feta-nummer.mf                             |   7 +-
 mf/feta-schrift.mf                            |  34 +-
 mf/feta-sleur.mf                              |   2 +-
 mf/feta-toevallig.mf                          |   2 +-
 mf/mfmp.ini                                   |   4 -
 mf/mfplain.ini                                |   3 +
 mf/out/feta11.afm                             |  95 +--
 mf/out/feta13.afm                             |  95 +--
 mf/out/feta16.afm                             |  95 +--
 mf/out/feta19.afm                             |  95 +--
 mf/out/feta20.afm                             |  95 +--
 mf/out/feta23.afm                             |  95 +--
 mf/out/feta26.afm                             |  95 +--
 ps/GNUmakefile                                |   4 +-
 scripts/mudela-book.py                        | 604 +++++++++++-------
 stepmake/Documentation/GNUmakefile            |  11 +-
 stepmake/Documentation/out/automake.txt       | 173 +++++
 stepmake/Documentation/out/layout.txt         |  31 +
 stepmake/Documentation/topdocs/GNUmakefile    |  10 +-
 .../Documentation/topdocs/out/AUTHORS.txt     |  26 +
 stepmake/Documentation/topdocs/out/BLURB      |   6 +
 .../Documentation/topdocs/out/INSTALL.txt     | 292 +++++++++
 stepmake/NEWS                                 |  17 +
 stepmake/VERSION                              |   2 +-
 stepmake/aclocal.m4                           |  50 +-
 stepmake/bin/GNUmakefile                      |   7 +-
 stepmake/bin/package-diff.py                  |   7 +-
 stepmake/config.make.in                       |   1 +
 stepmake/configure                            | 107 +++-
 stepmake/make/GNUmakefile                     |   5 +-
 stepmake/make/out/stepmake.lsm                |   8 +-
 stepmake/make/out/stepmake.spec               |   4 +-
 stepmake/make/toplevel.make.in                |  27 +-
 stepmake/stepmake/GNUmakefile                 |   7 +-
 stepmake/stepmake/documentation-targets.make  |   2 +-
 stepmake/stepmake/executable-vars.make        |   4 +
 stepmake/stepmake/generic-targets.make        |   9 +-
 stepmake/stepmake/generic-vars.make           |  21 +-
 stepmake/stepmake/install-out-rules.make      |   2 +
 stepmake/stepmake/install-out-targets.make    |  41 ++
 stepmake/stepmake/install-out-vars.make       |   2 +
 stepmake/stepmake/install-out.sub.make        |   5 +
 stepmake/stepmake/install-outfiles.make       |  15 -
 stepmake/stepmake/install-outfiles.sub.make   |   5 -
 stepmake/stepmake/install-rules.make          |   2 +
 stepmake/stepmake/install-targets.make        |  49 ++
 stepmake/stepmake/install-vars.make           |   2 +
 stepmake/stepmake/install.sub.make            |   5 +
 stepmake/stepmake/installfiles.make           |  15 -
 stepmake/stepmake/metapost-rules.make         |   2 +-
 stepmake/stepmake/toplevel-targets.make       |   7 +-
 tex/GNUmakefile                               |   2 +-
 tex/lilyponddefs.ps                           |  11 +-
 205 files changed, 3581 insertions(+), 2835 deletions(-)
 create mode 100644 NEWS-1.0
 create mode 100644 init/catalan.ly
 create mode 100644 input/test/thumb.ly
 create mode 100644 lily/dimensions.cc
 create mode 100644 lily/graphical-lisp-element.cc
 delete mode 100644 lily/include/ps-lookup.hh
 delete mode 100644 lily/include/ps-outputter.hh
 delete mode 100644 lily/include/ps-stream.hh
 delete mode 100644 lily/include/tex-lookup.hh
 delete mode 100644 lily/include/tex-outputter.hh
 delete mode 100644 lily/include/tex-stream.hh
 delete mode 100644 lily/ps-lookup.cc
 delete mode 100644 lily/ps-outputter.cc
 delete mode 100644 lily/ps-stream.cc
 delete mode 100644 lily/tex-lookup.cc
 delete mode 100644 lily/tex-outputter.cc
 delete mode 100644 lily/tex-stream.cc
 delete mode 100644 mf/mfmp.ini
 create mode 100644 mf/mfplain.ini
 create mode 100644 stepmake/Documentation/out/automake.txt
 create mode 100644 stepmake/Documentation/out/layout.txt
 create mode 100644 stepmake/Documentation/topdocs/out/AUTHORS.txt
 create mode 100644 stepmake/Documentation/topdocs/out/BLURB
 create mode 100644 stepmake/Documentation/topdocs/out/INSTALL.txt
 create mode 100644 stepmake/stepmake/install-out-rules.make
 create mode 100644 stepmake/stepmake/install-out-targets.make
 create mode 100644 stepmake/stepmake/install-out-vars.make
 create mode 100644 stepmake/stepmake/install-out.sub.make
 delete mode 100644 stepmake/stepmake/install-outfiles.make
 delete mode 100644 stepmake/stepmake/install-outfiles.sub.make
 create mode 100644 stepmake/stepmake/install-rules.make
 create mode 100644 stepmake/stepmake/install-targets.make
 create mode 100644 stepmake/stepmake/install-vars.make
 create mode 100644 stepmake/stepmake/install.sub.make
 delete mode 100644 stepmake/stepmake/installfiles.make

diff --git a/Documentation/man/GNUmakefile b/Documentation/man/GNUmakefile
index 6f2e9d4b4a..5fd71fb083 100644
--- a/Documentation/man/GNUmakefile
+++ b/Documentation/man/GNUmakefile
@@ -2,7 +2,7 @@
 
 depth = ../..
 
-STEPMAKE_TEMPLATES=documentation
+STEPMAKE_TEMPLATES=documentation install-out
 SECTION=1
 MANTXT = $(addprefix $(outdir)/, $(addsuffix .txt,$(basename $(TEXINFO_FILES) .texinfo)))
 MANGROFF = $(addprefix $(outdir)/, $(addsuffix .$(SECTION),$(basename $(YO_FILES) .yo)))
@@ -16,8 +16,6 @@ default: $(MANGROFF)
 INSTALLATION_OUT_FILES=$(MANGROFF)
 INSTALLATION_OUT_DIR=$(mandir)/man$(SECTION)
 
-include $(stepdir)/install-outfiles.make
-
 local-WWW: $(MANGROFF:.1=.html)
 	$(PYTHON) $(step-bindir)/ls-latex.py --package=$(topdir) --title 'Manual pages for LilyPond' $(YO_FILES) \
 	  | sed "s!$(outdir)/!!g" > $(outdir)/index.html
diff --git a/Documentation/topdocs/PATCHES.yo b/Documentation/topdocs/PATCHES.yo
index 87a328b11f..1b20b7c37a 100644
--- a/Documentation/topdocs/PATCHES.yo
+++ b/Documentation/topdocs/PATCHES.yo
@@ -40,10 +40,16 @@ verb(
 Then, from the top of Lily's source tree, type
 
 verb(
+    make dist
     make diff
 )
 
-which leaves your patch as file(./lilypond-0.1.73.jcn1.diff).
+which rolls the tarball file(../releases/lilypond-0.1.73.tar.gz)
+and leaves your patch as file(./lilypond-0.1.73.jcn1.diff).
+footnote('Make diff' generates a patch between two tarballs.  For 
+more info type 'make diff help=='.  We assume that there is a tarball 
+file(lilypond-0.1.73.tar.gz) in the directory file(../releases).
+
 
 If you didn't configure Lily using --srcdir, you can do:
 
diff --git a/NEWS b/NEWS
index 5cff9ea377..4cf107903c 100644
--- a/NEWS
+++ b/NEWS
@@ -1,515 +1,60 @@
-pl 17
-	- fixed RPM building.
+1.1.0
 
-pl 16.hwn1
- 	- ridiculous slur dims fixed.
- 	- ly2dvi32.py -> ly2dvi.py, ly2dvi.sh -> ly2dvi-old
- 	- use re iso. regex for python stuff.
- 	- bf: mudela-book.py
- 	- updated install directions.  Made lilypond-login for csh
- 	- bf: installdirs of MF stuff
- 	- Dictionary implementation using hash tables (LilyPond is 3% faster)
- 	- Cache [non]group_l_arr () calls in translator-group.cc (LilyPond is 4% faster)
+pl 18.exp
+	- use C++ RTTI iso access_Xxx ()
+	- junk Graphical_lisp_element
+	- catalan.ly
 
-pl 16.uu1
-	- debian URLs, make/stepmake.make  patch
-	- further debian fixes.
-	
-pl 14.tca1
-	- partitas
-	- prall{mordent,prall} patch.
-
-******
-pl 16
-	- read property ydirection and tieYDirection for tie direction.
-	- bf: slur over rest.
-	- bf: include path
-	- part of jcn2
-	- configure --enable-guile
-
-pl 15.jcn1
- 	- autoconf on mf,mfont mp,mpost
+pl 17.tca1
+ 	- rewrite of mudela-book
  
-pl 15.am
-	- Lots of patches from *Adrian* *Mariano*!
-
-**********
-
-pl 15
-pl 14.hwn1
-	- \lyrics iso \lyric (mudela 1.0.7)
-	- cleaned up real_expression syntax.
-	- removed optional_semicolon nonterminal after toplevel assignment
-	- MInterval Music::time_int () -> Moment Music::duration ()
-	- junked Music_iterator::daddy_iter_l_
-	- junked Sequential_music::offset_mom_
-	- tempo compression:
-		* syntax: \times 2/3 Music
-		* Compressed_music, Compressed_music_iterator
-	- flower: init rational to 0
-	- flower: removed P?Cursor<>::P?Cursor (), using pointer iso ref now.
-	- don't install into TeX, but into ${datadir}/{mf,tex,ly} (todo: ps)
-
-
-*********
-pl 14
-
-pl 13.uu1
-	- syntax for \translator: (\name  "Name")
-	- bfs for footer
-	- bf: init/{book,center}-fragment.ly, YODL nofooter stuff. 
-	- bf: redeclaration
-	- bf: doc fixes
-	- bfs: egcs 1.1
-
-pl 13.mb1
-	- bf: Lookup::afm_find, the width was undefined for the feta fonts.
-	- bf: refman.yo
-
-pl 13.jcn5
-	- bf: init/paper* missing `;'
-	- lilyponddefs.ps fixes
-	- crude output name fix, see scores.cc
-
-pl 13.jcn4
-	- some ps output fixes
-	- lilyponddefs.ps: some sane implemenations
-	- removed (some) ghostscript internals
-
-pl 13.jcn3
-	- PostScript output version 0.0; do
-	      export GS_LIB=$HOME/usr/src/lilypond/tex
-	      export GS_FONTPATH=$HOME/usr/src/lilypond/mf/out
-	      make -C mf pfa
-	      lilypond -t example-1  # or try: lilypond -t twinkle :-)
-	      gv lelie.ps
-	- ps:
-	  * lots of output fixes, chars, strings
-	  * tex/lilyponddefs.ps: added rather braindead defs
-
-pl 13.jcn2
-	- tex/lily-ps-defs.ps (./tex?)
-	- grand output rehack
-	  * dropped {dimen,tex}.{cc,hh}
-	  * {ps,tex} stuf to {Ps,Tex}_lookup
-	  * init/table*.ly: added #parameters
-	- ps fonts:
-	  * ps-to-pfa.py generates valid type-3 fonts
-	  * do: make -C mf pfa
-	  * set: GS_FONT=GS_FONTPATH=$HOME/usr/src/lilypond/mf/out
-
-pl 13.jcn1
-	- crude postscript type 3 font: 
-	   make sure to have mfplain.mem metapost precompiled macros
-	   make -C mf ps
-	   gv out/feta20.sp
-
-********
-
-pl 12.mb1
-	- bf: feta-timesig.mf Added horizontal space, minor corrections.
-	- Changed meaning of Staff.timeSignatureStyle:
-		C	Use C and stroked C for 4/4,2/2
-		old	Use old style mensuration marks
-		1	Use single number
-		Cn/m	Set symbol explicitly, n/m=2/2 or 4/4	
-		oldn/m	Set symbol explicitly, n/m=2/2,3/2,3/4,4/4,6/4 or 9/4.
-	  All other time signatures are typeset with the default two-digit
-	  layout.
-		
-
-pl 12.jcn2
-	- Lookup abstract base class
-	- Lookup/Symtable(s): separation of input/output
-
-pl 12.jcn1
-	- preparations for braindead PostScript output
-
-pl 12.hwn3
-	- praeludium-fuga-E to relative mode
-	- bf: mudela-mode.el
-	- bf: BIBINPUTS
-	- more dutch glossary + explanations
-	- table-to-html fixes
-pl 12.hwn2
-	- bf: mymycode in .yo
-	- VERSION to out/
-	- add VPATH to mutopia
-	- access_Identifier (bool): (non)copy arg now explicit.
-	- bf: lilypond-latex.tex
-  
-
-
-pl 12.hwn1
-	- \remove "Engraver_type";
-	- \output "bla" -> output = "bla" (mudela 0.1.6)
-	- \property defaultclef -> \property defaultClef
-	- naming of access_{Engraver,Performer,Translator_group} ()
-	- changed syntax for \translator in \paper{} (mudela 0.1.6)
-	- declared contexts:
-
-		StaffContext = \translator { .. }
-		\translator { \StaffContext }
-
-	- elt_b -> elem_b
-	- bf: add Separating_line_group_engraver to RhythmicStaff.
-
-
-pl 12.am1
-	- large doc patch, ChoireStaff -> ChoirStaff
-
-*******
-pl 12
-
-pl 11.uu2
-	- added Transposed_music for mixing transposition and relative 
-
-pl 11.jcn1
-	- bf: config.make striproff
-	- texinfo
-pl 11.mb2
- 	- feta-timesig.mf: Added some flesh on C and C2,
- 	  added old-style mensuration marks.
- 
-pl 11.mb1
- 	- Added feta-timesig.mf, font for C and alla breve.
-
-
-pl 11.uu1
-	- new \property: meterSignatureStyle for C and C2 time sigs
-	- bf: BIBINPUTS
-	- stepmake 53
-	- bf: gif vs. png stuff
-
-*******
-pl 11
-
-pl 10.uu2
-	- plet-spanner fix. 
-	- large doc patch (thanks Adrian)
-
-pl 10.jbr1
-        - aclocal.m4, stepmake/aclocal.m4: Choose specific python
-        - stepmake/bin/release.py: Use the same python calling process
-        - make/lilypond-vars.make: PATH should not use PATHSEP.  It is fine 
-          to hard code it to `:' on both Windows NT and UNIX.
-        - stepmake/bin/package-zip32.sh: Perform configure with a specific
-          python, ie cygwin32 python on Windows NT
-
-pl 10.uu1
-	- junked \octave
-	- marginBreakPriority, direction==LEFT
-	- mf-to-table NT fix (JBR)
-	- createKeyOnClefChange property
-
-
-pl 10.jcn1
- 	- mf-to-xpms for Harmonia
-  
-pl 9.jbr1
-        - scripts/convert-mudela.py: We must close infile and outfile before
-          a rename occurs.  NT Windows locks open files.
-          stepmake/bin/package-zip32.sh: renamed all python bins to:
-          <filename>.py in NT Windows distribution.
-
-
-*********
-pl 10
-
-pl 9.jcn1
-	- started gnuisation of website
-	  * filetype and size
-	  * 'no gifs due to patent problems'
-	- bumped stepmake version nr (again):
-	  please update stepmake/VERSION after making changes to stepmake...
-  
-pl 9.hwn1
-	- do default midi,paper by toplevel \paper / \midi (mudela 1.0.4)
-	- bf: error if no Score context
-	- notename table now can be declared as well.
-	- junked \clear
-
-*********
-pl 9
-	
-pl 8.uu1
-	- junked \staff, \multi
-	- bf Music_list::Music_list (Music_list const&)
-	- AC_SUBST(PATHSEP,DIRSEP)
-	- generate Documentation/tex/out/*.bib (AM)
-	- a4 fixes (AM)
-	- bf: metafont-*.make
-	- parser.yy: intlist mods. (mudela 1.0.2)
-	- \melodic -> \notes (mudela 1.0.3)
-	- typo: calcalute_dependencies ()
-
-pl 8.jcn3
-	- gif -> png
-	    * ps-to-pngs.sh
-	    * stepmake
-	    * website
-	    * yodl-1.31.4 (to be released)
-	- target 'texinfo' -> 'info'
-
-pl 8.jcn2
-	- more doco in texinfo (with yodl pl3)
-	- bf's: package-diff
-
-pl 8.jcn1
- 	- removed tutorial from texinfo, yodl2texinfo is still rather broken
- 	- bf: setlocale NUMERIC to 'C'
- 	- removed ugly space from print-dimen
-
-*******
-pl 8
-	- make website fixes.
-
-pl 7.jcn1
- 	- minor stepmake/yodl fixes
- 
-pl 7.uu1
-
-	- changed separator in vocabulary
-	- added barAlways and defaultBarType properties.
-
-pl 7.hwn1
-	- changed header format.  Use a + for concatenation.
-
-		\header { key = "concat" + "string" }
-	
-	(mudela 1.0.2)	
-	- allow computed properties in translator definition
-
-		GrandStaff = \translator {
-			minVerticalAlign = 1.5\staffheight;
-			..
-		}
-
-	- Music inheritance. Datastructure and parser now follow this grammar
-
-		Music_list:
-			| Music_list Music
-			;
-		Simultaneous_music: '<' Music_list '>'
-			;
-		Sequential_music: '{' Music_list '}'
-			;
-
-	- bf: Item::do_unlink () don't iterate on attached_span_l_arr_,
-because it is changed by Spanner::set_bounds () (thanks Thomas)
-	- bf: URL Documentation/index (thanks EP)
-	- bf: twinkle.ly (thanks EP)
-	- bf: mi2mu (thanks Murray)
-	- bf: mudela-book --dependencies
-	- split LaTeX and TeX stuff
-
-pl 7.tca1
-	- more Partita's 
-
-pl 7.jbr1
-        - aclocal.m4,make/lilypond-vars.make: added PATHSEP as AC_SUBST to  
-          help support Windows NT doco build.  
-          Documentation/ntweb/index.yo: minor spelling changes
-
-
-*************
-pl 7
-	- refman updates by Adriano Moriano.
-
-
-pl 6.jbr2
-        - scripts/ly2dvi32.py: Fixed bug with lily input including multiple
-          files.  Also, we now stream out lilypond log one line at a time
-          for better feedback.
-
-pl 6.jbr1
-        - scripts/ly2dvi32.py: Added some doco, add postscript option, set
-          MFINPUTS along with TEXINPUTS, modified initialization sequence. 
-          Made some Python style changes per Han-Wen suggestions.
-        - Documentation/man/ly2dvi32.yo: Added a manpage for ly2dvi32.
-        - stepmake/bin/package-zip32.sh: Added doco distribution.  Removed
-          the installation directory after zip operation.  
-        - Documentation/ntweb/index.yo: LILYPOND -> LILYPONDPREFIX and 
-          comments about MiKTeX-1.11.
-
-pl 6.tca1
- 	- First movement of Partita II (BWV 826) in 
- 	  mutopia/J.S.Bach/Cembalo-Partitas. Lilypond output was so
- 	  beautiful that I'll have to write the rest of the partita.
-
-pl 6.uu2
-	- mudela-book.py --dependencies
-	- more doc fixes (AM)
-	- warn if declaring a keyword.
-	- \grouping 4 2*3; now accepted.
-	- patches to standchen.ly
-
-pl 6.uu1
-
-	- mudela-book handles \input now
-	- vocabulary fixes by Adrian Moriano
-
-********
-pl 6
-	- largish rehack:
-	  * Super_element is now an `abstract' class,
-	  * Paper_score directly contains one Line_of_score.  The
-	breaking/postprocessing/deletion is mixed with the output phase.
-	  * Hopefully this will save memory for large scores. (benchmarks, anyone?)
-	  * bf: Horizontal_vertical_group_item::do_unlink () should call
-
-	Axis_group_item::do_unlink ()
-
-	- changed LILYPOND to LILYPONDPREFIX
-	- added tfm and dvi target for mf/
-	- reincluded english.ly
-	- doc fixes (thanks, Adrian Moriano)
-	- doc fixes.
-	- mf: ex height added.
-
-pl 5.mb1
-      - Mudela 1.0.1: Changed \accidentals -> \keysignature
-      - Identifiers can be used in textual scripts:
-
-
-	tempoString="Allegro molto assai";
-
-		[...]
-
-	c^\tempoString 
-
-
-
-pl 5.jbr2
-        - aclocal.m4,config.h.in,flower/file-path.cc: Added PATHSEP and 
-          DIRSEP to configuration to support windows style path and pathlists.
-        - stepmake/bin/package-zip32.sh,stepmake/stepmake/package.make:
-          zip target now calls package-zip32.sh which creates winnt 
-          binary distribution zip file. xzip target continues to use 
-          package-zip.sh for Jan's cross-compiled version.
-        - lily/main.cc: Added a search for LILYPOND environment variable to
-          better facilitate binary distributions. 
-        - Documentation/README-W32.yo: Updated information on running lilypond
-          on winnt.
-          
-
-
-pl 5.jcn1
-	- (step)make fixes from yodl
-	- minor doco fixes
-	- bf: patch in website after 'make release'
-
-pl 5.jbr1
-	- Documentation/ntweb/Makefile: Used absolute url for LilyPond Homepage
-	- Documentation/ntweb/index.yo: Minor mods per Jan's suggestions
-
-
-
-
-*************
-pl 5
-
-pl 4.jcn1
-	- texinfo docs, lots of yodl TODO
-	- junked some makefiles
-	- ntweb: use BLURB
-	- bf: pletvisibility 
-	- adaptions for yodl-1.31.2's automatic texinfo conversion 
-	- reinclude of 1.jcn2:
-		  - renamed -alto -> viola
-		  - bf: avant-gardish six preludes
-		  - bf: ly2dvi warnings
-
-pl 4.jbr1
-	- stepmake/stepmake/install-outfiles.sub.make: fixed typo
-	- scripts/GNUmakefile: add ly2dvi32 to installation list and fixed
-	  included executable-targets.make to facilate installation of scripts
-	- Documentation/ntweb: Fixes to nt web page and added topdoc like
-	  automation.
-
-*********
-pl 4
-pl 3.mb2
-	- Changed text script alignment: center -> left
- 	- TeX commands counts as one character when calculating
-	  the length of a Text_def
-
-pl 3.jbr2
-         - Documentation/topdocs/index.yo: Added link to NT dist page
-         - Documentation/ntweb/: Added Makefile and index.yo to build the
-           NT dist page
-
-pl 3.hwn1
-	- stepmake hacking
-
-pl 3.uu1
-	- stepmake MAKEFILES -> STEPMAKE_TEMPLATES
-	- count \texcommands in tex string
-
-
-pl 3.jcn1
-       - bf: website: empty toplevel readme's
-       - bf: xs4all (again?)
-       - can't administer ftp site now: put patch into website
-
-
-pl 3.jbr1
-	- stepmake/stepmake/Executable_targets: UNIX cross-compile doesn't
-	  work with $(DOTEXE) on source of install command.
-	- stepmake/Generic_targets: creating multiple dirs with mkdir 
-	  requires -p option
-	- scripts/ly2dvi32.py: General and Winnt specific fixes
-
-
-*********
-pl 3
-
-pl 2.uu1
-        - solaris 2.6 compile/make website fixes.
-        - rm'd WWW.make
-        - stepmake .43
-        - pcnov095.win.tue.nl -> ftp.cs.uu.nl
-  
-pl 2.hwn1
-	- mi2mu naming of track output
-	- bf: do key restore sign only once
-	- ly2dvi32 preliminary version (JBR)
-	- bf index.html link
-	- bf mudela-book.py
-
-
-**********
-pl 2
-	- scalar compile stuff
-	- bf install directory
-	- YODL note
-	- GUI faq update
-	- bf ly2dvi
-	- stepmake split:  Po.make
-	- make check target
-	- dist AFMs and manpages
-	- split up mudela.yo in glossary.yo, tutorial.yo and refman.yo
-
-pl 1.jcn1
-	- www.digicash.com www.xs4all.nl
-	- fake msgfmt
-	- make uninstall fixes
-
-pl 1.jbr2 - aclocal.m4,stepmake/aclocal.m4,stepmake/stepmake/Variables.make:
-            Support install target for unix, unix cross compile, and 
-            Windows NT
-
-pl 1.jbr1 - stepmake/stepmake/Executable.make: DOTEXE was missplaced
-          - scripts/convert-mudela.py: program_id should write to stderr
-
-**************
-pl 1
-	- mi2mu fix: \key "D"
-	- \hoffset
-	- started new NEWS file 
-	- lots of stepmake hacking
-	- aclocal.m4 copied from stepmake
-	- ly2dvi 0.12
-	- build the doco from the source tree.
-	- include website in RPM
+pl 17.ms1
+ 	- added \thumb (used very often in cello music) in
+ 	  mf/feta-schrift.mf. 
+ 	- added /input/test/thumb.ly (example)
+
+pl 16.jcn1
+	- dashed-slur through scheme
+
+pl 15.jcn4
+	- more scheme hacks
+
+pl 15.jcn3
+	- try at scheme in Atom
+
+pl 15.jcn2 # rest of
+	- graphical-lisp-element + silly half hook-up with autuplet
+
+pl 17.jcn5
+	- stepmake pl59: templatised install (see mf/)
+	- reasonably ps/tex success (with guile-1.2):
+	  * input/kortjakje.ly
+	- lots more scm stuff
+	- bf: mf/mfplain.ini
+	- stepmake pl58: guile 1.3 configure fix
+	- working font-switch:
+	  guile-1.2 and -lreadline -ldl from 1.3 configure...
+
+pl 17.jcn4
+	- installable stepmake pl57
+	- urg, FIXME guile-1.3: 
+	  * don't install shared libs! configure can't handle
+	  * manually add: EXTRA_LIBS = -lguile -lreadline -ldl
+	  * lily's truely broken, downgrade do 1.2
+
+pl 17.jcn3
+	- lots of stuff still broken, notably font selection, just try 
+	   a()b
+	   or so
+	- tex output support
+	- all output through scheme
+	- option: f, output-format=X
+	- geile placebox 
+	- mf/mfplain.ini
+
+pl 17.jcn2
+	- all paper output through scheme, about half way
+
+pl 17.jcn1
+	- 16.jcn1
 
diff --git a/NEWS-1.0 b/NEWS-1.0
new file mode 100644
index 0000000000..c50fbdf8a7
--- /dev/null
+++ b/NEWS-1.0
@@ -0,0 +1,516 @@
+
+pl 17
+	- fixed RPM building.
+
+pl 16.hwn1
+ 	- ridiculous slur dims fixed.
+ 	- ly2dvi32.py -> ly2dvi.py, ly2dvi.sh -> ly2dvi-old
+ 	- use re iso. regex for python stuff.
+ 	- bf: mudela-book.py
+ 	- updated install directions.  Made lilypond-login for csh
+ 	- bf: installdirs of MF stuff
+ 	- Dictionary implementation using hash tables (LilyPond is 3% faster)
+ 	- Cache [non]group_l_arr () calls in translator-group.cc (LilyPond is 4% faster)
+
+pl 16.uu1
+	- debian URLs, make/stepmake.make  patch
+	- further debian fixes.
+	
+pl 14.tca1
+	- partitas
+	- prall{mordent,prall} patch.
+
+******
+pl 16
+	- read property ydirection and tieYDirection for tie direction.
+	- bf: slur over rest.
+	- bf: include path
+	- part of jcn2
+	- configure --enable-guile
+
+pl 15.jcn1
+ 	- autoconf on mf,mfont mp,mpost
+ 
+pl 15.am
+	- Lots of patches from *Adrian* *Mariano*!
+
+**********
+
+pl 15
+pl 14.hwn1
+	- \lyrics iso \lyric (mudela 1.0.7)
+	- cleaned up real_expression syntax.
+	- removed optional_semicolon nonterminal after toplevel assignment
+	- MInterval Music::time_int () -> Moment Music::duration ()
+	- junked Music_iterator::daddy_iter_l_
+	- junked Sequential_music::offset_mom_
+	- tempo compression:
+		* syntax: \times 2/3 Music
+		* Compressed_music, Compressed_music_iterator
+	- flower: init rational to 0
+	- flower: removed P?Cursor<>::P?Cursor (), using pointer iso ref now.
+	- don't install into TeX, but into ${datadir}/{mf,tex,ly} (todo: ps)
+
+
+*********
+pl 14
+
+pl 13.uu1
+	- syntax for \translator: (\name  "Name")
+	- bfs for footer
+	- bf: init/{book,center}-fragment.ly, YODL nofooter stuff. 
+	- bf: redeclaration
+	- bf: doc fixes
+	- bfs: egcs 1.1
+
+pl 13.mb1
+	- bf: Lookup::afm_find, the width was undefined for the feta fonts.
+	- bf: refman.yo
+
+pl 13.jcn5
+	- bf: init/paper* missing `;'
+	- lilyponddefs.ps fixes
+	- crude output name fix, see scores.cc
+
+pl 13.jcn4
+	- some ps output fixes
+	- lilyponddefs.ps: some sane implemenations
+	- removed (some) ghostscript internals
+
+pl 13.jcn3
+	- PostScript output version 0.0; do
+	      export GS_LIB=$HOME/usr/src/lilypond/tex
+	      export GS_FONTPATH=$HOME/usr/src/lilypond/mf/out
+	      make -C mf pfa
+	      lilypond -t example-1  # or try: lilypond -t twinkle :-)
+	      gv lelie.ps
+	- ps:
+	  * lots of output fixes, chars, strings
+	  * tex/lilyponddefs.ps: added rather braindead defs
+
+pl 13.jcn2
+	- tex/lily-ps-defs.ps (./tex?)
+	- grand output rehack
+	  * dropped {dimen,tex}.{cc,hh}
+	  * {ps,tex} stuf to {Ps,Tex}_lookup
+	  * init/table*.ly: added #parameters
+	- ps fonts:
+	  * ps-to-pfa.py generates valid type-3 fonts
+	  * do: make -C mf pfa
+	  * set: GS_FONT=GS_FONTPATH=$HOME/usr/src/lilypond/mf/out
+
+pl 13.jcn1
+	- crude postscript type 3 font: 
+	   make sure to have mfplain.mem metapost precompiled macros
+	   make -C mf ps
+	   gv out/feta20.sp
+
+********
+
+pl 12.mb1
+	- bf: feta-timesig.mf Added horizontal space, minor corrections.
+	- Changed meaning of Staff.timeSignatureStyle:
+		C	Use C and stroked C for 4/4,2/2
+		old	Use old style mensuration marks
+		1	Use single number
+		Cn/m	Set symbol explicitly, n/m=2/2 or 4/4	
+		oldn/m	Set symbol explicitly, n/m=2/2,3/2,3/4,4/4,6/4 or 9/4.
+	  All other time signatures are typeset with the default two-digit
+	  layout.
+		
+
+pl 12.jcn2
+	- Lookup abstract base class
+	- Lookup/Symtable(s): separation of input/output
+
+pl 12.jcn1
+	- preparations for braindead PostScript output
+
+pl 12.hwn3
+	- praeludium-fuga-E to relative mode
+	- bf: mudela-mode.el
+	- bf: BIBINPUTS
+	- more dutch glossary + explanations
+	- table-to-html fixes
+pl 12.hwn2
+	- bf: mymycode in .yo
+	- VERSION to out/
+	- add VPATH to mutopia
+	- access_Identifier (bool): (non)copy arg now explicit.
+	- bf: lilypond-latex.tex
+  
+
+
+pl 12.hwn1
+	- \remove "Engraver_type";
+	- \output "bla" -> output = "bla" (mudela 0.1.6)
+	- \property defaultclef -> \property defaultClef
+	- naming of access_{Engraver,Performer,Translator_group} ()
+	- changed syntax for \translator in \paper{} (mudela 0.1.6)
+	- declared contexts:
+
+		StaffContext = \translator { .. }
+		\translator { \StaffContext }
+
+	- elt_b -> elem_b
+	- bf: add Separating_line_group_engraver to RhythmicStaff.
+
+
+pl 12.am1
+	- large doc patch, ChoireStaff -> ChoirStaff
+
+*******
+pl 12
+
+pl 11.uu2
+	- added Transposed_music for mixing transposition and relative 
+
+pl 11.jcn1
+	- bf: config.make striproff
+	- texinfo
+pl 11.mb2
+ 	- feta-timesig.mf: Added some flesh on C and C2,
+ 	  added old-style mensuration marks.
+ 
+pl 11.mb1
+ 	- Added feta-timesig.mf, font for C and alla breve.
+
+
+pl 11.uu1
+	- new \property: meterSignatureStyle for C and C2 time sigs
+	- bf: BIBINPUTS
+	- stepmake 53
+	- bf: gif vs. png stuff
+
+*******
+pl 11
+
+pl 10.uu2
+	- plet-spanner fix. 
+	- large doc patch (thanks Adrian)
+
+pl 10.jbr1
+        - aclocal.m4, stepmake/aclocal.m4: Choose specific python
+        - stepmake/bin/release.py: Use the same python calling process
+        - make/lilypond-vars.make: PATH should not use PATHSEP.  It is fine 
+          to hard code it to `:' on both Windows NT and UNIX.
+        - stepmake/bin/package-zip32.sh: Perform configure with a specific
+          python, ie cygwin32 python on Windows NT
+
+pl 10.uu1
+	- junked \octave
+	- marginBreakPriority, direction==LEFT
+	- mf-to-table NT fix (JBR)
+	- createKeyOnClefChange property
+
+
+pl 10.jcn1
+ 	- mf-to-xpms for Harmonia
+  
+pl 9.jbr1
+        - scripts/convert-mudela.py: We must close infile and outfile before
+          a rename occurs.  NT Windows locks open files.
+          stepmake/bin/package-zip32.sh: renamed all python bins to:
+          <filename>.py in NT Windows distribution.
+
+
+*********
+pl 10
+
+pl 9.jcn1
+	- started gnuisation of website
+	  * filetype and size
+	  * 'no gifs due to patent problems'
+	- bumped stepmake version nr (again):
+	  please update stepmake/VERSION after making changes to stepmake...
+  
+pl 9.hwn1
+	- do default midi,paper by toplevel \paper / \midi (mudela 1.0.4)
+	- bf: error if no Score context
+	- notename table now can be declared as well.
+	- junked \clear
+
+*********
+pl 9
+	
+pl 8.uu1
+	- junked \staff, \multi
+	- bf Music_list::Music_list (Music_list const&)
+	- AC_SUBST(PATHSEP,DIRSEP)
+	- generate Documentation/tex/out/*.bib (AM)
+	- a4 fixes (AM)
+	- bf: metafont-*.make
+	- parser.yy: intlist mods. (mudela 1.0.2)
+	- \melodic -> \notes (mudela 1.0.3)
+	- typo: calcalute_dependencies ()
+
+pl 8.jcn3
+	- gif -> png
+	    * ps-to-pngs.sh
+	    * stepmake
+	    * website
+	    * yodl-1.31.4 (to be released)
+	- target 'texinfo' -> 'info'
+
+pl 8.jcn2
+	- more doco in texinfo (with yodl pl3)
+	- bf's: package-diff
+
+pl 8.jcn1
+ 	- removed tutorial from texinfo, yodl2texinfo is still rather broken
+ 	- bf: setlocale NUMERIC to 'C'
+ 	- removed ugly space from print-dimen
+
+*******
+pl 8
+	- make website fixes.
+
+pl 7.jcn1
+ 	- minor stepmake/yodl fixes
+ 
+pl 7.uu1
+
+	- changed separator in vocabulary
+	- added barAlways and defaultBarType properties.
+
+pl 7.hwn1
+	- changed header format.  Use a + for concatenation.
+
+		\header { key = "concat" + "string" }
+	
+	(mudela 1.0.2)	
+	- allow computed properties in translator definition
+
+		GrandStaff = \translator {
+			minVerticalAlign = 1.5\staffheight;
+			..
+		}
+
+	- Music inheritance. Datastructure and parser now follow this grammar
+
+		Music_list:
+			| Music_list Music
+			;
+		Simultaneous_music: '<' Music_list '>'
+			;
+		Sequential_music: '{' Music_list '}'
+			;
+
+	- bf: Item::do_unlink () don't iterate on attached_span_l_arr_,
+because it is changed by Spanner::set_bounds () (thanks Thomas)
+	- bf: URL Documentation/index (thanks EP)
+	- bf: twinkle.ly (thanks EP)
+	- bf: mi2mu (thanks Murray)
+	- bf: mudela-book --dependencies
+	- split LaTeX and TeX stuff
+
+pl 7.tca1
+	- more Partita's 
+
+pl 7.jbr1
+        - aclocal.m4,make/lilypond-vars.make: added PATHSEP as AC_SUBST to  
+          help support Windows NT doco build.  
+          Documentation/ntweb/index.yo: minor spelling changes
+
+
+*************
+pl 7
+	- refman updates by Adriano Moriano.
+
+
+pl 6.jbr2
+        - scripts/ly2dvi32.py: Fixed bug with lily input including multiple
+          files.  Also, we now stream out lilypond log one line at a time
+          for better feedback.
+
+pl 6.jbr1
+        - scripts/ly2dvi32.py: Added some doco, add postscript option, set
+          MFINPUTS along with TEXINPUTS, modified initialization sequence. 
+          Made some Python style changes per Han-Wen suggestions.
+        - Documentation/man/ly2dvi32.yo: Added a manpage for ly2dvi32.
+        - stepmake/bin/package-zip32.sh: Added doco distribution.  Removed
+          the installation directory after zip operation.  
+        - Documentation/ntweb/index.yo: LILYPOND -> LILYPONDPREFIX and 
+          comments about MiKTeX-1.11.
+
+pl 6.tca1
+ 	- First movement of Partita II (BWV 826) in 
+ 	  mutopia/J.S.Bach/Cembalo-Partitas. Lilypond output was so
+ 	  beautiful that I'll have to write the rest of the partita.
+
+pl 6.uu2
+	- mudela-book.py --dependencies
+	- more doc fixes (AM)
+	- warn if declaring a keyword.
+	- \grouping 4 2*3; now accepted.
+	- patches to standchen.ly
+
+pl 6.uu1
+
+	- mudela-book handles \input now
+	- vocabulary fixes by Adrian Moriano
+
+********
+pl 6
+	- largish rehack:
+	  * Super_element is now an `abstract' class,
+	  * Paper_score directly contains one Line_of_score.  The
+	breaking/postprocessing/deletion is mixed with the output phase.
+	  * Hopefully this will save memory for large scores. (benchmarks, anyone?)
+	  * bf: Horizontal_vertical_group_item::do_unlink () should call
+
+	Axis_group_item::do_unlink ()
+
+	- changed LILYPOND to LILYPONDPREFIX
+	- added tfm and dvi target for mf/
+	- reincluded english.ly
+	- doc fixes (thanks, Adrian Moriano)
+	- doc fixes.
+	- mf: ex height added.
+
+pl 5.mb1
+      - Mudela 1.0.1: Changed \accidentals -> \keysignature
+      - Identifiers can be used in textual scripts:
+
+
+	tempoString="Allegro molto assai";
+
+		[...]
+
+	c^\tempoString 
+
+
+
+pl 5.jbr2
+        - aclocal.m4,config.h.in,flower/file-path.cc: Added PATHSEP and 
+          DIRSEP to configuration to support windows style path and pathlists.
+        - stepmake/bin/package-zip32.sh,stepmake/stepmake/package.make:
+          zip target now calls package-zip32.sh which creates winnt 
+          binary distribution zip file. xzip target continues to use 
+          package-zip.sh for Jan's cross-compiled version.
+        - lily/main.cc: Added a search for LILYPOND environment variable to
+          better facilitate binary distributions. 
+        - Documentation/README-W32.yo: Updated information on running lilypond
+          on winnt.
+          
+
+
+pl 5.jcn1
+	- (step)make fixes from yodl
+	- minor doco fixes
+	- bf: patch in website after 'make release'
+
+pl 5.jbr1
+	- Documentation/ntweb/Makefile: Used absolute url for LilyPond Homepage
+	- Documentation/ntweb/index.yo: Minor mods per Jan's suggestions
+
+
+
+
+*************
+pl 5
+
+pl 4.jcn1
+	- texinfo docs, lots of yodl TODO
+	- junked some makefiles
+	- ntweb: use BLURB
+	- bf: pletvisibility 
+	- adaptions for yodl-1.31.2's automatic texinfo conversion 
+	- reinclude of 1.jcn2:
+		  - renamed -alto -> viola
+		  - bf: avant-gardish six preludes
+		  - bf: ly2dvi warnings
+
+pl 4.jbr1
+	- stepmake/stepmake/install-outfiles.sub.make: fixed typo
+	- scripts/GNUmakefile: add ly2dvi32 to installation list and fixed
+	  included executable-targets.make to facilate installation of scripts
+	- Documentation/ntweb: Fixes to nt web page and added topdoc like
+	  automation.
+
+*********
+pl 4
+pl 3.mb2
+	- Changed text script alignment: center -> left
+ 	- TeX commands counts as one character when calculating
+	  the length of a Text_def
+
+pl 3.jbr2
+         - Documentation/topdocs/index.yo: Added link to NT dist page
+         - Documentation/ntweb/: Added Makefile and index.yo to build the
+           NT dist page
+
+pl 3.hwn1
+	- stepmake hacking
+
+pl 3.uu1
+	- stepmake MAKEFILES -> STEPMAKE_TEMPLATES
+	- count \texcommands in tex string
+
+
+pl 3.jcn1
+       - bf: website: empty toplevel readme's
+       - bf: xs4all (again?)
+       - can't administer ftp site now: put patch into website
+
+
+pl 3.jbr1
+	- stepmake/stepmake/Executable_targets: UNIX cross-compile doesn't
+	  work with $(DOTEXE) on source of install command.
+	- stepmake/Generic_targets: creating multiple dirs with mkdir 
+	  requires -p option
+	- scripts/ly2dvi32.py: General and Winnt specific fixes
+
+
+*********
+pl 3
+
+pl 2.uu1
+        - solaris 2.6 compile/make website fixes.
+        - rm'd WWW.make
+        - stepmake .43
+        - pcnov095.win.tue.nl -> ftp.cs.uu.nl
+  
+pl 2.hwn1
+	- mi2mu naming of track output
+	- bf: do key restore sign only once
+	- ly2dvi32 preliminary version (JBR)
+	- bf index.html link
+	- bf mudela-book.py
+
+
+**********
+pl 2
+	- scalar compile stuff
+	- bf install directory
+	- YODL note
+	- GUI faq update
+	- bf ly2dvi
+	- stepmake split:  Po.make
+	- make check target
+	- dist AFMs and manpages
+	- split up mudela.yo in glossary.yo, tutorial.yo and refman.yo
+
+pl 1.jcn1
+	- www.digicash.com www.xs4all.nl
+	- fake msgfmt
+	- make uninstall fixes
+
+pl 1.jbr2 - aclocal.m4,stepmake/aclocal.m4,stepmake/stepmake/Variables.make:
+            Support install target for unix, unix cross compile, and 
+            Windows NT
+
+pl 1.jbr1 - stepmake/stepmake/Executable.make: DOTEXE was missplaced
+          - scripts/convert-mudela.py: program_id should write to stderr
+
+**************
+pl 1
+	- mi2mu fix: \key "D"
+	- \hoffset
+	- started new NEWS file 
+	- lots of stepmake hacking
+	- aclocal.m4 copied from stepmake
+	- ly2dvi 0.12
+	- build the doco from the source tree.
+	- include website in RPM
+
diff --git a/TODO b/TODO
index 6c18aa1a12..e22c3f60e8 100644
--- a/TODO
+++ b/TODO
@@ -10,14 +10,11 @@ grep for TODO and ugh/ugr/urg
 
 BUGS:
 
-	* document new TeX/mf layout
-
-	* egcs-1.1 -O2 -finline-functions  causes crash
+	
+	* add new glyphs to font.ly
 
 	* formatting of input stuff. 
 
-	* use real RTTI iso access_Stuff.
-
 	* \notes{ a \< b \cr } vs \notes{ a \< b \! }
 
 	* if possible, it might be nice for a warning to appear if someone does
diff --git a/VERSION b/VERSION
index 951bd357fd..ef23e353b8 100644
--- a/VERSION
+++ b/VERSION
@@ -1,7 +1,7 @@
 PACKAGE_NAME=LilyPond
 MAJOR_VERSION=1
-MINOR_VERSION=0
-PATCH_LEVEL=17
+MINOR_VERSION=1
+PATCH_LEVEL=0
 MY_PATCH_LEVEL=
 
 # use the above to send patches: MY_PATCH_LEVEL is always empty for a
diff --git a/aclocal.m4 b/aclocal.m4
index 5844b69dcf..1671ff15ef 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1,5 +1,5 @@
 dnl WARNING WARNING WARNING WARNING
-dnl do not edit! this is aclocal.m4, generated from stepmake/stepmake/../aclocal.m4
+dnl do not edit! this is aclocal.m4, generated from stepmake/aclocal.m4
 dnl aclocal.m4   -*-shell-script-*-
 dnl StepMake subroutines for configure.in
 
@@ -155,6 +155,16 @@ AC_DEFUN(AC_STEPMAKE_GXX, [
     fi
 ])
 
+AC_DEFUN(AC_STEPMAKE_GUILE, [
+    # urg, must check for different functions in libguile
+    # to force new check iso reading from cache
+    AC_CHECK_LIB(guile, scm_shell, \
+      LIBS="-lguile $LIBS" AC_DEFINE(HAVE_LIBGUILE), \
+      AC_CHECK_LIB(readline, readline) \
+      AC_CHECK_LIB(dl, dlopen) \
+      AC_CHECK_LIB(guile, scm_boot_guile))
+])
+
 AC_DEFUN(AC_STEPMAKE_INIT, [
 
     . $srcdir/VERSION
@@ -169,16 +179,44 @@ AC_DEFUN(AC_STEPMAKE_INIT, [
     package=`echo $PACKAGE_NAME | tr '[A-Z]' '[a-z]'`
     changequote([, ])dnl
 
+    # No versioning on directory names of sub-packages 
+    # urg, urg
+    stepmake=${datadir}/stepmake
+    presome=${prefix}
+    if test "$prefix" = "NONE"; then
+	    presome=${ac_default_prefix}
+    fi
+    stepmake=`echo ${stepmake} | sed "s!\\\${prefix}!$presome!"`
+
     if test "x$PACKAGE" = "xSTEPMAKE"; then
         echo Stepmake package!
 	(cd stepmake; rm -f stepmake; ln -s ../stepmake .)
 	(cd stepmake; rm -f bin; ln -s ../bin .)
 	AC_CONFIG_AUX_DIR(bin)
+	stepmake=stepmake
     else
         echo Package: $PACKAGE
-	AC_CONFIG_AUX_DIR(stepmake/bin)
+	# Check for installed stepmake
+	if test -d $stepmake; then
+	    echo Using installed stepmake: $stepmake
+	else
+	    stepmake='$(depth)'/stepmake
+	    echo Using local stepmake: $datadir/stepmake not found
+	fi
+	AC_CONFIG_AUX_DIR(\
+	  $HOME/usr/local/share/stepmake/bin\
+	  $HOME/usr/local/lib/stepmake/bin\
+	  $HOME/usr/share/stepmake/bin\
+	  $HOME/usr/lib/stepmake/bin\
+	  /usr/local/share/stepmake/bin\
+	  /usr/local/lib/stepmake/bin\
+	  /usr/share/stepmake/bin\
+	  /usr/lib/stepmake/bin\
+	  stepmake/bin\
+	)
     fi
 
+    AC_SUBST(stepmake)
     AC_SUBST(package)
     AC_SUBST(PACKAGE)
     AC_SUBST(PACKAGE_NAME)
@@ -193,10 +231,6 @@ AC_DEFUN(AC_STEPMAKE_INIT, [
     absolute_builddir="`pwd`"
     AC_SUBST(absolute_builddir)
 
-    # No versioning on directory names of sub-packages 
-    stepmake=stepmake
-    AC_SUBST(stepmake)
-
     STATE_VECTOR=`ls make/STATE-VECTOR 2>/dev/null`
     if test "x$STATE_VECTOR" != "x"; then
     	STATE_VECTOR="\$(depth)/$STATE_VECTOR"
@@ -251,14 +285,14 @@ dnl    fi
 	DOTEXE=.exe
        DIRSEP='\\'
  	PATHSEP=';'
-       INSTALL="\$(stepdir)/../bin/install-dot-exe.sh -c"
+       INSTALL="\$(SHELL) \$(stepdir)/../bin/install-dot-exe.sh -c"
     else
 	DIRSEP='/'
 	PATHSEP=':'
 	LN=ln
 	LN_S='ln -s'
 	ZIP="zip -r -9"
-        INSTALL="\$(stepdir)/../bin/install-sh -c"
+        INSTALL="\$(SHELL) \$(stepdir)/../bin/install-sh -c"
     fi
     AC_SUBST(DOTEXE)
     AC_SUBST(ZIP)
@@ -463,11 +497,13 @@ AC_DEFUN(AC_STEPMAKE_YODL, [
 	AC_CHECK_PROGS(YODL2MSLESS, yodl2msless, -echo no yodl)
 	AC_CHECK_PROGS(YODL2TEXINFO, yodl2texinfo, -echo no yodl)
 	AC_CHECK_PROGS(YODL2TXT, yodl2txt, -echo no yodl)
+	YODL2LESS_DIR='$(bindir)/'
     else
 	AC_SUBST(STRIPROFF)
 	AC_SUBST(YODL)
 	AC_SUBST(YODL2HTML)
 	AC_SUBST(YODL2LATEX)
+	AC_SUBST(YODL2LESS_DIR)
 	AC_SUBST(YODL2MAN)
 	AC_SUBST(YODL2MSLESS)
 	AC_SUBST(YODL2TEXINFO)
diff --git a/config.make.in b/config.make.in
index 292783aab0..a2a43b481f 100644
--- a/config.make.in
+++ b/config.make.in
@@ -59,6 +59,7 @@ TROFF = @TROFF@
 YODL= @YODL@
 YODL2HTML= @YODL2HTML@
 YODL2LATEX= @YODL2LATEX@
+YODL2LESS_DIR= @YODL2LESS_DIR@
 YODL2MAN= @YODL2MAN@
 YODL2MSLESS= @YODL2MSLESS@
 YODL2TEXINFO= @YODL2TEXINFO@
diff --git a/configure b/configure
index 9588ac798a..942a6f482c 100755
--- a/configure
+++ b/configure
@@ -79,8 +79,6 @@ ac_help="$ac_help
   enable-mingw-prefix=DIR set the mingw32 directory (standalone windows32 exes)"
 ac_help="$ac_help
   enable-printing         turn on debug printing. Default: off"
-ac_help="$ac_help
-  enable-guile            link in GUILE. Default: off"
 ac_help="$ac_help
   with-localedir=LOCALE   use LOCALE as locale dir. Default: PREFIX/share/locale "
 ac_help="$ac_help
@@ -607,6 +605,15 @@ fi
         PACKAGE=`echo $PACKAGE_NAME | tr '[a-z]' '[A-Z]'`
     package=`echo $PACKAGE_NAME | tr '[A-Z]' '[a-z]'`
     
+    # No versioning on directory names of sub-packages 
+    # urg, urg
+    stepmake=${datadir}/stepmake
+    presome=${prefix}
+    if test "$prefix" = "NONE"; then
+	    presome=${ac_default_prefix}
+    fi
+    stepmake=`echo ${stepmake} | sed "s!\\\${prefix}!$presome!"`
+
     if test "x$PACKAGE" = "xSTEPMAKE"; then
         echo Stepmake package!
 	(cd stepmake; rm -f stepmake; ln -s ../stepmake .)
@@ -630,10 +637,38 @@ ac_config_guess=$ac_aux_dir/config.guess
 ac_config_sub=$ac_aux_dir/config.sub
 ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
 
+	stepmake=stepmake
     else
         echo Package: $PACKAGE
+	# Check for installed stepmake
+	if test -d $stepmake; then
+	    echo Using installed stepmake: $stepmake
+	else
+	    stepmake='$(depth)'/stepmake
+	    echo Using local stepmake: $datadir/stepmake not found
+	fi
 	ac_aux_dir=
-for ac_dir in stepmake/bin $srcdir/stepmake/bin; do
+for ac_dir in \
+	  $HOME/usr/local/share/stepmake/bin\
+	  $HOME/usr/local/lib/stepmake/bin\
+	  $HOME/usr/share/stepmake/bin\
+	  $HOME/usr/lib/stepmake/bin\
+	  /usr/local/share/stepmake/bin\
+	  /usr/local/lib/stepmake/bin\
+	  /usr/share/stepmake/bin\
+	  /usr/lib/stepmake/bin\
+	  stepmake/bin\
+	 $srcdir/\
+	  $HOME/usr/local/share/stepmake/bin\
+	  $HOME/usr/local/lib/stepmake/bin\
+	  $HOME/usr/share/stepmake/bin\
+	  $HOME/usr/lib/stepmake/bin\
+	  /usr/local/share/stepmake/bin\
+	  /usr/local/lib/stepmake/bin\
+	  /usr/share/stepmake/bin\
+	  /usr/lib/stepmake/bin\
+	  stepmake/bin\
+	; do
   if test -f $ac_dir/install-sh; then
     ac_aux_dir=$ac_dir
     ac_install_sh="$ac_aux_dir/install-sh -c"
@@ -645,7 +680,27 @@ for ac_dir in stepmake/bin $srcdir/stepmake/bin; do
   fi
 done
 if test -z "$ac_aux_dir"; then
-  { echo "configure: error: can not find install-sh or install.sh in stepmake/bin $srcdir/stepmake/bin" 1>&2; exit 1; }
+  { echo "configure: error: can not find install-sh or install.sh in \
+	  $HOME/usr/local/share/stepmake/bin\
+	  $HOME/usr/local/lib/stepmake/bin\
+	  $HOME/usr/share/stepmake/bin\
+	  $HOME/usr/lib/stepmake/bin\
+	  /usr/local/share/stepmake/bin\
+	  /usr/local/lib/stepmake/bin\
+	  /usr/share/stepmake/bin\
+	  /usr/lib/stepmake/bin\
+	  stepmake/bin\
+	 $srcdir/\
+	  $HOME/usr/local/share/stepmake/bin\
+	  $HOME/usr/local/lib/stepmake/bin\
+	  $HOME/usr/share/stepmake/bin\
+	  $HOME/usr/lib/stepmake/bin\
+	  /usr/local/share/stepmake/bin\
+	  /usr/local/lib/stepmake/bin\
+	  /usr/share/stepmake/bin\
+	  /usr/lib/stepmake/bin\
+	  stepmake/bin\
+	" 1>&2; exit 1; }
 fi
 ac_config_guess=$ac_aux_dir/config.guess
 ac_config_sub=$ac_aux_dir/config.sub
@@ -656,6 +711,7 @@ ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
     
     
     
+    
     cat >> confdefs.h <<EOF
 #define PACKAGE "${PACKAGE_NAME}"
 EOF
@@ -673,10 +729,6 @@ EOF
     absolute_builddir="`pwd`"
     
 
-    # No versioning on directory names of sub-packages 
-    stepmake=stepmake
-    
-
     STATE_VECTOR=`ls make/STATE-VECTOR 2>/dev/null`
     if test "x$STATE_VECTOR" != "x"; then
     	STATE_VECTOR="\$(depth)/$STATE_VECTOR"
@@ -705,7 +757,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
 fi
 
 echo $ac_n "checking host system type""... $ac_c" 1>&6
-echo "configure:709: checking host system type" >&5
+echo "configure:761: checking host system type" >&5
 
 host_alias=$host
 case "$host_alias" in
@@ -730,7 +782,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:734: checking for $ac_word" >&5
+echo "configure:786: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_MAKE'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -764,7 +816,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:768: checking for $ac_word" >&5
+echo "configure:820: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_FIND'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -801,7 +853,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:805: checking for $ac_word" >&5
+echo "configure:857: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_TAR'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -835,7 +887,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:839: checking for $ac_word" >&5
+echo "configure:891: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_BASH'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -868,7 +920,7 @@ test -n "$BASH" || BASH="/bin/sh"
     # Extract the first word of "${PYTHON:-python}", so it can be a program name with args.
 set dummy ${PYTHON:-python}; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:872: checking for $ac_word" >&5
+echo "configure:924: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_PYTHON'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -937,14 +989,14 @@ fi
 	DOTEXE=.exe
        DIRSEP='\\'
  	PATHSEP=';'
-       INSTALL="\$(stepdir)/../bin/install-dot-exe.sh -c"
+       INSTALL="\$(SHELL) \$(stepdir)/../bin/install-dot-exe.sh -c"
     else
 	DIRSEP='/'
 	PATHSEP=':'
 	LN=ln
 	LN_S='ln -s'
 	ZIP="zip -r -9"
-        INSTALL="\$(stepdir)/../bin/install-sh -c"
+        INSTALL="\$(SHELL) \$(stepdir)/../bin/install-sh -c"
     fi
     
     
@@ -1084,7 +1136,7 @@ EOF
     # Extract the first word of "gcc", so it can be a program name with args.
 set dummy gcc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1088: checking for $ac_word" >&5
+echo "configure:1140: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1113,7 +1165,7 @@ if test -z "$CC"; then
   # Extract the first word of "cc", so it can be a program name with args.
 set dummy cc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1117: checking for $ac_word" >&5
+echo "configure:1169: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1161,7 +1213,7 @@ fi
 fi
 
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1165: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:1217: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
 
 ac_ext=c
 # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -1171,11 +1223,11 @@ ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS
 cross_compiling=$ac_cv_prog_cc_cross
 
 cat > conftest.$ac_ext <<EOF
-#line 1175 "configure"
+#line 1227 "configure"
 #include "confdefs.h"
 main(){return(0);}
 EOF
-if { (eval echo configure:1179: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:1231: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   ac_cv_prog_cc_works=yes
   # If we can't run a trivial program, we are probably using a cross compiler.
   if (./conftest; exit) 2>/dev/null; then
@@ -1195,12 +1247,12 @@ if test $ac_cv_prog_cc_works = no; then
   { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
 fi
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1199: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1251: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
 cross_compiling=$ac_cv_prog_cc_cross
 
 echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:1204: checking whether we are using GNU C" >&5
+echo "configure:1256: checking whether we are using GNU C" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1209,7 +1261,7 @@ else
   yes;
 #endif
 EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1213: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1265: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
   ac_cv_prog_gcc=yes
 else
   ac_cv_prog_gcc=no
@@ -1224,7 +1276,7 @@ if test $ac_cv_prog_gcc = yes; then
   ac_save_CFLAGS="$CFLAGS"
   CFLAGS=
   echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:1228: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:1280: checking whether ${CC-cc} accepts -g" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1265,20 +1317,12 @@ fi
 # AC_HAVE_HEADERS(limits.h malloc.h string.h unistd.h values.h)
 
 printing_b=no
-guile_b=no
 # Check whether --enable-printing or --disable-printing was given.
 if test "${enable_printing+set}" = set; then
   enableval="$enable_printing"
   printing_b=$enableval
 fi
 
-# Check whether --enable-guile or --disable-guile was given.
-if test "${enable_guile+set}" = set; then
-  enableval="$enable_guile"
-  guile_b=$enableval
-fi
-
-
     
 if test "$optimise_b" = yes; then
     DEFINES="$DEFINES -DSTRING_UTILS_INLINED"
@@ -1289,7 +1333,7 @@ EOF
 fi
 
 echo $ac_n "checking how to run the C++ preprocessor""... $ac_c" 1>&6
-echo "configure:1293: checking how to run the C++ preprocessor" >&5
+echo "configure:1337: checking how to run the C++ preprocessor" >&5
 if test -z "$CXXCPP"; then
 if eval "test \"`echo '$''{'ac_cv_prog_CXXCPP'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -1302,12 +1346,12 @@ ac_link='${CXX-g++} -o conftest $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $L
 cross_compiling=$ac_cv_prog_cxx_cross
   CXXCPP="${CXX-g++} -E"
   cat > conftest.$ac_ext <<EOF
-#line 1306 "configure"
+#line 1350 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1311: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1355: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   :
@@ -1338,7 +1382,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1342: checking for $ac_word" >&5
+echo "configure:1386: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1369,7 +1413,7 @@ test -n "$CXX" || CXX="gcc"
 
 
 echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1373: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
+echo "configure:1417: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
 
 ac_ext=C
 # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -1379,11 +1423,11 @@ ac_link='${CXX-g++} -o conftest $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $L
 cross_compiling=$ac_cv_prog_cxx_cross
 
 cat > conftest.$ac_ext <<EOF
-#line 1383 "configure"
+#line 1427 "configure"
 #include "confdefs.h"
 main(){return(0);}
 EOF
-if { (eval echo configure:1387: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:1431: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   ac_cv_prog_cxx_works=yes
   # If we can't run a trivial program, we are probably using a cross compiler.
   if (./conftest; exit) 2>/dev/null; then
@@ -1403,12 +1447,12 @@ if test $ac_cv_prog_cxx_works = no; then
   { echo "configure: error: installation or configuration problem: C++ compiler cannot create executables." 1>&2; exit 1; }
 fi
 echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1407: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1451: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
 echo "$ac_t""$ac_cv_prog_cxx_cross" 1>&6
 cross_compiling=$ac_cv_prog_cxx_cross
 
 echo $ac_n "checking whether we are using GNU C++""... $ac_c" 1>&6
-echo "configure:1412: checking whether we are using GNU C++" >&5
+echo "configure:1456: checking whether we are using GNU C++" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_gxx'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1417,7 +1461,7 @@ else
   yes;
 #endif
 EOF
-if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:1421: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:1465: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
   ac_cv_prog_gxx=yes
 else
   ac_cv_prog_gxx=no
@@ -1432,7 +1476,7 @@ if test $ac_cv_prog_gxx = yes; then
   ac_save_CXXFLAGS="$CXXFLAGS"
   CXXFLAGS=
   echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6
-echo "configure:1436: checking whether ${CXX-g++} accepts -g" >&5
+echo "configure:1480: checking whether ${CXX-g++} accepts -g" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_cxx_g'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1462,17 +1506,17 @@ fi
 
     ac_safe=`echo "FlexLexer.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for FlexLexer.h""... $ac_c" 1>&6
-echo "configure:1466: checking for FlexLexer.h" >&5
+echo "configure:1510: checking for FlexLexer.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1471 "configure"
+#line 1515 "configure"
 #include "confdefs.h"
 #include <FlexLexer.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1476: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1520: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -1522,12 +1566,12 @@ fi
 
 
     echo $ac_n "checking whether explicit instantiation is needed""... $ac_c" 1>&6
-echo "configure:1526: checking whether explicit instantiation is needed" >&5
+echo "configure:1570: checking whether explicit instantiation is needed" >&5
 if eval "test \"`echo '$''{'lily_cv_need_explicit_instantiation'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1531 "configure"
+#line 1575 "configure"
 #include "confdefs.h"
 
     template <class T> struct foo { static int baz; };
@@ -1537,7 +1581,7 @@ int main() {
  return foo<int>::baz; 
 ; return 0; }
 EOF
-if { (eval echo configure:1541: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:1585: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   lily_cv_need_explicit_instantiation=no
 else
@@ -1564,7 +1608,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1568: checking for $ac_word" >&5
+echo "configure:1612: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_YACC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1606,7 +1650,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1610: checking for $ac_word" >&5
+echo "configure:1654: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_BISON'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1640,7 +1684,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1644: checking for $ac_word" >&5
+echo "configure:1688: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_FLEX'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1707,7 +1751,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1711: checking for $ac_word" >&5
+echo "configure:1755: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1739,7 +1783,7 @@ test -n "$AR" || AR="error"
     # Extract the first word of "ranlib", so it can be a program name with args.
 set dummy ranlib; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1743: checking for $ac_word" >&5
+echo "configure:1787: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1794,7 +1838,7 @@ fi
 
 
     echo $ac_n "checking language""... $ac_c" 1>&6
-echo "configure:1798: checking language" >&5    
+echo "configure:1842: checking language" >&5    
     case "$language" in
       En* | en* | Am* | am* | US* | us*)
 	    lang=English;;
@@ -1830,7 +1874,7 @@ EOF
 
 
     echo $ac_n "checking for gettext in -lintl""... $ac_c" 1>&6
-echo "configure:1834: checking for gettext in -lintl" >&5
+echo "configure:1878: checking for gettext in -lintl" >&5
 ac_lib_var=`echo intl'_'gettext | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -1838,7 +1882,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lintl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 1842 "configure"
+#line 1886 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
@@ -1852,7 +1896,7 @@ int main() {
 gettext()
 ; return 0; }
 EOF
-if { (eval echo configure:1856: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:1900: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -1882,12 +1926,12 @@ fi
     for ac_func in gettext
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:1886: checking for $ac_func" >&5
+echo "configure:1930: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1891 "configure"
+#line 1935 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -1913,7 +1957,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:1917: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:1961: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -1945,7 +1989,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1949: checking for $ac_word" >&5
+echo "configure:1993: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_MSGFMT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1975,7 +2019,7 @@ done
 test -n "$MSGFMT" || MSGFMT="\$(SHELL) \$(step-bindir)/fake-msgfmt.sh "
 
     echo $ac_n "checking whether msgfmt accepts -o""... $ac_c" 1>&6
-echo "configure:1979: checking whether msgfmt accepts -o" >&5
+echo "configure:2023: checking whether msgfmt accepts -o" >&5
     msgfmt_output="`msgfmt -o bla 2>&1 | grep usage`"
     if test "$msgfmt_output" = ""; then
 	echo "$ac_t""yes" 1>&6
@@ -2002,7 +2046,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2006: checking for $ac_word" >&5
+echo "configure:2050: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_METAFONT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2037,7 +2081,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2041: checking for $ac_word" >&5
+echo "configure:2085: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_MFONT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2074,7 +2118,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2078: checking for $ac_word" >&5
+echo "configure:2122: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_METAPOST'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2109,7 +2153,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2113: checking for $ac_word" >&5
+echo "configure:2157: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_MPOST'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2152,7 +2196,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2156: checking for $ac_word" >&5
+echo "configure:2200: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_STRIPROFF'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2186,7 +2230,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2190: checking for $ac_word" >&5
+echo "configure:2234: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_YODL'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2220,7 +2264,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2224: checking for $ac_word" >&5
+echo "configure:2268: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_YODL2HTML'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2254,7 +2298,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2258: checking for $ac_word" >&5
+echo "configure:2302: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_YODL2LATEX'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2287,7 +2331,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2291: checking for $ac_word" >&5
+echo "configure:2335: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_YODL2MAN'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2321,7 +2365,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2325: checking for $ac_word" >&5
+echo "configure:2369: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_YODL2MSLESS'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2355,7 +2399,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2359: checking for $ac_word" >&5
+echo "configure:2403: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_YODL2TEXINFO'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2389,7 +2433,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2393: checking for $ac_word" >&5
+echo "configure:2437: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_YODL2TXT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2418,6 +2462,7 @@ test -n "$YODL2TXT" && break
 done
 test -n "$YODL2TXT" || YODL2TXT="-echo no yodl"
 
+	YODL2LESS_DIR='$(bindir)/'
     else
 	
 	
@@ -2427,6 +2472,7 @@ test -n "$YODL2TXT" || YODL2TXT="-echo no yodl"
 	
 	
 	
+	
 	export STRIPROFF YODL YODL2HTML YODL2LATEX YODL2MAN YODL2MSLESS YODL2TEXINFO YODL2TXT
     fi
     if test "x$YODL" = "-echo no yodl"; then
@@ -2437,12 +2483,10 @@ test -n "$YODL2TXT" || YODL2TXT="-echo no yodl"
     fi    
 
 
-
-
-case $guile_b in 
-    yes)
+    # urg, must check for different functions in libguile
+    # to force new check iso reading from cache
     echo $ac_n "checking for scm_shell in -lguile""... $ac_c" 1>&6
-echo "configure:2446: checking for scm_shell in -lguile" >&5
+echo "configure:2490: checking for scm_shell in -lguile" >&5
 ac_lib_var=`echo guile'_'scm_shell | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -2450,7 +2494,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lguile  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2454 "configure"
+#line 2498 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
@@ -2464,7 +2508,103 @@ int main() {
 scm_shell()
 ; return 0; }
 EOF
-if { (eval echo configure:2468: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:2512: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  \
+      LIBS="-lguile $LIBS" cat >> confdefs.h <<\EOF
+#define HAVE_LIBGUILE 1
+EOF
+
+else
+  echo "$ac_t""no" 1>&6
+\
+      echo $ac_n "checking for readline in -lreadline""... $ac_c" 1>&6
+echo "configure:2536: checking for readline in -lreadline" >&5
+ac_lib_var=`echo readline'_'readline | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lreadline  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2544 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char readline();
+
+int main() {
+readline()
+; return 0; }
+EOF
+if { (eval echo configure:2558: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_lib=HAVE_LIB`echo readline | sed -e 's/^a-zA-Z0-9_/_/g' \
+    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_lib 1
+EOF
+
+  LIBS="-lreadline $LIBS"
+
+else
+  echo "$ac_t""no" 1>&6
+fi
+ \
+      echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
+echo "configure:2586: checking for dlopen in -ldl" >&5
+ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-ldl  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2594 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char dlopen();
+
+int main() {
+dlopen()
+; return 0; }
+EOF
+if { (eval echo configure:2608: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2479,7 +2619,57 @@ LIBS="$ac_save_LIBS"
 fi
 if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
   echo "$ac_t""yes" 1>&6
-    ac_tr_lib=HAVE_LIB`echo guile | sed -e 's/[^a-zA-Z0-9_]/_/g' \
+    ac_tr_lib=HAVE_LIB`echo dl | sed -e 's/^a-zA-Z0-9_/_/g' \
+    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_lib 1
+EOF
+
+  LIBS="-ldl $LIBS"
+
+else
+  echo "$ac_t""no" 1>&6
+fi
+ \
+      echo $ac_n "checking for scm_boot_guile in -lguile""... $ac_c" 1>&6
+echo "configure:2636: checking for scm_boot_guile in -lguile" >&5
+ac_lib_var=`echo guile'_'scm_boot_guile | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lguile  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2644 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char scm_boot_guile();
+
+int main() {
+scm_boot_guile()
+; return 0; }
+EOF
+if { (eval echo configure:2658: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_lib=HAVE_LIB`echo guile | sed -e 's/^a-zA-Z0-9_/_/g' \
     -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
   cat >> confdefs.h <<EOF
 #define $ac_tr_lib 1
@@ -2491,12 +2681,13 @@ else
   echo "$ac_t""no" 1>&6
 fi
 
+fi
+
+
+
 
-    ;;
-esac
-    
 echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6
-echo "configure:2500: checking for 8-bit clean memcmp" >&5
+echo "configure:2691: checking for 8-bit clean memcmp" >&5
 if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2504,7 +2695,7 @@ else
   ac_cv_func_memcmp_clean=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 2508 "configure"
+#line 2699 "configure"
 #include "confdefs.h"
 #ifdef __cplusplus
 extern "C" void exit(int);
@@ -2517,7 +2708,7 @@ main()
 }
 
 EOF
-if { (eval echo configure:2521: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:2712: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
 then
   ac_cv_func_memcmp_clean=yes
 else
@@ -2535,12 +2726,12 @@ echo "$ac_t""$ac_cv_func_memcmp_clean" 1>&6
 test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.o"
 
 echo $ac_n "checking for vprintf""... $ac_c" 1>&6
-echo "configure:2539: checking for vprintf" >&5
+echo "configure:2730: checking for vprintf" >&5
 if eval "test \"`echo '$''{'ac_cv_func_vprintf'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2544 "configure"
+#line 2735 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char vprintf(); below.  */
@@ -2566,7 +2757,7 @@ vprintf();
 
 ; return 0; }
 EOF
-if { (eval echo configure:2570: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:2761: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   eval "ac_cv_func_vprintf=yes"
 else
@@ -2590,12 +2781,12 @@ fi
 
 if test "$ac_cv_func_vprintf" != yes; then
 echo $ac_n "checking for _doprnt""... $ac_c" 1>&6
-echo "configure:2594: checking for _doprnt" >&5
+echo "configure:2785: checking for _doprnt" >&5
 if eval "test \"`echo '$''{'ac_cv_func__doprnt'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2599 "configure"
+#line 2790 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char _doprnt(); below.  */
@@ -2621,7 +2812,7 @@ _doprnt();
 
 ; return 0; }
 EOF
-if { (eval echo configure:2625: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:2816: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   eval "ac_cv_func__doprnt=yes"
 else
@@ -2648,12 +2839,12 @@ fi
 for ac_func in memmem snprintf vsnprintf gettext
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:2652: checking for $ac_func" >&5
+echo "configure:2843: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2657 "configure"
+#line 2848 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -2679,7 +2870,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:2683: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:2874: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -2718,7 +2909,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2722: checking for $ac_word" >&5
+echo "configure:2913: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_MAKEINFO'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2888,13 +3079,13 @@ s%@includedir@%$includedir%g
 s%@oldincludedir@%$oldincludedir%g
 s%@infodir@%$infodir%g
 s%@mandir@%$mandir%g
+s%@stepmake@%$stepmake%g
 s%@package@%$package%g
 s%@PACKAGE@%$PACKAGE%g
 s%@PACKAGE_NAME@%$PACKAGE_NAME%g
 s%@package_depth@%$package_depth%g
 s%@AUTOGENERATE@%$AUTOGENERATE%g
 s%@absolute_builddir@%$absolute_builddir%g
-s%@stepmake@%$stepmake%g
 s%@STATE_VECTOR@%$STATE_VECTOR%g
 s%@CONFIGSUFFIX@%$CONFIGSUFFIX%g
 s%@host@%$host%g
@@ -2944,6 +3135,7 @@ s%@YODL2MAN@%$YODL2MAN%g
 s%@YODL2MSLESS@%$YODL2MSLESS%g
 s%@YODL2TEXINFO@%$YODL2TEXINFO%g
 s%@YODL2TXT@%$YODL2TXT%g
+s%@YODL2LESS_DIR@%$YODL2LESS_DIR%g
 s%@LIBOBJS@%$LIBOBJS%g
 s%@MAKEINFO@%$MAKEINFO%g
 
diff --git a/configure.in b/configure.in
index 69f8966897..b0277039b6 100644
--- a/configure.in
+++ b/configure.in
@@ -16,14 +16,9 @@ AC_STEPMAKE_COMPILE
 # AC_HAVE_HEADERS(limits.h malloc.h string.h unistd.h values.h)
 
 printing_b=no
-guile_b=no
 AC_ARG_ENABLE(printing,
     [  enable-printing         turn on debug printing. Default: off],
     [printing_b=$enableval])
-AC_ARG_ENABLE(guile,
-    [  enable-guile            link in GUILE. Default: off],
-    [guile_b=$enableval])
-
     
 if test "$optimise_b" = yes; then
     DEFINES="$DEFINES -DSTRING_UTILS_INLINED"
@@ -42,19 +37,12 @@ AC_STEPMAKE_MSGFMT
 AC_STEPMAKE_TEXMF
 # AC_STEPMAKE_TEXMF_DIRS
 AC_STEPMAKE_YODL
-
+AC_STEPMAKE_GUILE
 
 dnl should check out -print
 dnl huh?
 dnl AC_CHECK_SEARCH_RESULT($FIND, find, Please use --enable-tex-dir)
 
-case $guile_b in 
-    yes)
-    AC_CHECK_LIB(guile, scm_shell)
-
-    ;;
-esac
-    
 AC_FUNC_MEMCMP
 AC_FUNC_VPRINTF
 AC_CHECK_FUNCS(memmem snprintf vsnprintf gettext)
diff --git a/dstreamrc b/dstreamrc
index d8e7b6a65b..2d4ef5938b 100644
--- a/dstreamrc
+++ b/dstreamrc
@@ -34,6 +34,7 @@ Beam			0
 Bow			1
 Bezier_bow		1
 Change_iterator		1
+Change_translator	1
 Chord			1
 Chord_iterator		1
 Clef_item		1
@@ -50,8 +51,10 @@ Engraver_group_engraver 0
 General_script_def	1
 Graphical_element	1
 Group_change_req	1
+Guile			1
 Head_column		0
 Horizontal_align_item	1
+Horizontal_group_item	1 
 Idealspacing		1
 Identifier		1
 Ineq_constrained_qp 	1
@@ -113,6 +116,7 @@ Symtable		1
 Symtables		1
 
 Text_def		1
+Text_item		1
 Text_req		1
 Time_description	1
 Translation_property	0
diff --git a/flower/dstream.cc b/flower/dstream.cc
index 784bf36fbe..10542ee06a 100644
--- a/flower/dstream.cc
+++ b/flower/dstream.cc
@@ -16,7 +16,7 @@
 #include "rational.hh"
 
 /// indent of each level
-const INDTAB = 2;
+const int INDTAB = 2;
 
 /*
   should use Regexp library.
diff --git a/flower/include/dictionary.hh b/flower/include/dictionary.hh
index 55f0e4fedd..d3c9a7afb3 100644
--- a/flower/include/dictionary.hh
+++ b/flower/include/dictionary.hh
@@ -100,7 +100,6 @@ public:
 	  nexti = (nexti + j*j)%sz;
 	}
       
-    finish:
       return retval;
     }
 };
@@ -181,7 +180,10 @@ public:
 
   V operator [] (String k) const
     {
-      return elem (k);
+      V retval;
+      if (!elem_b (k))
+	return retval ;
+      retval ((Dictionary<V> *) this)->elem (k);
     }
 
   V remove (String s)
diff --git a/init/GNUmakefile b/init/GNUmakefile
index a9a23da2da..7b213816c7 100644
--- a/init/GNUmakefile
+++ b/init/GNUmakefile
@@ -8,10 +8,8 @@ INI_FILES = $(FLY_FILES) $(LY_FILES)
 INSTALLATION_DIR=$(datadir)/ly/
 INSTALLATION_FILES=$(INI_FILES)
 
+STEPMAKE_TEMPLATES=install
 LOCALSTEPMAKE_TEMPLATES=mutopia
 
 include $(depth)/make/stepmake.make 
 
-
-include $(stepdir)/installfiles.make
-
diff --git a/init/catalan.ly b/init/catalan.ly
new file mode 100644
index 0000000000..99ae0dc723
--- /dev/null
+++ b/init/catalan.ly
@@ -0,0 +1,73 @@
+%{
+
+ Common catalan names for notes. "b" means flat (bemoll), "d" means sharp (diesi).
+ Also "s" is included for sharp (sostingut).  Both "diesi" and "sostingut" are approved
+ by "Diccionari de la Llengua Catalana" from "Institut d'Estudis Catalans".
+
+ Adapted from italiano.ly.
+
+ English: a   b   c   d   e   f   g
+ Catalan: la  si  do  re  mi  fa  sol
+
+ For spanish naming just use the sharp sign "s" (sostenido) instead of "s"
+(sostenido) .
+%}
+
+% contributed by Jaume Obrador <jobrador@ipc4.uib.es>
+
+\notenames {
+	dobb 	= \musicalpitch { -1 0 -2 }
+	dob 	= \musicalpitch { -1 0 -1 }
+	do 		= \musicalpitch { -1 0 0 }
+	dod 	= \musicalpitch { -1 0 1 }
+	dodd 	= \musicalpitch { -1 0 2 }
+	rebb 	= \musicalpitch { -1 1 -2 }
+	reb 	= \musicalpitch { -1 1 -1 }
+	re 		= \musicalpitch { -1 1 0 }
+	red 	= \musicalpitch { -1 1 1 }
+	redd 	= \musicalpitch { -1 1 2 }
+	mibb	= \musicalpitch { -1 2 -2 }
+	mib		= \musicalpitch { -1 2 -1 }
+	mi	 	= \musicalpitch { -1 2 0 }
+	mid 	= \musicalpitch { -1 2 1 }
+	midd 	= \musicalpitch { -1 2 2 }
+	fabb 	= \musicalpitch { -1 3 -2 }
+	fab 	= \musicalpitch { -1 3 -1 }
+	fa	 	= \musicalpitch { -1 3 0 }
+	fad 	= \musicalpitch { -1 3 1 }
+	fadd 	= \musicalpitch { -1 3 2 }
+	solbb 	= \musicalpitch { -1 4 -2 }
+	solb 	= \musicalpitch { -1 4 -1 }
+	sol 	= \musicalpitch { -1 4 0 }
+	sold 	= \musicalpitch { -1 4 1 }
+	soldd 	= \musicalpitch { -1 4 2 }
+	labb 	= \musicalpitch { -1 5 -2 }
+	lab 	= \musicalpitch { -1 5 -1 }
+	la	 	= \musicalpitch { -1 5 0 }
+	lad 	= \musicalpitch { -1 5 1 }
+	ladd 	= \musicalpitch { -1 5 2 }
+	sibb 	= \musicalpitch { -1 6 -2 }
+	sib 	= \musicalpitch { -1 6 -1 }
+	si 		= \musicalpitch { -1 6 0 }
+	sid 	= \musicalpitch { -1 6 1 }
+	sidd 	= \musicalpitch { -1 6 2 }
+
+% For using "sostingut" notation, which is also correct
+
+	dos 	= \musicalpitch { -1 0 1 }
+	doss 	= \musicalpitch { -1 0 2 }
+	res 	= \musicalpitch { -1 1 1 }
+	ress 	= \musicalpitch { -1 1 2 }
+	mis 	= \musicalpitch { -1 2 1 }
+	miss 	= \musicalpitch { -1 2 2 }
+	fas 	= \musicalpitch { -1 3 1 }
+	fass 	= \musicalpitch { -1 3 2 }
+	sols 	= \musicalpitch { -1 4 1 }
+	solss 	= \musicalpitch { -1 4 2 }
+	las 	= \musicalpitch { -1 5 1 }
+	lass 	= \musicalpitch { -1 5 2 }
+	sis 	= \musicalpitch { -1 6 1 }
+	siss 	= \musicalpitch { -1 6 2 }
+}
+
+
diff --git a/init/declarations.ly b/init/declarations.ly
index d28a53c62f..c1bc0fd333 100644
--- a/init/declarations.ly
+++ b/init/declarations.ly
@@ -35,5 +35,7 @@ nobreak = { \penalty = -10000; }
 
 \include "property.ly"
 
+\include "scm.ly"
+
 % music = "\melodic\relative c"
 
diff --git a/init/paper20.ly b/init/paper20.ly
index a67683b655..cf6e0dbe95 100644
--- a/init/paper20.ly
+++ b/init/paper20.ly
@@ -23,7 +23,7 @@ paper_twenty = \paper {
 	-2 = \symboltables { \table_thirteen }	
 	-1 = \symboltables { \table_sixteen }
 	0 = \symboltables { \table_twenty }
-	
+
 	\include "params.ly";
 }
 
diff --git a/init/script.ly b/init/script.ly
index 2a7cd50bcc..7c96a45122 100644
--- a/init/script.ly
+++ b/init/script.ly
@@ -3,6 +3,7 @@
 % indexstring follow_into_staff same_dir_as_stem above_below_staff symbol_can_beinverted priority }
 %
 
+thumb = \script { "thumb" 0 0 1 0 0 }
 accent = \script { "sforzato"  0 -1 0 0 0 }
 marcato = \script { "marcato" 0 -1 0 1  0 }
 staccatissimo = \script { "staccatissimo" 0  -1 0 1 0 }
diff --git a/input/GNUmakefile b/input/GNUmakefile
index ad59365a5b..16b785ec2d 100644
--- a/input/GNUmakefile
+++ b/input/GNUmakefile
@@ -5,7 +5,7 @@ depth = ..
 SUBDIRS=test bugs
 
 examples=example-3 twinkle-pop praeludium-fuga-E twinkle
-flexamples=example-1 example-2
+flexamples=example-1 example-2 
 
 LOCALSTEPMAKE_TEMPLATES=mutopia
 
diff --git a/input/test/thumb.ly b/input/test/thumb.ly
new file mode 100644
index 0000000000..7b4a3a3807
--- /dev/null
+++ b/input/test/thumb.ly
@@ -0,0 +1,22 @@
+\header{
+	title="CELLO-THUMBS";
+	enteredby="Maarten Storm";
+}
+
+
+% the thumb-script is used in cello music to indicate a note that should
+% be played with your thumb. 
+
+\version "1.0.7";
+
+\score { \notes \relative c'' {
+		<[ a8_\thumb a'8-3(> <)b_\thumb b'-3>
+		<c_\thumb c'-3(> <)d_\thumb d'-3]>
+	}
+	\paper{ 
+		linewidth = 80.\mm; 
+		castingalgorithm = \Wordwrap;
+	}
+}
+
+	
diff --git a/lily/GNUmakefile b/lily/GNUmakefile
index cf4db4c84a..e8691e9ac2 100644
--- a/lily/GNUmakefile
+++ b/lily/GNUmakefile
@@ -8,6 +8,9 @@ SUBDIRS = include
 
 MODULE_LIBS=$(depth)/lib $(depth)/flower
 
+EXTRA_LIBES=-lguile		#ugh
+BLA_LIBES=-lguile		#ugh
+
 STEPMAKE_TEMPLATES= c++ executable 
 
 include $(depth)/make/stepmake.make 
diff --git a/lily/abbrev.cc b/lily/abbrev.cc
index 4af78938bc..eb87945cd7 100644
--- a/lily/abbrev.cc
+++ b/lily/abbrev.cc
@@ -129,7 +129,7 @@ void
 Abbreviation::do_substitute_dependent (Score_element*o, Score_element*n)
 {
   if (stem_l_ == o)
-    stem_l_ = n ? (Stem*)n->access_Item () : 0;
+    stem_l_ = n ? dynamic_cast<Stem*> (n) : 0;
 }
 
 
diff --git a/lily/abbreviation-beam-engraver.cc b/lily/abbreviation-beam-engraver.cc
index 67c09cb7fc..be29437462 100644
--- a/lily/abbreviation-beam-engraver.cc
+++ b/lily/abbreviation-beam-engraver.cc
@@ -27,11 +27,11 @@ Abbreviation_beam_engraver::Abbreviation_beam_engraver ()
 bool
 Abbreviation_beam_engraver::do_try_request (Request*r)
 {
-  Musical_req* mus_l = r->access_Musical_req ();
+  Musical_req* mus_l = dynamic_cast <Musical_req *> (r);
   if (!mus_l)
     return false;
 
-  Abbreviation_beam_req * b = mus_l->access_Abbreviation_beam_req ();
+  Abbreviation_beam_req * b = dynamic_cast <Abbreviation_beam_req *> (mus_l);
 
   if (!b)
     return false;
@@ -85,7 +85,7 @@ Abbreviation_beam_engraver::acknowledge_element (Score_element_info i)
   if (!abeam_p_ || !i.elem_l_->is_type_b (Stem::static_name ()))
     return;
 
-  Stem* s = (Stem*)i.elem_l_->access_Item ();
+  Stem* s = (Stem*)dynamic_cast <Item *> (i.elem_l_);
 
   int type_i = span_reqs_drul_[LEFT]->type_i_;
   s->flag_i_ = intlog2 (type_i) - 2;
diff --git a/lily/atom.cc b/lily/atom.cc
index 76b59197d3..2d8f11e78e 100644
--- a/lily/atom.cc
+++ b/lily/atom.cc
@@ -29,7 +29,7 @@ Atom::check_infinity_b ()const
       if (abs (off_[ax]) >= 100 CM)
 	{
 	  warning (_f ("ridiculous dimension: %s, %s", axis_name_str (ax),
-		   global_lookup_l->print_dimen (off_[ax])));
+		   print_dimen (off_[ax])));
 	  
 	  if (experimental_features_global_b)
 	    assert (false);
@@ -76,12 +76,14 @@ Atom::Atom ()
     But Atom is used as a simple type *everywhere*,
     and we don't have virtual contructors.
    */
-  str_ = global_lookup_l->unknown_str ();
+  lambda_ = 0;
+  str_ = "unknown\n";
 }
 
 Atom::Atom (String s, Box b)
   :  dim_ (b)
 {
+  lambda_ = 0;
   str_ = s;
 }
 
diff --git a/lily/auto-plet-engraver.cc b/lily/auto-plet-engraver.cc
index 8812f6245c..254f029f59 100644
--- a/lily/auto-plet-engraver.cc
+++ b/lily/auto-plet-engraver.cc
@@ -9,30 +9,29 @@
 
 #include "auto-plet-engraver.hh"
 #include "command-request.hh"
-#include "slur.hh"
+#include "plet-spanner.hh"
 #include "note-column.hh"
 
 bool
 Tuplet_engraver::do_try_request (Request *r)
 {
-  Command_req * c = r->access_Command_req ();
+  Command_req * c = dynamic_cast <Command_req *> (r);
   if (!(c &&
-      c->access_Bracket_req ()))
+      dynamic_cast <Bracket_req *> (c)))
     {
       return false;
     }
 
-  Bracket_req * b = c->access_Bracket_req ();
+  Bracket_req * b = dynamic_cast <Bracket_req *> (c);
   bracket_req_arr_.push (b);
   return true;
 }
 
-
 void
 Tuplet_engraver::do_process_requests ()
 {
   int stopcount =0;
-  Link_array<Slur> start_arr;
+  Link_array<Plet_spanner> start_arr;
   
   for (int i=0; i < bracket_req_arr_.size (); i++)
     {
@@ -40,16 +39,17 @@ Tuplet_engraver::do_process_requests ()
 	stopcount++;
       if (bracket_req_arr_[i]->spantype == Span_req::START)
 	{
-	  Slur *sp =new Slur;
-	  start_arr.push  (sp);
-	  announce_element (Score_element_info (sp, bracket_req_arr_[i]));
+	  Plet_spanner* glep = new Plet_spanner ();
+	  start_arr.push  (glep);
+// lots of stuff does info->elem_l_->is_type ()
+//	  announce_element (Score_element_info (glep, bracket_req_arr_[i]));
 	}
     }
 
   for (; stopcount--; )
     {
-      Slur *sp = started_span_p_arr_.pop ();
-      stop_now_span_p_arr_.push (sp);
+      Plet_spanner* glep = started_span_p_arr_.pop ();
+      stop_now_span_p_arr_.push (glep);
     }
 
   for (int i=0; i < start_arr.size (); i++)
@@ -61,9 +61,10 @@ Tuplet_engraver::acknowledge_element (Score_element_info i)
 {
   if (i.elem_l_->is_type_b (Note_column::static_name ()))
     {
-      Note_column *nc = (Note_column*)i.elem_l_->access_Item ();
+      Note_column *nc = (Note_column*)dynamic_cast <Item *> (i.elem_l_);
       for (int j =0; j  <started_span_p_arr_.size (); j++)
-	started_span_p_arr_[j]->add_column (nc);
+	// started_span_p_arr_[j]->add_column (nc);
+	;
     }
 }
 
diff --git a/lily/axis-group-element.cc b/lily/axis-group-element.cc
index 8aa8263668..928f64de0c 100644
--- a/lily/axis-group-element.cc
+++ b/lily/axis-group-element.cc
@@ -36,7 +36,8 @@ Axis_group_element::elem_l_arr () const
   */
   Link_array<Score_element> r;
   for (int i=0; i < elem_l_arr_.size (); i++)
-    r.push (elem_l_arr_[i]->access_Score_element());
+    r.push (dynamic_cast<Score_element*>(elem_l_arr_[i]));
+      
   return r;
 }
 
@@ -49,7 +50,7 @@ Axis_group_element::get_children ()
     {
       Score_element* e = elems[i];
       childs.push (e) ;
-      Axis_group_element * axis_group= e->access_Axis_group_element ();
+      Axis_group_element * axis_group= dynamic_cast <Axis_group_element *> (e);
       if (axis_group)
       	childs.concat (axis_group->get_children ());      
     }
diff --git a/lily/axis-group-item.cc b/lily/axis-group-item.cc
index 33dfdceba9..273116d1ea 100644
--- a/lily/axis-group-item.cc
+++ b/lily/axis-group-item.cc
@@ -16,7 +16,7 @@ Axis_group_item::OK() const
   Link_array<Score_element> elems = elem_l_arr ();
   for (int i=0; i < elems.size(); i++) 
     {
-      Item * it_l = elems[i]->access_Item ();
+      Item * it_l = dynamic_cast<Item*> (elems[i]);
       assert (it_l);
     }
 }
@@ -34,7 +34,7 @@ Axis_group_item::do_breakable_col_processing()
   Link_array<Score_element> elems = elem_l_arr ();
   for (int i=0; i < elems.size(); i++) 
     {
-      Item* it_l = elems[i]->access_Item ();
+      Item* it_l = dynamic_cast<Item*> (elems[i]);
       Direction  j=LEFT;
       do 
 	{
diff --git a/lily/axis-group-spanner.cc b/lily/axis-group-spanner.cc
index 64a28da895..70c70c297f 100644
--- a/lily/axis-group-spanner.cc
+++ b/lily/axis-group-spanner.cc
@@ -24,7 +24,7 @@ Axis_group_spanner::do_break_processing_if_unbroken()
     {
       if (!elems[i]->line_l()) 
 	{
-	  Item * item_l = elems[i]->access_Item ();
+	  Item * item_l = dynamic_cast<Item*> (elems[i]);
 	  if  (item_l
 	       && item_l->breakable_b_ 
 	       && item_l->break_status_dir() == 0) 
@@ -65,9 +65,9 @@ Axis_group_spanner::do_break_processing()
 	  /* this piece doesn't know where it belongs.
 	     Find out if it was broken, and use the broken remains
 	     */
-	  if (elt->access_Spanner ()) 
+	  if (dynamic_cast <Spanner *> (elt)) 
 	    {
-	      Spanner * sp = elt->access_Spanner ();
+	      Spanner * sp = dynamic_cast <Spanner *> (elt);
 		
 	      for (int j =0; j < broken_into_l_arr_.size(); j++) 
 		{
@@ -83,15 +83,15 @@ Axis_group_spanner::do_break_processing()
 		    
 		}
 	    }
-	  else if (elt->access_Item () 
-		   && elt->access_Item ()->breakable_b_ 
-		   && elt->access_Item ()->break_status_dir () == 0) 
+	  else if (dynamic_cast <Item *> (elt) 
+		   && dynamic_cast <Item *> (elt)->breakable_b_ 
+		   && dynamic_cast <Item *> (elt)->break_status_dir () == 0) 
 	    {
 	      // broken items
 	      Direction  j=LEFT;
 	      do 
 		{
-		  Item * my_item = elt->access_Item ()->broken_to_drul_[j];
+		  Item * my_item = dynamic_cast <Item *> (elt)->broken_to_drul_[j];
 		  Line_of_score * item_line_l = my_item->line_l() ;
 		  if (! item_line_l) 
 		    continue;
diff --git a/lily/bar-column-engraver.cc b/lily/bar-column-engraver.cc
index 2f1d760fa5..0832448a2a 100644
--- a/lily/bar-column-engraver.cc
+++ b/lily/bar-column-engraver.cc
@@ -52,7 +52,7 @@ Bar_column_engraver::create_column ()
 void
 Bar_column_engraver::acknowledge_element (Score_element_info info)
 {
-  Item * it = info.elem_l_->access_Item ();
+  Item * it = dynamic_cast <Item *> (info.elem_l_);
   if (!it)
     return;
 
diff --git a/lily/bar-column.cc b/lily/bar-column.cc
index e61c398900..74ce5386af 100644
--- a/lily/bar-column.cc
+++ b/lily/bar-column.cc
@@ -28,7 +28,7 @@ Bar_column::do_substitute_dependency (Score_element*o,Score_element*n)
   Script_column::do_substitute_dependency (o,n);
   if (o == bar_l_) 
     {
-      bar_l_ = n ? (Bar*)n->access_Item () : 0;
+      bar_l_ = n ? (Bar*)dynamic_cast <Item *> (n) : 0;
     }
 }
 
diff --git a/lily/bar-engraver.cc b/lily/bar-engraver.cc
index 78721871b1..7a2a515cdc 100644
--- a/lily/bar-engraver.cc
+++ b/lily/bar-engraver.cc
@@ -23,10 +23,10 @@ Bar_engraver::Bar_engraver()
 bool
 Bar_engraver::do_try_request (Request*r_l)
 {
-  Command_req* c_l = r_l->access_Command_req ();
-  if (!c_l|| !c_l->access_Bar_req ()) 
+  Command_req* c_l = dynamic_cast <Command_req *> (r_l);
+  if (!c_l|| !dynamic_cast <Bar_req *> (c_l)) 
     return false;
-  Bar_req  * b= c_l->access_Bar_req ();
+  Bar_req  * b= dynamic_cast <Bar_req *> (c_l);
   if (bar_req_l_ && bar_req_l_->equal_b (b))
     return false;
   
diff --git a/lily/bar-number-engraver.cc b/lily/bar-number-engraver.cc
index 76163d5b3f..380cb65145 100644
--- a/lily/bar-number-engraver.cc
+++ b/lily/bar-number-engraver.cc
@@ -26,7 +26,7 @@ void
 Bar_number_engraver::acknowledge_element (Score_element_info i)
 {
 
-  Item *it=i.elem_l_->access_Item ();
+  Item *it=dynamic_cast <Item *> (i.elem_l_);
   if (script_p_
       || !it || !it->is_type_b (Bar::static_name()))
       return;
diff --git a/lily/beam-engraver.cc b/lily/beam-engraver.cc
index 6ef0ba09fc..4ef398b499 100644
--- a/lily/beam-engraver.cc
+++ b/lily/beam-engraver.cc
@@ -25,11 +25,11 @@ Beam_engraver::Beam_engraver()
 bool
 Beam_engraver::do_try_request(Request*r)
 {
-  Musical_req* mus_l = r->access_Musical_req ();
+  Musical_req* mus_l = dynamic_cast <Musical_req *> (r);
   if (!mus_l)
     return false;
 
-  Beam_req* b = mus_l->access_Beam_req ();
+  Beam_req* b = dynamic_cast <Beam_req *> (mus_l);
   if (!b)
     return false;
 
@@ -100,14 +100,14 @@ Beam_engraver::acknowledge_element (Score_element_info i)
   if (!beam_p_ || !i.elem_l_->is_type_b (Stem::static_name ()))
     return;
 
-  Stem* s = (Stem*)i.elem_l_->access_Item ();
-  if (!i.req_l_ || !i.req_l_->access_Musical_req () || !i.req_l_->access_Musical_req ()->access_Rhythmic_req ())
+  Stem* s = (Stem*)dynamic_cast <Item *> (i.elem_l_);
+  if (!dynamic_cast <Rhythmic_req *> (i.req_l_))
     {
       ::warning ( _("Stem must have Rhythmic structure."));
       return;
     }
 
-  Rhythmic_req *rhythmic_req = i.req_l_->access_Musical_req ()->access_Rhythmic_req ();
+  Rhythmic_req *rhythmic_req = dynamic_cast <Rhythmic_req *> (i.req_l_);
   if (rhythmic_req->duration_.durlog_i_<= 2)
     {
       rhythmic_req->warning (_ ("stem doesn't fit in beam"));
diff --git a/lily/beam.cc b/lily/beam.cc
index 075f08df2d..a9dd24bda3 100644
--- a/lily/beam.cc
+++ b/lily/beam.cc
@@ -126,7 +126,7 @@ void
 Beam::do_substitute_dependent (Score_element*o,Score_element*n)
 {
   if (o->is_type_b (Stem::static_name ()))
-      stems_.substitute ((Stem*)o->access_Item (),  n? (Stem*) n->access_Item ():0);
+      stems_.substitute ((Stem*)dynamic_cast <Item *> (o),  n? (Stem*) dynamic_cast <Item *> (n):0);
 }
 
 Interval
diff --git a/lily/clef-engraver.cc b/lily/clef-engraver.cc
index 8195fbd9bf..462a9c1402 100644
--- a/lily/clef-engraver.cc
+++ b/lily/clef-engraver.cc
@@ -157,7 +157,7 @@ Clef_engraver::acknowledge_element (Score_element_info info)
     }
 
   /* ugh; should make Clef_referenced baseclass */
-  Item * it_l =info.elem_l_->access_Item ();
+  Item * it_l =dynamic_cast <Item *> (info.elem_l_);
 if (it_l)
   {
   if (it_l->is_type_b (Note_head::static_name ()))
@@ -195,11 +195,11 @@ Clef_engraver::do_creation_processing()
 bool
 Clef_engraver::do_try_request (Request * r_l)
 {
-  Command_req* creq_l= r_l->access_Command_req ();
-  if (!creq_l || !creq_l->access_Clef_change_req ())
+  Command_req* creq_l= dynamic_cast <Command_req *> (r_l);
+  if (!creq_l || !dynamic_cast <Clef_change_req *> (creq_l))
     return false;
 
-  clef_req_l_ = creq_l->access_Clef_change_req ();
+  clef_req_l_ = dynamic_cast <Clef_change_req *> (creq_l);
   read_req (clef_req_l_);
   return true;
 }
diff --git a/lily/collision-engraver.cc b/lily/collision-engraver.cc
index be5ab22866..d7c6a102ab 100644
--- a/lily/collision-engraver.cc
+++ b/lily/collision-engraver.cc
@@ -30,7 +30,7 @@ Collision_engraver::acknowledge_element (Score_element_info i)
 {
   if (i.elem_l_->is_type_b (Note_column::static_name ()))
     {
-      Note_column * c = (Note_column*) i.elem_l_->access_Item ();
+      Note_column * c = (Note_column*) dynamic_cast <Item *> (i.elem_l_);
       if (c->rest_b ())
 	return ;
 
diff --git a/lily/collision.cc b/lily/collision.cc
index c63c71747c..3a07ce18e1 100644
--- a/lily/collision.cc
+++ b/lily/collision.cc
@@ -165,6 +165,6 @@ IMPLEMENT_IS_TYPE_B1(Collision, Item);
 void
 Collision::do_substitute_dependency (Score_element*o_l,Score_element*n_l)
 {
-  clash_l_arr_.substitute ((Note_column*)o_l->access_Item (),
-			   (Note_column*)(n_l?n_l->access_Item ():0));
+  clash_l_arr_.substitute ((Note_column*)dynamic_cast <Item *> (o_l),
+			   (Note_column*)(n_l?dynamic_cast <Item *> (n_l):0));
 }
diff --git a/lily/command-request.cc b/lily/command-request.cc
index b32dc96ff4..e407f30661 100644
--- a/lily/command-request.cc
+++ b/lily/command-request.cc
@@ -32,7 +32,7 @@ Cadenza_req::do_print() const
 bool
 Cadenza_req::do_equal_b (Request*r) const
 {
-  Cadenza_req*cad =  r->access_Command_req ()->access_Timing_req ()->access_Cadenza_req ();
+  Cadenza_req*cad =  dynamic_cast <Cadenza_req *> (r);
 
   return cad->on_b_ == on_b_;
 }
@@ -47,7 +47,7 @@ Cadenza_req::Cadenza_req (bool b)
 bool
 Bar_req::do_equal_b (Request*r) const
 {
-  Bar_req * b = r->access_Command_req ()->access_Bar_req ();
+  Bar_req * b = dynamic_cast <Bar_req *> (r);
   return type_str_ == b->type_str_;
 }
 
@@ -81,7 +81,7 @@ Partial_measure_req::Partial_measure_req (Moment m)
 bool
 Partial_measure_req::do_equal_b (Request* r) const
 {
-  Partial_measure_req *p = r->access_Command_req ()->access_Timing_req ()->access_Partial_measure_req ();
+  Partial_measure_req *p = dynamic_cast <Partial_measure_req *> (r);
 
   return p->duration_ == duration_;
 }
@@ -150,7 +150,7 @@ Time_signature_change_req::do_print() const
 bool
 Time_signature_change_req::do_equal_b (Request * r) const
 {
-  Time_signature_change_req * m = r->access_Command_req ()->access_Timing_req ()->access_Time_signature_change_req ();
+  Time_signature_change_req * m = dynamic_cast <Time_signature_change_req *> (r);
 
   return m->beats_i_ == beats_i_
     && one_beat_i_ == m->one_beat_i_;
@@ -179,7 +179,7 @@ IMPLEMENT_IS_TYPE_B1(Tempo_req, Timing_req);
 bool
 Tempo_req::do_equal_b (Request *r) const
 {
-  Tempo_req *t = r->access_Command_req ()->access_Timing_req ()->access_Tempo_req ();
+  Tempo_req *t = dynamic_cast <Tempo_req *> (r);
 
   return t->dur_.length()== dur_.length () && metronome_i_ == t->metronome_i_;
 }
diff --git a/lily/dimensions.cc b/lily/dimensions.cc
new file mode 100644
index 0000000000..1023450ee4
--- /dev/null
+++ b/lily/dimensions.cc
@@ -0,0 +1,19 @@
+// dimensions.cc
+
+#include "dimensions.hh"
+#include "debug.hh"
+#include "string.hh"
+
+String
+print_dimen (Real r)
+{
+  String s = to_str (r, "%.3f");
+  if (s.index_i ("NaN") != -1)
+    {
+      warning (_ ("NaN"));
+      s = "0.0";
+    }
+  s += "pt";
+  return s;
+}
+
diff --git a/lily/dot-column-engraver.cc b/lily/dot-column-engraver.cc
index 04ae0bfba4..ae6259ac4c 100644
--- a/lily/dot-column-engraver.cc
+++ b/lily/dot-column-engraver.cc
@@ -30,7 +30,7 @@ Dot_column_engraver::do_pre_move_processing ()
 void
 Dot_column_engraver::acknowledge_element (Score_element_info info)
 {
-  Item * i=info.elem_l_->access_Item ();
+  Item * i=dynamic_cast <Item *> (info.elem_l_);
   
   if (! (i && i->is_type_b (Rhythmic_head::static_name ())))
       return;
diff --git a/lily/dot-column.cc b/lily/dot-column.cc
index bb1885ca88..cee8a3edec 100644
--- a/lily/dot-column.cc
+++ b/lily/dot-column.cc
@@ -32,8 +32,8 @@ Dot_column::add_head (Rhythmic_head *r)
 void
 Dot_column::do_substitute_dependency (Score_element*o,Score_element*n)
 {
-  Item *oi =o->access_Item ();
-  Item *ni = n?n->access_Item ():0;
+  Item *oi =dynamic_cast <Item *> (o);
+  Item *ni = n?dynamic_cast <Item *> (n):0;
   
   if (oi&&oi->is_type_b (Rhythmic_head::static_name ()))
     head_l_arr_.substitute ((Rhythmic_head*)oi, (Rhythmic_head*)ni);
diff --git a/lily/dynamic-engraver.cc b/lily/dynamic-engraver.cc
index 1b7107f80d..2b38c4c08e 100644
--- a/lily/dynamic-engraver.cc
+++ b/lily/dynamic-engraver.cc
@@ -34,23 +34,23 @@ Dynamic_engraver::do_post_move_processing()
 bool
 Dynamic_engraver::do_try_request (Request * r)
 {
-  Musical_req * m = r->access_Musical_req ();
+  Musical_req * m = dynamic_cast <Musical_req *> (r);
   if (!m)
     return false;
-  Dynamic_req * d = m->access_Dynamic_req ();
+  Dynamic_req * d = dynamic_cast <Dynamic_req *> (m);
   if (!d)
     return false;
 
 #if 0
-  if (cresc_p_ && d->access_Span_dynamic_req ()
-      && d->access_Span_dynamic_req ()->spantype == Span_req::START)
+  if (cresc_p_ && dynamic_cast <Span_dynamic_req *> (d)
+      && dynamic_cast <Span_dynamic_req *> (d)->spantype == Span_req::START)
     return false;
 #endif
   for (int i=0; i < dynamic_req_l_arr_.size (); i++)
     if (d->equal_b (dynamic_req_l_arr_[i]))
       return true;
 
-  dynamic_req_l_arr_.push (m->access_Dynamic_req ());
+  dynamic_req_l_arr_.push (dynamic_cast <Dynamic_req *> (m));
   return true;
 }
 void
@@ -60,7 +60,7 @@ Dynamic_engraver::do_process_requests()
   for (int i=0; i < dynamic_req_l_arr_.size(); i++)
     {
       Dynamic_req *dreq_l = dynamic_req_l_arr_[i];
-      if (dreq_l->access_Absolute_dynamic_req ())
+      if (dynamic_cast <Absolute_dynamic_req *> (dreq_l))
 	{
 
 	  if (dynamic_p_)
@@ -71,7 +71,7 @@ Dynamic_engraver::do_process_requests()
 	  
 	  Text_def * td_p = new Text_def;
 	  td_p->align_dir_ = CENTER;
-	  String loud = dreq_l->access_Absolute_dynamic_req ()->loudness_str ();
+	  String loud = dynamic_cast <Absolute_dynamic_req *> (dreq_l)->loudness_str ();
 	  td_p->text_str_ = paper ()->lookup_l (0)->dynamic (loud).str_;
 	  td_p->style_str_ = "dynamic";
 
@@ -80,9 +80,9 @@ Dynamic_engraver::do_process_requests()
 	  dynamic_p_ = new Text_item (td_p);
 	  announce_element (Score_element_info (dynamic_p_, dreq_l));
 	}
-      else if (dreq_l->access_Span_dynamic_req ())
+      else if (dynamic_cast <Span_dynamic_req *> (dreq_l))
 	{
-	  Span_dynamic_req* span_l = dreq_l->access_Span_dynamic_req ();
+	  Span_dynamic_req* span_l = dynamic_cast <Span_dynamic_req *> (dreq_l);
 	  if (span_l->spantype == Span_req::STOP)
 	    {
 	      if (!cresc_p_)
diff --git a/lily/engraver-group.cc b/lily/engraver-group.cc
index 2dc0b4131b..2c1b3d2d86 100644
--- a/lily/engraver-group.cc
+++ b/lily/engraver-group.cc
@@ -30,7 +30,7 @@ Engraver_group_engraver::do_announces()
   Link_array<Translator_group> groups = group_l_arr ();
   for (int i=0; i < groups.size(); i++) 
     {
-      Engraver * eng = groups[i]->access_Engraver  ();
+      Engraver * eng = dynamic_cast<Engraver*> (groups[i]);
       if (eng)
 	{
 	  Engraver_group_engraver * group =
@@ -52,7 +52,7 @@ Engraver_group_engraver::do_announces()
 	    info.req_l_ = &dummy_req;
 	  for (int i=0; i < nongroups.size(); i++) 
 	    {	// Is this good enough?
-	      Engraver * eng = nongroups[i]->access_Engraver  ();
+	      Engraver * eng = dynamic_cast<Engraver*> (nongroups[i]);
 	      if (eng && eng!= info.origin_grav_l_arr_[0])
 		eng->acknowledge_element (info);
 	    }
@@ -60,7 +60,7 @@ Engraver_group_engraver::do_announces()
       announce_info_arr_.clear ();
       for (int i=0; i < nongroups.size(); i++)
 	{
-	  Engraver * eng = nongroups[i]->access_Engraver  ();
+	  Engraver * eng = dynamic_cast<Engraver*> (nongroups[i]);
 	  if (eng)
 	    eng->process_acknowledged ();
 	}
@@ -77,7 +77,7 @@ Engraver_group_engraver::get_staff_info() const
   Link_array<Translator> simple_translators = nongroup_l_arr (); 
   for (int i=0; i < simple_translators.size(); i++)
     {
-    Engraver * eng = simple_translators[i]->access_Engraver  ();
+    Engraver * eng = dynamic_cast<Engraver*> (simple_translators[i]);
     if (eng)
       eng->fill_staff_info (inf);
     }
diff --git a/lily/engraver.cc b/lily/engraver.cc
index ecad055870..8a79b60346 100644
--- a/lily/engraver.cc
+++ b/lily/engraver.cc
@@ -26,13 +26,13 @@ Engraver::announce_element (Score_element_info i)
   daddy_grav_l()->announce_element (i);
 }
 
-
 void
 Engraver::typeset_element (Score_element*p)
 {
   daddy_grav_l()->typeset_element (p);
 }
 
+
 Paper_def*
 Engraver::paper() const
 {
@@ -57,6 +57,6 @@ Engraver_group_engraver*
 Engraver::daddy_grav_l () const
 {
   return (daddy_trans_l_ )
-       ? (Engraver_group_engraver*) daddy_trans_l_->access_Engraver  ()
+       ? (Engraver_group_engraver*) dynamic_cast <Engraver *> (daddy_trans_l_)
        : 0;
 }
diff --git a/lily/gourlay-breaking.cc b/lily/gourlay-breaking.cc
index d8fda8415c..8fd59f00d3 100644
--- a/lily/gourlay-breaking.cc
+++ b/lily/gourlay-breaking.cc
@@ -14,7 +14,7 @@
 #include "p-score.hh"
 #include "paper-def.hh"
 
-const HAPPY_DOTS_I = 3;
+const int HAPPY_DOTS_I = 3;
 
 /**
   Helper to trace back an optimal path 
diff --git a/lily/graphical-lisp-element.cc b/lily/graphical-lisp-element.cc
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/lily/hara-kiri-line-group-engraver.cc b/lily/hara-kiri-line-group-engraver.cc
index ab12bf8780..d85437a921 100644
--- a/lily/hara-kiri-line-group-engraver.cc
+++ b/lily/hara-kiri-line-group-engraver.cc
@@ -26,7 +26,7 @@ Hara_kiri_line_group_engraver::typeset_element(Score_element * e)
 {
   if (e->is_type_b (Note_head::static_name ()))
     ((Hara_kiri_vertical_group_spanner*)staffline_p_)->add_note 
-      ((Note_head*)e->access_Item ());
+      ((Note_head*)dynamic_cast <Item *> (e));
 
   Line_group_engraver_group::typeset_element (e);
 }
diff --git a/lily/hara-kiri-vertical-group-spanner.cc b/lily/hara-kiri-vertical-group-spanner.cc
index 849a2552fa..38468cf91c 100644
--- a/lily/hara-kiri-vertical-group-spanner.cc
+++ b/lily/hara-kiri-vertical-group-spanner.cc
@@ -44,8 +44,8 @@ void
 Hara_kiri_vertical_group_spanner::do_substitute_dependency (Score_element*o, Score_element*n)
 {
   if (o->is_type_b (Note_head::static_name ()))
-    head_l_arr_.substitute ((Note_head*)o->access_Item (), 
-      (n)? (Note_head*)n->access_Item () : 0);
+    head_l_arr_.substitute ((Note_head*)dynamic_cast <Item *> (o), 
+      (n)? (Note_head*)dynamic_cast <Item *> (n) : 0);
 }
 
 
diff --git a/lily/head-engraver.cc b/lily/head-engraver.cc
index c8c5e79248..ce4e5dcdf3 100644
--- a/lily/head-engraver.cc
+++ b/lily/head-engraver.cc
@@ -23,11 +23,10 @@ Note_head_engraver::do_try_request (Request *req_l)
   if (note_req_l_)
     return false;
   
-  if (!(req_l->access_Musical_req () && req_l->access_Musical_req ()->access_Note_req ()))
-
+  if (!(dynamic_cast <Note_req *> (req_l)))
     return false;
   
-  note_req_l_=req_l->access_Musical_req ()->access_Rhythmic_req ();
+  note_req_l_=dynamic_cast <Rhythmic_req *> (req_l);
   return true;
 }
 
@@ -47,7 +46,7 @@ Note_head_engraver::do_process_requests()
       announce_element (Score_element_info (dot_p_,0));
     }
   
-  note_p_->position_i_ = note_req_l_->access_Note_req ()->pitch_.steps ();
+  note_p_->position_i_ = dynamic_cast <Note_req *> (note_req_l_)->pitch_.steps ();
 
   
   Score_element_info itinf (note_p_,note_req_l_);
diff --git a/lily/heads-engraver.cc b/lily/heads-engraver.cc
index 63e192ea06..a8e0aaa46b 100644
--- a/lily/heads-engraver.cc
+++ b/lily/heads-engraver.cc
@@ -18,10 +18,10 @@ Note_heads_engraver::Note_heads_engraver()
 bool
 Note_heads_engraver::do_try_request (Request *req_l) 
 {
-  if (!req_l->access_Musical_req ()) 
+  if (!dynamic_cast <Musical_req *> (req_l)) 
     return false;
 
-  Note_req * n =req_l->access_Musical_req ()->access_Note_req ();
+  Note_req * n =dynamic_cast <Note_req *> (req_l);
   if (!n)
     return false;
   
@@ -49,7 +49,7 @@ Note_heads_engraver::do_process_requests()
 	  dot_p_arr_.push (d);
 	}
 
-      note_p->position_i_ = note_req_l->access_Note_req ()->pitch_.steps ();
+      note_p->position_i_ = dynamic_cast <Note_req *> (note_req_l)->pitch_.steps ();
 
   
       Score_element_info itinf (note_p,note_req_l);
diff --git a/lily/include/atom.hh b/lily/include/atom.hh
index 0d88e7ce31..f9621382bc 100644
--- a/lily/include/atom.hh
+++ b/lily/include/atom.hh
@@ -9,17 +9,19 @@
 #ifndef ATOM_HH
 #define ATOM_HH
 
+#include "lily-guile.hh"
 #include "string.hh"
 #include "box.hh"
 #include "lily-proto.hh"
 
-
 /// a symbol which can be translated, and freely copied
 class Atom {
   Offset off_;
 public:
+  // urg, only used as a temp buffer
   String str_;
   String font_;
+  SCM lambda_;
   Box dim_;
 
   Offset offset () const;
diff --git a/lily/include/auto-plet-engraver.hh b/lily/include/auto-plet-engraver.hh
index a8cafb9c7c..b17e166415 100644
--- a/lily/include/auto-plet-engraver.hh
+++ b/lily/include/auto-plet-engraver.hh
@@ -23,8 +23,8 @@ public:
 protected:
   Link_array<Bracket_req> bracket_req_arr_;
 
-  Link_array<Slur> started_span_p_arr_;
-  Link_array<Slur> stop_now_span_p_arr_;
+  Link_array<Plet_spanner> started_span_p_arr_;
+  Link_array<Plet_spanner> stop_now_span_p_arr_;
 
   virtual void do_removal_processing ();
   virtual void acknowledge_element (Score_element_info);
diff --git a/lily/include/dimensions.hh b/lily/include/dimensions.hh
index 777d80e89c..65629f03d5 100644
--- a/lily/include/dimensions.hh
+++ b/lily/include/dimensions.hh
@@ -14,5 +14,7 @@ const Real PT_TO_PT =1.0;
 #define CM  *CM_TO_PT
 #define INCH *INCH_TO_PT
 
+String print_dimen (Real);
+
 #endif // DIMENSIONS_HH
 
diff --git a/lily/include/engraver.hh b/lily/include/engraver.hh
index a8086af1f5..9dc6594c8e 100644
--- a/lily/include/engraver.hh
+++ b/lily/include/engraver.hh
@@ -36,6 +36,7 @@ protected:
     Invoke walker method to typeset element. Default: pass on to daddy.
     */
   virtual void typeset_element (Score_element*elem_p);
+
     
   /**
     take note of item/spanner
diff --git a/lily/include/lily-guile.hh b/lily/include/lily-guile.hh
index 1ea707038e..56ce820c7e 100644
--- a/lily/include/lily-guile.hh
+++ b/lily/include/lily-guile.hh
@@ -11,6 +11,10 @@
 
 #include "config.hh"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #ifdef HAVE_LIBGUILE
 extern "C" { 
 #include <guile/gh.h> 
@@ -18,4 +22,22 @@ extern "C" {
 #else
 typedef long SCM;
 #endif
+
+SCM ly_append (SCM a, SCM b);
+SCM ly_eval (SCM a);
+SCM ly_func_o (char const* name);
+SCM ly_lambda_o ();
+SCM ly_list1 (SCM a);
+SCM ly_list2(SCM a, SCM b);
+SCM ly_quote ();
+
+#ifdef __cplusplus
+}
+#endif
+
+#include "array.hh"
+#include "scalar.hh"
+SCM lambda_scm (String str, Array<Real> args_arr);
+SCM lambda_scm (String str, Array<Scalar> args_arr);
+
 #endif // LILY_GUILE_HH
diff --git a/lily/include/lily-proto.hh b/lily/include/lily-proto.hh
index b7af83ec16..0ac8ebf0cc 100644
--- a/lily/include/lily-proto.hh
+++ b/lily/include/lily-proto.hh
@@ -77,6 +77,7 @@ struct Element_group_item;
 struct Engraver_group_engraver;
 struct General_script_def;
 struct Graphical_element;
+
 struct Graphical_axis_group;
 struct Mark_req;
 struct Music_output;
@@ -174,9 +175,6 @@ struct Piano_brace;
 struct Performer;
 struct Performer_group_performer;
 struct Property_iterator;
-struct Ps_lookup;
-struct Ps_outputter;
-struct Ps_stream;
 struct Request;
 struct Request_column;
 struct Engraver;
@@ -228,9 +226,6 @@ struct Symtables;
 struct Super_element;
 struct Translation_property;
 struct Tempo_req;
-struct Tex_lookup;
-struct Tex_outputter;
-struct Tex_stream;
 struct Text_def;
 struct Text_gob;
 struct Text_item ;
diff --git a/lily/include/lookup.hh b/lily/include/lookup.hh
index 7efe60bb7e..6b7047651d 100644
--- a/lily/include/lookup.hh
+++ b/lily/include/lookup.hh
@@ -27,53 +27,33 @@ public:
   Lookup ();
   Lookup (Lookup const&);
   Lookup (Symtables const&);
-  virtual ~Lookup ();
+  ~Lookup ();
   
   Atom accidental (int) const;
   void add (String, Symtable*);
-  virtual Atom afm_find (String s) const = 0;
-  Atom afm_find (String, String) const;
-  virtual Atom* atom_p (String, int, Box) const = 0;
+  Atom afm_find (String) const;
   Atom ball (int) const;
   Atom bar (String, Real height) const;
-  String base_output_str () const;
   Atom beam (Real,Real, Real) const;
-  virtual String character_str (int i) const;
   Atom clef (String) const;
-  virtual Atom dashed_slur (Array<Offset> controls, Real thick, Real dash) const = 0;
+  Atom dashed_slur (Array<Offset> controls, Real thick, Real dash) const;
   Atom dots () const;
   Atom dynamic (String) const;
   Atom fill (Box b) const;
   Atom flag (int, Direction) const;
-  virtual Atom hairpin (Real width, bool decresc, bool continued) const = 0;
-  virtual Lookup* lookup_p (Lookup const&) const = 0;
-  virtual Lookup* lookup_p (Symtables const&) const = 0;
-  virtual Paper_outputter* paper_outputter_p (Paper_stream*, Paper_def*, Scope*, String) const = 0;
-  virtual Paper_stream* paper_stream_p () const = 0;
-  virtual Atom plet (Real dy, Real dx, Direction dir) const = 0;
+  Atom hairpin (Real width, bool decresc, bool continued) const;
+  Atom plet (Real dy, Real dx, Direction dir) const;
   void print () const;
-  virtual Atom ps_beam (Real slope, Real width, Real thick) const = 0;
-  virtual String print_dimen (Real) const;
+  Atom ps_beam (Real slope, Real width, Real thick) const;
   Atom rest (int, bool outside) const;
   Atom rule_symbol (Real height, Real width) const;
   Atom script (String idx) const;
-  /** paratime_signature substitution in lookup strings.
-      this function provides a simple macro mechanism:
-
-      if source == "tex%bla%", then
-      substitute_args (source, {"X","Y"})  == "texXblaY"
-  */
-  String substitute_args (String source, Array<String> args) const;
-  /// paratime_signature substitution in lookup strings
-  String substitute_args (String source, Array<Scalar> args) const;
-  virtual Atom stem (Real y1_pos, Real y2_pos) const = 0;
-  Atom stem (Real y1_pos, Real y2_pos, String) const;
-  virtual Atom slur (Array<Offset> controls) const = 0;
+  Atom stem (Real y1_pos, Real y2_pos) const;
+  Atom slur (Array<Offset> controls) const;
   Atom streepje (int type) const;
-  virtual Atom text (String style, String text) const;
-  virtual String unknown_str () const = 0;
+  Atom text (String style, String text) const;
   Atom vbrace (Real &dy) const;
-  virtual Atom vbracket (Real &dy) const = 0;
+  Atom vbracket (Real &dy) const;
   Atom special_time_signature (String, Array<Scalar>) const;
   Atom time_signature (Array<Scalar>) const;
 
diff --git a/lily/include/main.hh b/lily/include/main.hh
index 072813b2f1..68b1b21363 100644
--- a/lily/include/main.hh
+++ b/lily/include/main.hh
@@ -24,7 +24,7 @@ extern bool no_timestamps_global_b;
 extern bool find_quarts_global_b;
 extern int exit_status_i_;
 extern bool experimental_features_global_b;
-extern Lookup* global_lookup_l;
+extern char const* output_global_ch;
 extern bool dependency_global_b;
 extern bool version_ignore_global_b;
 
diff --git a/lily/include/paper-def.hh b/lily/include/paper-def.hh
index 87bfe54573..0ae3a6981e 100644
--- a/lily/include/paper-def.hh
+++ b/lily/include/paper-def.hh
@@ -38,7 +38,6 @@ class Paper_def : public Music_output_def
 {
   Assoc<int, Lookup *> *lookup_p_assoc_p_;
   static int default_count_i_;
-  bool ps_b_;
 
 protected:
   VIRTUAL_COPY_CONS(Paper_def,Music_output_def);
@@ -92,9 +91,12 @@ public:
   Real arithmetic_constant (Moment minimal_mom) const;
   Real arithmetic_spacing (Moment mom,Real constant) const;
   virtual int get_next_default_count () const;
-  //urg
-  String tex_output_settings_str () const;
-  String ps_output_settings_str () const;
+
+  void output_settings (Paper_outputter*) const;
+  Paper_outputter* paper_outputter_p (Paper_stream*, Scope*, String) const;
+  Paper_stream* paper_stream_p () const;
+  String base_output_str () const;
+
   // urg
   friend int yyparse (void*);
 };
diff --git a/lily/include/paper-outputter.hh b/lily/include/paper-outputter.hh
index 5fa1204b2f..e88e6fa5c6 100644
--- a/lily/include/paper-outputter.hh
+++ b/lily/include/paper-outputter.hh
@@ -13,6 +13,7 @@
 #include "lily-proto.hh"
 #include "array.hh"
 #include "string.hh"
+#include "lily-guile.hh"
 
 /**
   Abstract interface for a Score_element to output itself.
@@ -21,13 +22,18 @@ class Paper_outputter
 {
 public:
   Paper_outputter (Paper_stream *);
-  virtual ~Paper_outputter ();
-
-  virtual void output_molecule (Molecule const *, Offset, char const *)=0;
-  void output_molecule (Molecule const *, Offset, char const *, String);
-  virtual void start_line ()=0;
-  virtual void stop_line ()=0;
-  virtual void switch_to_font (String fontname)=0;
+  ~Paper_outputter ();
+
+  void output_font_def (int i, String str);
+  void output_font_switch (int i);
+  void output_header ();
+  void output_molecule (Molecule const *, Offset, char const *);
+  void output_comment (String s);
+  void output_scheme (SCM scm);
+  void output_string (String s);
+  void start_line ();
+  void stop_line ();
+  void switch_to_font (String fontname);
 
   Array<String> font_arr_;
   String current_font_;
diff --git a/lily/include/paper-stream.hh b/lily/include/paper-stream.hh
index dc5b08541e..e5429511f6 100644
--- a/lily/include/paper-stream.hh
+++ b/lily/include/paper-stream.hh
@@ -21,13 +21,12 @@ public:
     
     /// open a file for writing
     Paper_stream (String filename);
-    virtual void header () = 0;
 
     /// delegate conversion to scalar class
-    virtual Paper_stream &operator <<(Scalar);
+    Paper_stream &operator <<(Scalar);
 
     /// close the file
-    virtual ~Paper_stream();
+    ~Paper_stream();
 
 private:
     Paper_stream (Paper_stream const&);
diff --git a/lily/include/ps-lookup.hh b/lily/include/ps-lookup.hh
deleted file mode 100644
index 2eb9ed025a..0000000000
--- a/lily/include/ps-lookup.hh
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-  tex-lookup.hh -- declare Tex_lookup
-
-  source file of the GNU LilyPond music typesetter
-
-  (c)  1997--1998 Jan Nieuwenhuizen <janneke@gnu.org>
-*/
-
-#ifndef PS_LOOKUP_HH
-#define PS_LOOKUP_HH
-
-#include "lookup.hh"
-
-class Ps_lookup : public Lookup
-{
-public:
-  Ps_lookup ();
-  Ps_lookup (Lookup const& s);
-  Ps_lookup (Symtables const& s);
-  virtual ~Ps_lookup ();
-
-  virtual Atom afm_find (String s) const;
-  virtual Atom* atom_p (String, int, Box) const;
-  virtual String character_str (int i) const;
-  virtual Atom dashed_slur (Array<Offset> controls, Real thick, Real dash) const;
-  virtual Atom hairpin (Real width, bool decresc, bool continued) const;
-  virtual Lookup* lookup_p (Lookup const&) const;
-  virtual Lookup* lookup_p (Symtables const&) const;
-  virtual Paper_outputter* paper_outputter_p (Paper_stream*, Paper_def*, Scope*, String) const;
-  virtual Paper_stream* paper_stream_p () const;
-  virtual Atom plet (Real dy , Real dx, Direction dir) const;
-  virtual Atom ps_beam (Real slope, Real width, Real thick) const;
-  virtual Atom slur (Array<Offset> controls) const;
-  virtual Atom stem (Real y1, Real y2) const;
-  virtual Atom text (String style, String text) const;
-  virtual String unknown_str () const;
-  virtual Atom vbracket (Real &y) const;
-};
-
-#endif // PS_LOOKUP_HH
diff --git a/lily/include/ps-outputter.hh b/lily/include/ps-outputter.hh
deleted file mode 100644
index 8cbcf183d9..0000000000
--- a/lily/include/ps-outputter.hh
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
-  ps-outputter.hh -- declare Ps_outputter
-
-  source file of the GNU LilyPond music typesetter
-
-  (c)  1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-*/
-
-
-#ifndef PS_OUTPUTTER_HH
-#define PS_OUTPUTTER_HH
-
-#include "paper-outputter.hh"
-
-class Ps_outputter : public Paper_outputter
-{
-public:
-  Ps_outputter (Paper_stream *);
-  virtual ~Ps_outputter ();
-
-  void switch_to_font (String);
-  virtual void output_molecule (Molecule const*, Offset, char const*);
-  virtual void start_line ();
-  virtual void stop_line ();
-};
-
-#endif // PS_OUTPUTTER_HH
diff --git a/lily/include/ps-stream.hh b/lily/include/ps-stream.hh
deleted file mode 100644
index a61be0ad5b..0000000000
--- a/lily/include/ps-stream.hh
+++ /dev/null
@@ -1,21 +0,0 @@
-#ifndef PS_STREAM_HH
-#define PS_STREAM_HH
-
-#include "paper-stream.hh"
-
-/** PS output.
-  Use this class for writing to a PS file.
-  It counts braces to prevent nesting errors, and
-  it will add a comment sign before each newline.
-  */
-class Ps_stream : public Paper_stream
-{
-public:
-    Ps_stream (String filename);
-    virtual ~Ps_stream();
-
-    virtual void header();
-    virtual Paper_stream &operator <<(Scalar);
-};
-
-#endif // PS_STREAM_HH
diff --git a/lily/include/score-element-info.hh b/lily/include/score-element-info.hh
index 95d69a0d48..9870cecb15 100644
--- a/lily/include/score-element-info.hh
+++ b/lily/include/score-element-info.hh
@@ -19,10 +19,12 @@
   */
 struct Score_element_info {
     Score_element * elem_l_;
+
     Request*req_l_;
     Array<Engraver*> origin_grav_l_arr_;
 
     Score_element_info (Score_element*, Request*);
+
     Score_element_info();
 };
 
diff --git a/lily/include/score-engraver.hh b/lily/include/score-engraver.hh
index 5d59fc06f7..fae750a39a 100644
--- a/lily/include/score-engraver.hh
+++ b/lily/include/score-engraver.hh
@@ -53,6 +53,7 @@ protected:
   virtual void announce_element (Score_element_info);
   virtual void do_announces();
   virtual void typeset_element (Score_element*elem_p);
+
   virtual void do_pre_move_processing();
   virtual void do_add_processing ();
 };
diff --git a/lily/include/tex-lookup.hh b/lily/include/tex-lookup.hh
deleted file mode 100644
index cdb9839fcc..0000000000
--- a/lily/include/tex-lookup.hh
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
-  tex-lookup.hh -- declare Tex_lookup
-
-  source file of the GNU LilyPond music typesetter
-
-  (c)  1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-  Jan Nieuwenhuizen <janneke@gnu.org>
-*/
-
-#ifndef TEX_LOOKUP_HH
-#define TEX_LOOKUP_HH
-
-#include "ps-lookup.hh"
-
-class Tex_lookup : public Ps_lookup
-{
-public:
-  Tex_lookup ();
-  Tex_lookup (Lookup const& s);
-  Tex_lookup (Symtables const& s);
-  virtual ~Tex_lookup();
-
-  virtual Atom afm_find (String s) const;
-  virtual String character_str (int i) const;
-  virtual Atom dashed_slur (Array<Offset> controls, Real thick, Real dash) const;
-  virtual Atom* atom_p (String, int, Box) const;
-  Atom embed (Atom a) const;
-  virtual Atom hairpin (Real width, bool decresc, bool continued) const;
-  virtual Lookup* lookup_p (Lookup const&) const;
-  virtual Lookup* lookup_p (Symtables const&) const;
-  virtual Paper_outputter* paper_outputter_p (Paper_stream*, Paper_def*, Scope*, String) const;
-  virtual Paper_stream* paper_stream_p () const;
-  virtual Atom plet (Real dy , Real dx, Direction dir) const;
-  virtual String print_dimen (Real) const;
-  virtual Atom ps_beam (Real slope, Real width, Real thick) const;
-  virtual Atom slur (Array<Offset> controls) const;
-  virtual Atom stem (Real y1, Real y2) const;
-  virtual Atom text (String style, String text) const;
-  virtual String unknown_str () const;
-  virtual Atom vbracket (Real &y) const;
-};
-
-#endif // TEX_LOOKUP_HH
diff --git a/lily/include/tex-outputter.hh b/lily/include/tex-outputter.hh
deleted file mode 100644
index d4461c2bac..0000000000
--- a/lily/include/tex-outputter.hh
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
-  tex-outputter.hh -- declare Tex_outputter
-
-  source file of the GNU LilyPond music typesetter
-
-  (c)  1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-*/
-
-
-#ifndef TEX_OUTPUTTER_HH
-#define TEX_OUTPUTTER_HH
-
-#include "paper-outputter.hh"
-
-class Tex_outputter : public Paper_outputter
-{
-public:
-  Tex_outputter (Paper_stream *);
-  virtual ~Tex_outputter ();
-
-  void switch_to_font (String);
-  virtual void output_molecule (Molecule const*, Offset, char const*);
-  virtual void start_line ();
-  virtual void stop_line ();
-};
-
-#endif // TEX_OUTPUTTER_HH
diff --git a/lily/include/tex-stream.hh b/lily/include/tex-stream.hh
deleted file mode 100644
index 7f94aec2b1..0000000000
--- a/lily/include/tex-stream.hh
+++ /dev/null
@@ -1,21 +0,0 @@
-#ifndef TEX_STREAM_HH
-#define TEX_STREAM_HH
-
-#include "paper-stream.hh"
-
-/** TeX output.
-  Use this class for writing to a TeX file.
-  It counts braces to prevent nesting errors, and
-  it will add a comment sign before each newline.
-  */
-class Tex_stream : public Paper_stream
-{
-public:
-    Tex_stream (String filename);
-    virtual ~Tex_stream();
-
-    virtual void header();
-    virtual Paper_stream &operator <<(Scalar);
-};
-
-#endif // TEX_STREAM_HH
diff --git a/lily/item.cc b/lily/item.cc
index 78db9884e9..e48d576cfd 100644
--- a/lily/item.cc
+++ b/lily/item.cc
@@ -48,8 +48,8 @@ Item::line_l() const
   if (!ga)
     return 0;
   
-  assert (ga->access_Score_element());
-  return ga->access_Score_element ()-> line_l ();
+  assert (dynamic_cast <Score_element *> (ga));
+  return dynamic_cast <Score_element *> (ga)-> line_l ();
 }
 
 Direction
@@ -67,7 +67,7 @@ Item::copy_breakable_items()
   Direction  i=LEFT;
   do 
     {
-      Item * item_p = clone()->access_Item ();
+      Item * item_p = dynamic_cast<Item*>(clone());
 
       item_p->break_status_dir_ =  i;
       pscore_l_->typeset_element (item_p);
@@ -130,9 +130,9 @@ int
 Item::left_right_compare(Item const *l, Item const *r)
 {
   while (!l->is_type_b (Paper_column::static_name ()))
-    l = l->axis_group_l_a_[X_AXIS]->access_Score_element ()->access_Item ();
+    l = dynamic_cast<Item*> (l->axis_group_l_a_[X_AXIS]);
   while (!r->is_type_b (Paper_column::static_name ()))
-    r = r->axis_group_l_a_[X_AXIS]->access_Score_element ()->access_Item ();
+    r = dynamic_cast<Item*> (r->axis_group_l_a_[X_AXIS]);
 
   Paper_column *p1 = (Paper_column*)l;
   Paper_column* p2 = (Paper_column*)r;
@@ -176,7 +176,7 @@ Item::do_unlink()
 Paper_column *
 Item::column_l () const
 {
-  return axis_group_l_a_[X_AXIS]->access_Score_element ()->access_Item ()->column_l ();
+  return dynamic_cast<Item*> (axis_group_l_a_[X_AXIS]) ->column_l ();
 }
 
 Item::Item (Item const &s)
diff --git a/lily/key-engraver.cc b/lily/key-engraver.cc
index 83fd6ec6db..bb66802d86 100644
--- a/lily/key-engraver.cc
+++ b/lily/key-engraver.cc
@@ -36,13 +36,13 @@ Key_engraver::create_key ()
 bool
 Key_engraver::do_try_request (Request * req_l)
 {
-  Command_req* creq_l= req_l->access_Command_req ();
-  if (!creq_l|| !creq_l->access_Key_change_req ())
+  Command_req* creq_l= dynamic_cast <Command_req *> (req_l);
+  if (!creq_l|| !dynamic_cast <Key_change_req *> (creq_l))
     return false;
    
   if (keyreq_l_)
     return false;		// TODO
-  keyreq_l_ = creq_l->access_Key_change_req ();
+  keyreq_l_ = dynamic_cast <Key_change_req *> (creq_l);
   read_req (keyreq_l_);
   return true;
 }
@@ -50,9 +50,9 @@ Key_engraver::do_try_request (Request * req_l)
 void
 Key_engraver::acknowledge_element (Score_element_info info)
 {
-  Command_req * r_l = info.req_l_->access_Command_req () ;
+  Command_req * r_l = dynamic_cast <Command_req *> (info.req_l_) ;
 
-  if (r_l && r_l->access_Clef_change_req ()) 
+  if (r_l && dynamic_cast <Clef_change_req *> (r_l)) 
     {
       int i= get_property ("createKeyOnClefChange").length_i ();
       if (i)
diff --git a/lily/key-performer.cc b/lily/key-performer.cc
index 02e80fca28..3ccac03e21 100644
--- a/lily/key-performer.cc
+++ b/lily/key-performer.cc
@@ -47,11 +47,11 @@ Key_performer::do_try_request (Request* req_l)
   if (key_req_l_)
 	return false;
 
-  if (req_l->access_Command_req ())
-	key_req_l_ = req_l->access_Command_req ()->access_Key_change_req ();
-
-  if (key_req_l_)
-	return true;
+  if (dynamic_cast <Key_change_req *> (req_l))
+    {
+      key_req_l_ = dynamic_cast <Key_change_req*> (req_l);
+      return true;
+    }
 
   return false;
 }
diff --git a/lily/line-of-score.cc b/lily/line-of-score.cc
index 7933239518..9e2e7edb03 100644
--- a/lily/line-of-score.cc
+++ b/lily/line-of-score.cc
@@ -50,7 +50,7 @@ Line_of_score::set_breaking (Array<Column_x_positions> const &breaking, int j) c
 	
   if (breaking.size() >1) 
     {
-      line_l = (Line_of_score*)clone()->access_Spanner ();
+      line_l = dynamic_cast <Line_of_score*> (clone());
     }
   else 
     line_l = (Line_of_score*) this;
diff --git a/lily/local-key-engraver.cc b/lily/local-key-engraver.cc
index c6a3a07189..54df397c45 100644
--- a/lily/local-key-engraver.cc
+++ b/lily/local-key-engraver.cc
@@ -40,7 +40,7 @@ Local_key_engraver::do_creation_processing ()
     }
   else
     {
-      key_C_ = &((Key_engraver*)result->access_Engraver  ())->key_;
+      key_C_ = &((Key_engraver*)dynamic_cast <Engraver *> (result))->key_;
       local_key_ = *key_C_;
     }
 }
@@ -97,24 +97,22 @@ void
 Local_key_engraver::acknowledge_element (Score_element_info info)
 {    
   Score_element * elem_l = info.elem_l_;
-  Item * item_l = elem_l->access_Item();
+  Item * item_l = dynamic_cast <Item *> (elem_l);
 
-  Note_req * note_l = (info.req_l_->access_Musical_req ())
-    ? info.req_l_->access_Musical_req ()->access_Note_req () : 0;
+  Note_req * note_l =  dynamic_cast <Note_req *> (info.req_l_);
 
   if (note_l &&  item_l && item_l->is_type_b (Note_head::static_name ()))
     {
       mel_l_arr_.push (note_l);
       support_l_arr_.push (item_l);
     }
-  else if (info.req_l_->access_Command_req ()
-	   && info.req_l_->access_Command_req ()->access_Key_change_req () && key_C_) 
+  else if (dynamic_cast <Key_change_req*> (info.req_l_))
     {
       local_key_ = *key_C_;
     }
   else if (elem_l->is_type_b (Tie::static_name ())) 
     {
-      Tie * tie_l = (Tie*)elem_l->access_Spanner ();
+      Tie * tie_l = (Tie*)dynamic_cast <Spanner *> (elem_l);
       if (tie_l->same_pitch_b_)
 	tied_l_arr_.push (tie_l-> head_l_drul_[RIGHT]);
     }
diff --git a/lily/local-key-item.cc b/lily/local-key-item.cc
index 2b2d0dd5db..a0dc2907a6 100644
--- a/lily/local-key-item.cc
+++ b/lily/local-key-item.cc
@@ -116,8 +116,8 @@ IMPLEMENT_IS_TYPE_B1(Local_key_item,Item);
 void
 Local_key_item::do_substitute_dependency (Score_element*o,Score_element*n)
 {
-  Item* o_l = o->access_Item ();
-  Item* n_l = n?n->access_Item ():0;
+  Item* o_l = dynamic_cast <Item *> (o);
+  Item* n_l = n?dynamic_cast <Item *> (n):0;
 
   support_items_.substitute (o_l, n_l);
 }
diff --git a/lily/lookup.cc b/lily/lookup.cc
index 8ba88483f5..9d85d63ba9 100644
--- a/lily/lookup.cc
+++ b/lily/lookup.cc
@@ -20,6 +20,7 @@
 #include "paper-def.hh"
 #include "string-convert.hh"
 #include "main.hh"
+#include "lily-guile.hh"
 
 Lookup::Lookup ()
 {
@@ -65,7 +66,7 @@ Lookup::add (String s, Symtable*p)
 }
 
 Atom
-Lookup::afm_find (String s, String str) const
+Lookup::afm_find (String s) const
 {
   if (!afm_p_)
     {
@@ -83,7 +84,9 @@ Lookup::afm_find (String s, String str) const
   a.dim_ = m.B_;
   a.dim_[X_AXIS] *= 1 / 1000.0;
   a.dim_[Y_AXIS] *= 1 / 1000.0;
-  a.str_ = String_convert::form_str (str.ch_C (), m.code ());
+  Array<Real> arr;
+  arr.push (m.code ());
+  a.lambda_ = lambda_scm ("char", arr);
   a.font_ = font_;
   return a;
 }
@@ -100,29 +103,13 @@ Lookup::ball (int j) const
 Atom
 Lookup::bar (String str, Real h) const
 {
-  Array<String> a;
-  a.push (print_dimen (h));
-  Atom s = (*symtables_p_) ("bars")->lookup (str);
-  s.str_ = substitute_args (s.str_, a);
-  s.dim_.y () = Interval (-h/2, h/2);
-  s.font_ = font_;
-  return s;
-}
-
-String
-Lookup::base_output_str () const
-{
-  assert (paper_l_);
-  String str = paper_l_->get_default_output ();
-
-  if (str.empty_b ())
-    {
-      str = default_outname_base_global;
-      int def = paper_l_->get_next_default_count ();
-      if (def)
-	str += "-" + to_str (def);
-    }
-  return str;
+  Array<Real> arr;
+  arr.push (h);
+  Atom a = (*symtables_p_) ("bars")->lookup (str);
+  a.lambda_ = lambda_scm (a.str_, arr);
+  a.dim_.y () = Interval (-h/2, h/2);
+  a.font_ = font_;
+  return a;
 }
 
 Atom 
@@ -138,16 +125,38 @@ Lookup::beam (Real slope, Real width, Real thick) const
   return a;
 }
 
-String
-Lookup::character_str (int i) const
+Atom
+Lookup::clef (String st) const
 {
-  return to_str (i);
+  return afm_find (String ("clefs") + String ("-") + st);
 }
 
 Atom
-Lookup::clef (String st) const
+Lookup::dashed_slur (Array<Offset> controls, Real thick, Real dash) const
 {
-  return afm_find (String ("clefs") + String ("-") + st);
+  assert (controls.size () == 8);
+
+  Real dx = controls[3].x () - controls[0].x ();
+  Real dy = controls[3].y () - controls[0].y ();
+
+  Atom a;
+  a.font_ = font_;
+  a.dim_[X_AXIS] = Interval (0, dx);
+  a.dim_[Y_AXIS] = Interval (0 <? dy,  0 >? dy);
+
+  // (lambda (o) (dashed-slur o '((0.1 0.2) (1.1 1.2) (2.1 2.2) (3.1 3.2))))
+  a.lambda_ = 
+    ly_append (ly_lambda_o (), 
+    ly_list1 (ly_append (ly_func_o ("dashed-slur"),
+    gh_cons (gh_double2scm (thick), gh_cons (gh_double2scm (dash),
+    ly_list1 (ly_list2 (ly_quote (),
+    gh_cons (ly_list2 (gh_double2scm (controls[1].x ()), gh_double2scm (controls[1].y ())),
+    gh_cons (ly_list2 (gh_double2scm (controls[2].x ()), gh_double2scm (controls[2].y ())),
+    gh_cons (ly_list2 (gh_double2scm (controls[3].x ()), gh_double2scm (controls[3].y ())),
+    gh_cons (ly_list2 (gh_double2scm (controls[0].x ()), gh_double2scm (controls[0].y ())),
+    SCM_EOL)))))))))));
+
+  return a;
 }
 
 Atom
@@ -187,18 +196,6 @@ Lookup::print () const
 #endif
 }
 
-String
-Lookup::print_dimen (Real r) const
-{
-  String s = to_str (r, "%.3f");
-  if (s.index_i ("NaN") != -1)
-    {
-      warning (_ ("NaN"));
-      s = "0.0";
-    }
-  return s;
-}
-
 Atom
 Lookup::rest (int j, bool o) const
 {
@@ -210,10 +207,10 @@ Atom
 Lookup::rule_symbol (Real height, Real width) const
 {
   Atom bs= (*symtables_p_) ("param")->lookup ("rule");
-  Array<String> args;
-  args.push (print_dimen (height));
-  args.push (print_dimen (width));
-  bs.str_ = substitute_args (bs.str_, args);
+  Array<Real> args;
+  args.push (height);
+  args.push (width);
+  bs.lambda_ = lambda_scm (bs.str_, args);
   bs.dim_.x () = Interval (0, width);
   bs.dim_.y () = Interval (0, height);
   return bs;
@@ -228,8 +225,9 @@ Lookup::script (String str) const
 Atom
 Lookup::special_time_signature (String s, Array<Scalar> arr) const
 {
+#if 0
   String symbolname = "timesig-"+s+"%/%";
-  Atom a (afm_find (substitute_args (symbolname, arr)));
+  Atom a (afm_find (lambda_scm (symbolname, arr)));
   if (!a.empty ()) 
     return a;
   // Try if the full name was given
@@ -237,39 +235,12 @@ Lookup::special_time_signature (String s, Array<Scalar> arr) const
   if (!a.empty ()) 
     return a;
   // Resort to default layout with numbers
+#endif
   return time_signature (arr);
 }
 
-static void
-substitute_arg (String& r, String arg)
-{
-  int p = r.index_i ('%');
-  if (p < 0)
-	return ;
-
-  r = r.left_str (p) + arg + r.right_str (r.length_i () - p - 1);
-}
-
-String
-Lookup::substitute_args (String source, Array<String> args) const
-{
-  String str (source);
-  for (int i = 0 ; i < args.size (); i++)
-    substitute_arg (str, args[i]);
-  return str;
-}
-
-String
-Lookup::substitute_args (String source, Array<Scalar> args) const
-{
-  Array<String> sv;
-  for (int i = 0 ; i < args.size (); i++)
-    sv.push (args[i]);
-  return substitute_args (source, sv);
-}
-
 Atom
-Lookup::stem (Real y1, Real y2, String str) const
+Lookup::stem (Real y1, Real y2) const
 {
   if (y1 > y2)
     {
@@ -282,15 +253,15 @@ Lookup::stem (Real y1, Real y2, String str) const
   s.dim_.x () = Interval (0,0);
   s.dim_.y () = Interval (y1,y2);
 
-  Array<String> a;
+  Array<Real> a;
 
   Real stem_width = paper_l_->get_var ("stemthickness");
-  a.push (print_dimen (-stem_width /2));
-  a.push (print_dimen (stem_width));
-  a.push (print_dimen (y2));
-  a.push (print_dimen (-y1));
+  a.push (-stem_width /2);
+  a.push (stem_width);
+  a.push (y2);
+  a.push (-y1);
 
-  s.str_ = substitute_args (str, a);
+  s.lambda_ = lambda_scm ("stem", a);
   s.font_ = font_;
   return s;
 }
@@ -307,11 +278,11 @@ Lookup::streepje (int type) const
 Atom
 Lookup::text (String style, String text) const
 {
-  Array<String> a;
+  Array<Scalar> a;
 
   a.push (text);
   Atom s =  (*symtables_p_) ("style")->lookup (style);
-  s.str_ = substitute_args (s.str_,a);
+  s.lambda_ = lambda_scm (s.str_, a);
   s.font_ = font_;
 
   return s;
@@ -321,7 +292,7 @@ Atom
 Lookup::time_signature (Array<Scalar> a) const
 {
   Atom s ((*symtables_p_) ("param")->lookup ("time_signature"));
-  s.str_ = substitute_args (s.str_, a);
+  s.lambda_ = lambda_scm (s.str_, a);
 
   return s;
 }
@@ -354,16 +325,112 @@ Lookup::vbrace (Real &y) const
   
   int idx = int (rint ( (y- min_y)/step)) + 1;
   
-  {
-    Array<String> a;
-    a.push (character_str (idx));
-    brace.str_ = substitute_args (brace.str_,a);
-    brace.dim_[Y_AXIS] = Interval (-y/2,y/2);
-  }
+  Array<Real> a;
+  a.push (idx);
+  brace.lambda_ = lambda_scm (brace.str_, a);
+  brace.dim_[Y_AXIS] = Interval (-y/2,y/2);
 
   brace.font_ = font_;
 
   return brace;
 }
 
+Atom
+Lookup::hairpin (Real width, bool decresc, bool continued) const
+{
+  Atom a;  
+  Real height = paper_l_->staffheight_f () / 6;
+  String ps;
+  ps += to_str (width) + " " 
+	+ to_str (height) + " " 
+    + to_str (continued ? height/2 : 0) + 
+    + " draw_"  + String (decresc ? "de" : "") + "cresc\n";
+  a.str_ = ps;
+
+
+  a.dim_.x () = Interval (0, width);
+  a.dim_.y () = Interval (-2*height, 2*height);
+  a.font_ = font_;
+  return a;
+}
+
+Atom
+Lookup::plet (Real dy , Real dx, Direction dir) const
+{
+  String ps;
+  
+  
+  ps += String_convert::double_str (dx) + " " 
+    + String_convert::double_str (dy) + " "
+    + String_convert::int_str ( (int)dir) +
+    " draw_plet ";
+
+  Atom s;
+  s.str_ = ps;
+  return s;
+}
+
+Atom
+Lookup::ps_beam (Real slope, Real width, Real thick) const
+{
+  String ps;
+  ps += to_str (width) + " "+ to_str (slope) + " " + to_str (thick)
+    + " draw_beam ";
+
+  Atom s;
+  s.str_ = ps;
+  return s;
+}
+
+Atom
+Lookup::slur (Array<Offset> controls) const
+{
+  assert (controls.size () == 8);
+
+  String ps;
+  
+  Real dx = controls[3].x () - controls[0].x ();
+  Real dy = controls[3].y () - controls[0].y ();
+  Atom a;
+ 
+  // (lambda (o) (slur o '((0.1 0.2) (1.1 1.2) (2.1 2.2) (3.1 3.2) .. )))
+  a.lambda_ = 
+    ly_append (ly_lambda_o (), 
+    ly_list1 (ly_append (ly_func_o ("slur"),
+    ly_list1 (ly_list2 (ly_quote (),
+    gh_cons (ly_list2 (gh_double2scm (controls[5].x ()), gh_double2scm (controls[5].y ())),
+    gh_cons (ly_list2 (gh_double2scm (controls[6].x ()), gh_double2scm (controls[6].y ())),
+    gh_cons (ly_list2 (gh_double2scm (controls[7].x ()), gh_double2scm (controls[7].y ())),
+    gh_cons (ly_list2 (gh_double2scm (controls[4].x ()), gh_double2scm (controls[4].y ())),
+    gh_cons (ly_list2 (gh_double2scm (controls[1].x ()), gh_double2scm (controls[1].y ())),
+    gh_cons (ly_list2 (gh_double2scm (controls[2].x ()), gh_double2scm (controls[2].y ())),
+    gh_cons (ly_list2 (gh_double2scm (controls[3].x ()), gh_double2scm (controls[3].y ())),
+    gh_cons (ly_list2 (gh_double2scm (controls[0].x ()), gh_double2scm (controls[0].y ())),
+    SCM_EOL)))))))))))));
+
+  a.dim_[X_AXIS] = Interval (0, dx);
+  a.dim_[Y_AXIS] = Interval (0 <? dy,  0 >? dy);
+  a.font_ = font_;
+  return a;
+}
+
+Atom
+Lookup::vbracket (Real &y) const
+{
+  Atom a;
+  Real min_y = paper_l_->staffheight_f ();
+  if (y < min_y)
+    {
+      warning (_ ("bracket")
+	+ " " + _ ("too small") +  " (" + print_dimen (y) + ")");
+//      y = min_y;
+    }
+  Array<Real> arr;
+  arr.push (y);
+  a.lambda_ = lambda_scm ("bracket", arr);
+  a.dim_[Y_AXIS] = Interval (-y/2,y/2);
+  a.dim_[X_AXIS] = Interval (0,4 PT);
+  return a;
+}
+
 
diff --git a/lily/lyric-engraver.cc b/lily/lyric-engraver.cc
index ceba7c467e..da7102b1f7 100644
--- a/lily/lyric-engraver.cc
+++ b/lily/lyric-engraver.cc
@@ -23,10 +23,10 @@ Lyric_engraver::Lyric_engraver()
 bool
 Lyric_engraver::do_try_request (Request*r)
 {
-  Musical_req * m =r->access_Musical_req ();
-  if (!m || ! m->access_Lyric_req ()) 
+  Musical_req * m =dynamic_cast <Musical_req *> (r);
+  if (!m || ! dynamic_cast <Lyric_req *> (m)) 
     return false;
-  lreq_l_ = m->access_Lyric_req ();
+  lreq_l_ = dynamic_cast <Lyric_req *> (m);
 
   return true;
 }
diff --git a/lily/lyric-performer.cc b/lily/lyric-performer.cc
index bcbbc9d501..43fe0f2634 100644
--- a/lily/lyric-performer.cc
+++ b/lily/lyric-performer.cc
@@ -44,10 +44,10 @@ Lyric_performer::do_process_requests()
 bool
 Lyric_performer::do_try_request (Request* req_l)
 {
-  Musical_req* m_l = req_l->access_Musical_req ();
-  if (!m_l || ! m_l->access_Lyric_req ()) 
+  Musical_req* m_l = dynamic_cast <Musical_req *> (req_l);
+  if (!m_l || ! dynamic_cast <Lyric_req *> (m_l)) 
     return false;
-  lreq_arr_.push (m_l->access_Lyric_req ());
+  lreq_arr_.push (dynamic_cast <Lyric_req *> (m_l));
 
   return true;
 }
diff --git a/lily/main.cc b/lily/main.cc
index 5b541eb29f..d9a7a0afc0 100644
--- a/lily/main.cc
+++ b/lily/main.cc
@@ -10,6 +10,8 @@
 #include <iostream.h>
 #include <assert.h>
 #include <locale.h>
+#include "lily-guile.hh"
+
 #include "proto.hh"
 #include "dimensions.hh"
 #include "plist.hh"
@@ -21,8 +23,6 @@
 #include "config.hh"
 #include "file-results.hh"
 #include "debug.hh"
-#include "ps-lookup.hh"
-#include "tex-lookup.hh"
 #include "lily-guile.hh"
 
 #if HAVE_GETTEXT
@@ -34,14 +34,15 @@ bool version_ignore_global_b = false;
 bool no_paper_global_b = false;
 bool no_timestamps_global_b = false;
 bool find_quarts_global_b = false;
+
+char const* output_global_ch = "tex";
+// temporarily default to ps, because tex is even more broken
+//char const* output_global_ch = "ps";
+
 String default_outname_base_global =  "lelie";
 int default_count_global;
 File_path global_path;
 
-Ps_lookup ps_lookup;
-Tex_lookup tex_lookup;
-Lookup* global_lookup_l = &tex_lookup;
-
 bool experimental_features_global_b = false;
 bool dependency_global_b = false;
 
@@ -63,6 +64,7 @@ Long_option_init theopts[] = {
   {0, "no-timestamps", 'T'},
   {0, "find-fourths", 'Q'},
   {0, "ignore-version", 'V'},
+  {1, "output-format", 'f'},
   {0,0,0}
 };
 
@@ -85,13 +87,16 @@ usage ()
     "  -d, --dependencies     write Makefile dependencies for every input file\n"
     );
   cout  << _ (
-    "  -I, --include=DIR      add DIR to search path\n"
+    "  -h, --help             this help\n"
     );
   cout  << _ (
-    "  -i, --init=FILE        use FILE as init file\n"
+    "  -f, --output-format=X  use output format X\n"
     );
   cout  << _ (
-    "  -h, --help             this help\n"
+    "  -I, --include=DIR      add DIR to search path\n"
+    );
+  cout  << _ (
+    "  -i, --init=FILE        use FILE as init file\n"
     );
   cout  << _ (
     "  -M, --no-paper         produce midi output only\n"
@@ -186,15 +191,6 @@ identify ()
   *mlog << get_version_str () << endl;
 }
 
-void 
-guile_init ()
-{
-#ifdef   HAVE_LIBGUILE
-   gh_eval_str ("(define (add-column p) (display \"adding column (in guile): \") (display p) (newline))");
-#endif
-}
-
-
 void
 setup_paths ()
 {
@@ -237,11 +233,9 @@ setup_paths ()
 }
 
 
-
-int
+void
 main_prog (int argc, char **argv)
 {
-  guile_init ();
   identify ();
   call_constructors ();
   debug_init ();		// should be first
@@ -258,7 +252,7 @@ main_prog (int argc, char **argv)
 	{
 	case 't':
 	  experimental_features_global_b = true;
-	  global_lookup_l = &ps_lookup;
+	  *mlog << "*** enabling experimental features, you're on your own now ***\n";
 	  break;
 	case 'o':
 	  outname_str = oparser.optional_argument_ch_C_;
@@ -267,6 +261,9 @@ main_prog (int argc, char **argv)
 	  notice ();
 	  exit (0);
 	  break;
+	case 'f':
+	  output_global_ch = oparser.optional_argument_ch_C_;
+	  break;
 	case 'Q':
 	  find_quarts_global_b = true;
 	  break;
@@ -344,8 +341,18 @@ main_prog (int argc, char **argv)
 	default_outname_base_global = outname_str;
       do_one_file (i, default_outname_base_global);
     }
+}
 
+int
+main (int argc, char **argv)
+{
+#ifdef HAVE_LIBGUILE
+  gh_enter (argc, argv, (void(*)())main_prog);
   return exit_status_i_;
+#else
+  main_prog (argc, argv);
+  return exit_status_i_;
+#endif
 }
 
 /*
@@ -385,19 +392,3 @@ distill_inname_str (String name_str, String& ext_r)
   return str;
 }
 
-
-#ifdef HAVE_LIBGUILE
-int
-main (int argc, char **argv)
-{
-  gh_enter (argc, argv, (void(*)())main_prog);
-  return exit_status_i_;
-}
-
-#else
-int main (int argc, char **argv)
-{
-  return main_prog (argc, argv);
-}
-
-#endif
diff --git a/lily/mark-engraver.cc b/lily/mark-engraver.cc
index 35c803e688..71119e4eb6 100644
--- a/lily/mark-engraver.cc
+++ b/lily/mark-engraver.cc
@@ -26,11 +26,11 @@ Mark_engraver::Mark_engraver ()
 bool
 Mark_engraver::do_try_request (Request* r_l)
 {
-  Command_req* c_l = r_l->access_Command_req ();
-  if (!c_l || !c_l->access_Mark_req () || mark_req_l_) 
+  Command_req* c_l = dynamic_cast <Command_req *> (r_l);
+  if (!c_l || !dynamic_cast <Mark_req *> (c_l) || mark_req_l_) 
     return false;
 
-  mark_req_l_ = c_l->access_Mark_req ();
+  mark_req_l_ = dynamic_cast <Mark_req *> (c_l);
 
   return true;
 }
diff --git a/lily/midi-item.cc b/lily/midi-item.cc
index 53f36d6a1e..362508ee64 100644
--- a/lily/midi-item.cc
+++ b/lily/midi-item.cc
@@ -354,7 +354,7 @@ Midi_key::Midi_key (Audio_item* audio_item_l)
 String
 Midi_key::str () const
 {
-  Key_change_req* k = audio_item_l_->req_l_->access_Command_req ()->access_Key_change_req ();
+  Key_change_req* k = dynamic_cast <Key_change_req *> (audio_item_l_->req_l_);
   int sharps_i = k->sharps_i ();
   int flats_i = k->flats_i ();
 
@@ -383,7 +383,7 @@ Midi_time_signature::Midi_time_signature (Audio_item* audio_item_l)
 String
 Midi_time_signature::str () const
 {
-  Time_signature_change_req* m = audio_item_l_->req_l_->access_Command_req ()->access_Time_signature_change_req ();
+  Time_signature_change_req* m = dynamic_cast <Time_signature_change_req *> (audio_item_l_->req_l_);
   int num_i = m->beats_i_;
   int den_i = m->one_beat_i_;
 
@@ -404,7 +404,7 @@ Midi_note::Midi_note (Audio_item* audio_item_l)
 Moment
 Midi_note::duration () const
 {
-  Moment m = audio_item_l_->req_l_->access_Musical_req ()->access_Rhythmic_req ()->duration ();
+  Moment m = dynamic_cast <Rhythmic_req *> (audio_item_l_->req_l_)->duration ();
   if (m < Moment (1, 1000))
     {
       warning (_ ("silly duration"));
@@ -416,8 +416,7 @@ Midi_note::duration () const
 int
 Midi_note::pitch_i () const
 {
-  int p = audio_item_l_->req_l_->access_Musical_req ()->access_Melodic_req 
-    ()->pitch_.semitone_pitch () 
+  int p = dynamic_cast <Melodic_req*> (audio_item_l_->req_l_)->pitch_.semitone_pitch () 
     + ((Audio_note*)audio_item_l_)->transposing_i_;
   if (p == INT_MAX)
     {
@@ -452,8 +451,7 @@ Midi_note_off::Midi_note_off (Midi_note* midi_note_l)
 int
 Midi_note_off::pitch_i () const
 {
-  return audio_item_l_->req_l_->access_Musical_req ()->access_Melodic_req 
-    ()->pitch_.semitone_pitch ()
+  return dynamic_cast <Melodic_req *> (audio_item_l_->req_l_)->pitch_.semitone_pitch ()
     + ((Audio_note*)audio_item_l_)->transposing_i_;
 }
 
diff --git a/lily/multi-measure-rest-engraver.cc b/lily/multi-measure-rest-engraver.cc
index e8b23b67b3..03578a5815 100644
--- a/lily/multi-measure-rest-engraver.cc
+++ b/lily/multi-measure-rest-engraver.cc
@@ -26,7 +26,7 @@ Multi_measure_rest_engraver::Multi_measure_rest_engraver ()
 bool
 Multi_measure_rest_engraver::do_try_request (Request* req_l)
 {
-  if (!req_l->access_Musical_req () || !req_l->access_Musical_req ()->access_Multi_measure_rest_req ())
+ if (!dynamic_cast<Multi_measure_rest_req *> (req_l))
     return false;
 
   if (multi_measure_req_l_)
@@ -34,7 +34,7 @@ Multi_measure_rest_engraver::do_try_request (Request* req_l)
 	|| req_start_mom_ != now_moment ())
       return false;
   
-  multi_measure_req_l_ = req_l->access_Musical_req ()->access_Multi_measure_rest_req ();
+  multi_measure_req_l_ = dynamic_cast<Multi_measure_rest_req *> (req_l);
   req_start_mom_ = now_moment ();
   
   rest_req_stop_mom_ = req_start_mom_ + multi_measure_req_l_->duration_.length ();
diff --git a/lily/music-list.cc b/lily/music-list.cc
index 8f29446699..7c47ded027 100644
--- a/lily/music-list.cc
+++ b/lily/music-list.cc
@@ -118,10 +118,10 @@ Request_chord::to_relative_octave (Musical_pitch last)
 {
   for (iter (music_p_list_p_->top(),i); i.ok (); i++)
     {
-      Musical_req *m =((Request*)i.ptr ())->access_Musical_req ();
-      if (m && m->access_Melodic_req ())
-	{	  
-	  Musical_pitch &pit = m->access_Melodic_req ()->pitch_;
+      Musical_req *m = dynamic_cast<Musical_req*> (i.ptr ());
+      if (m && dynamic_cast <Melodic_req *> (m))
+	{
+	  Musical_pitch &pit = dynamic_cast <Melodic_req *> (m)->pitch_;
 	  pit.to_relative_octave (last);
 	  return pit;
 	}
diff --git a/lily/music-output-def.cc b/lily/music-output-def.cc
index 86a20a731e..8e28cdf4bb 100644
--- a/lily/music-output-def.cc
+++ b/lily/music-output-def.cc
@@ -60,7 +60,7 @@ Translator*
 Music_output_def::find_translator_l (String name) const
 {
   if (translator_p_dict_p_->elem_b (name))
-    return (*translator_p_dict_p_)[name]->access_Translator ();
+    return  (*translator_p_dict_p_)[name]->access_Translator ();
 
   if (global_translator_dict_p->elem_b (name))
     return (*global_translator_dict_p)[name];
@@ -76,7 +76,7 @@ Music_output_def::get_global_translator_p ()
   if (!t)
     error (_("Can't find Score context"));
   t = t->clone ();
-  Global_translator *g = t->access_Translator_group ()->global_l ();
+  Global_translator *g = dynamic_cast <Translator_group *> (t)->global_l ();
   t->add_processing ();
   
   return g;
@@ -98,6 +98,6 @@ Music_output_def::get_default_output () const
     return "";  
   Identifier * id = (*scope_p_) ["output"];
 
-  String *p = id->access_String ();
+  String *p = dynamic_cast <String *> (id);
   return p ? *p : String ("");
 }
diff --git a/lily/musical-request.cc b/lily/musical-request.cc
index 3ee6004add..6c72cb538a 100644
--- a/lily/musical-request.cc
+++ b/lily/musical-request.cc
@@ -104,7 +104,7 @@ IMPLEMENT_IS_TYPE_B1 (Melodic_req,Musical_req);
 bool
 Melodic_req::do_equal_b (Request*r) const
 {
-  Melodic_req* m= r->access_Musical_req ()->access_Melodic_req ();
+  Melodic_req* m= dynamic_cast <Melodic_req *> (r);
   return !compare (*m, *this);
 }
 
@@ -129,7 +129,7 @@ Rhythmic_req::compare (Rhythmic_req const &r1, Rhythmic_req const &r2)
 bool
 Rhythmic_req::do_equal_b (Request*r) const
 {
-  Rhythmic_req* rh = r->access_Musical_req ()->access_Rhythmic_req ();
+  Rhythmic_req* rh = dynamic_cast <Rhythmic_req *> (r);
 
   return !compare (*this, *rh);
 }
@@ -269,7 +269,7 @@ Plet_req::do_print () const
 bool
 Span_req:: do_equal_b (Request*r) const
 {
-  Span_req * s = r->access_Span_req ();
+  Span_req * s = dynamic_cast <Span_req *> (r);
   return spantype == s->spantype;
 }
 
@@ -292,7 +292,7 @@ Script_req::Script_req (Script_req const&s)
 bool
 Script_req::do_equal_b (Request*r) const
 {
-  Script_req * s = r->access_Script_req ();
+  Script_req * s = dynamic_cast <Script_req *> (r);
 
   return  scriptdef_p_->equal_b (*s->scriptdef_p_);
 }
@@ -400,7 +400,7 @@ Absolute_dynamic_req::do_print () const
 bool
 Absolute_dynamic_req::do_equal_b (Request *r) const
 {
-  Absolute_dynamic_req *a = r->access_Musical_req ()->access_Dynamic_req ()->access_Absolute_dynamic_req ();
+  Absolute_dynamic_req *a = dynamic_cast <Absolute_dynamic_req *> (r);
   return loudness_ == a->loudness_;
 }
 
@@ -449,7 +449,7 @@ Absolute_dynamic_req::Absolute_dynamic_req ()
 bool
 Span_dynamic_req::do_equal_b (Request *req) const
 {
-  Span_dynamic_req * s = req->access_Musical_req ()->access_Span_dynamic_req ();
+  Span_dynamic_req * s = dynamic_cast <Span_dynamic_req *> (req);
 
   return Span_req::do_equal_b (req) && s->dynamic_dir_ == dynamic_dir_;
 }
diff --git a/lily/my-lily-lexer.cc b/lily/my-lily-lexer.cc
index 82948a3067..4c7d05a9a2 100644
--- a/lily/my-lily-lexer.cc
+++ b/lily/my-lily-lexer.cc
@@ -55,6 +55,7 @@ static Keyword_ent the_key_tab[]={
   {"pt", PT_T},
   {"relative", RELATIVE},
   {"remove", REMOVE},
+  {"scm", SCHEME},
   {"score", SCORE},
   {"script", SCRIPT},
   {"shape", SHAPE},
diff --git a/lily/my-lily-parser.cc b/lily/my-lily-parser.cc
index 9f7e8c7fb3..f3cdf87aba 100644
--- a/lily/my-lily-parser.cc
+++ b/lily/my-lily-parser.cc
@@ -240,22 +240,22 @@ My_lily_parser::get_parens_request (int t)
   switch (t)
     {
     case BEAMPLET:
-      reqs.top ()->access_Span_req ()->spantype = Span_req::START;
+      dynamic_cast<Span_req*> (reqs.top ())->spantype = Span_req::START;
       /* fall through */
     case '<':
     case '>':
     case '(':
     case '[':
     case PLET:
-      reqs[0]->access_Span_req ()->spantype = Span_req::START;
+      dynamic_cast<Span_req*> (reqs.top ())->spantype = Span_req::START;
       break;
     case MAEBTELP:
-      reqs.top ()->access_Span_req ()->spantype = Span_req::STOP;
+      dynamic_cast<Span_req*> (reqs.top ())->spantype = Span_req::STOP;
       /* fall through */
     case '!':
     case ')':
     case ']':
-      reqs[0]->access_Span_req ()->spantype = Span_req::STOP;
+      dynamic_cast<Span_req*> (reqs[0])->spantype = Span_req::STOP;
       break;
 
     default:
@@ -263,9 +263,9 @@ My_lily_parser::get_parens_request (int t)
     }
 
   for (int i = 0; i < reqs.size (); i++)
-    if (reqs[i]->access_Musical_req ()->access_Span_dynamic_req ())
+    if (dynamic_cast<Span_dynamic_req*> (reqs[i]))
       {
-	Span_dynamic_req* s_l= reqs[i]->access_Musical_req ()->access_Span_dynamic_req ();
+	Span_dynamic_req* s_l= dynamic_cast<Span_dynamic_req*> (reqs[i]);
 	s_l->dynamic_dir_ = (t == '<') ? UP:DOWN;
       }
 
diff --git a/lily/note-column.cc b/lily/note-column.cc
index 8f700129e5..b00cb5ea0a 100644
--- a/lily/note-column.cc
+++ b/lily/note-column.cc
@@ -102,18 +102,18 @@ Note_column::do_substitute_dependency (Score_element*o, Score_element*n)
 {
   if (stem_l_ == o) 
     {
-      stem_l_ = n ? (Stem*)n->access_Item ():0;
+      stem_l_ = n ? (Stem*)dynamic_cast <Item *> (n):0;
     }
   if (o->is_type_b (Note_head::static_name ()))
     {
-      head_l_arr_.substitute ((Note_head*)o->access_Item (), 
-			      (n)? (Note_head*)n->access_Item () : 0);
+      head_l_arr_.substitute ((Note_head*)dynamic_cast <Item *> (o), 
+			      (n)? (Note_head*)dynamic_cast <Item *> (n) : 0);
     }
   Script_column::do_substitute_dependency (o,n);
   if (o->is_type_b (Rest::static_name ())) 
     {
-      rest_l_arr_.substitute ((Rest*)o->access_Item (), 
-			      (n)? (Rest*)n->access_Item () : 0);
+      rest_l_arr_.substitute ((Rest*)dynamic_cast <Item *> (o), 
+			      (n)? (Rest*)dynamic_cast <Item *> (n) : 0);
     }
 }
 
diff --git a/lily/note-performer.cc b/lily/note-performer.cc
index 12c8601da3..5f8923c284 100644
--- a/lily/note-performer.cc
+++ b/lily/note-performer.cc
@@ -32,7 +32,7 @@ void
 Note_performer::do_process_requests () 
 {
   // this is _really_ braindead, but it generates some output
-  if (!note_req_l_ || !note_req_l_->access_Melodic_req ()  || !note_req_l_->access_Rhythmic_req ())
+  if (!note_req_l_ || !dynamic_cast <Melodic_req *> (note_req_l_)  || !dynamic_cast <Rhythmic_req *> (note_req_l_))
     return;
 
   int transposing_i = 0;
@@ -53,10 +53,10 @@ Note_performer::do_try_request (Request* req_l)
   if (note_req_l_)
     return false;
   
-  if (!req_l->access_Musical_req () || !req_l->access_Musical_req ()->access_Note_req ())
-    return false;
-
-  note_req_l_ = req_l->access_Musical_req ()->access_Melodic_req ();
-
-  return true;
+  if (Note_req *nr = dynamic_cast <Note_req *> (req_l))
+    {
+      note_req_l_ = nr;
+      return true;
+    }
+  return false;
 }
diff --git a/lily/p-score.cc b/lily/p-score.cc
index 2dbc75925b..be107cd929 100644
--- a/lily/p-score.cc
+++ b/lily/p-score.cc
@@ -21,11 +21,7 @@
 #include "word-wrap.hh"
 #include "gourlay-breaking.hh"
 #include "paper-stream.hh"
-#include "ps-stream.hh"
-#include "tex-stream.hh"
 #include "paper-outputter.hh"
-#include "ps-outputter.hh"
-#include "tex-outputter.hh"
 #include "file-results.hh"
 #include "misc.hh"
 
@@ -151,7 +147,7 @@ Paper_score::set_breaking (Array<Column_x_positions> const &breaking)
     }
   for (iter (elem_p_list_.top (),i); i.ok  () ;)
     {
-      Item *i_l =i->access_Item ();
+      Item *i_l =dynamic_cast <Item *> (i);
       if (i_l && !i_l->line_l ())
 	{
 	  i_l->unlink ();
@@ -210,8 +206,8 @@ Paper_score::process ()
 
   Array<Column_x_positions> breaking = calc_breaking ();
 
-  Paper_stream* paper_stream_p = global_lookup_l->paper_stream_p ();
-  outputter_l_ = global_lookup_l->paper_outputter_p (paper_stream_p, paper_l_, header_l_, origin_str_);
+  Paper_stream* paper_stream_p = paper_l_->paper_stream_p ();
+  outputter_l_ = paper_l_->paper_outputter_p (paper_stream_p, header_l_, origin_str_);
 
   Link_array<Line_of_score> lines;
   for (int i=0; i < breaking.size (); i++)
@@ -324,10 +320,10 @@ Paper_score::broken_col_range (Item const*l_item_l, Item const*r_item_l) const
   Item const*r=r_item_l;
 
   while (! l->is_type_b(Paper_column::static_name ()))
-    l = l->axis_group_l_a_[X_AXIS]->access_Score_element ()->access_Item ();
+    l = dynamic_cast<Item*> (l->axis_group_l_a_[X_AXIS]);
 
   while (! r->is_type_b(Paper_column::static_name ()))
-    r = r->axis_group_l_a_[X_AXIS]->access_Score_element ()->access_Item ();
+    r = dynamic_cast<Item*>(r->axis_group_l_a_[X_AXIS]);
 
   PCursor<Paper_column*> start (l ? find_col ((Paper_column*)l)+1 : col_p_list_.top ());
   PCursor<Paper_column*> stop (r ? find_col ((Paper_column*)r) : col_p_list_.bottom ());
diff --git a/lily/paper-def.cc b/lily/paper-def.cc
index 8593add910..5ce8b04cd9 100644
--- a/lily/paper-def.cc
+++ b/lily/paper-def.cc
@@ -13,8 +13,6 @@
 #include "paper-def.hh"
 #include "debug.hh"
 #include "lookup.hh"
-#include "ps-lookup.hh"
-#include "tex-lookup.hh"
 #include "assoc-iter.hh"
 #include "score-engraver.hh"
 #include "p-score.hh"
@@ -22,6 +20,9 @@
 #include "main.hh"
 #include "scope.hh"
 #include "dictionary-iter.hh"
+#include "file-results.hh" // urg? header_global_p
+#include "paper-outputter.hh"
+#include "paper-stream.hh"
 
 Paper_def::Paper_def ()
 {
@@ -45,7 +46,7 @@ Paper_def::Paper_def (Paper_def const&s)
   lookup_p_assoc_p_ = new Assoc<int, Lookup*>;
   for (Assoc_iter<int, Lookup*> ai(*s.lookup_p_assoc_p_); ai.ok (); ai++)
     {
-      Lookup * l = global_lookup_l->lookup_p (*ai.val ());
+      Lookup * l = new Lookup (*ai.val ());
       l->paper_l_ = this;
       set_lookup (ai.key(), l);
     }
@@ -209,35 +210,113 @@ Paper_def::lookup_l (int i) const
 
 IMPLEMENT_IS_TYPE_B1 (Paper_def, Music_output_def);
 
-String
-Paper_def::ps_output_settings_str () const
+int Paper_def::default_count_i_ = 0;
+
+int
+Paper_def::get_next_default_count () const
 {
-  String s ("\n ");
-  for (Dictionary_iter<Identifier*> i (*scope_p_); i.ok (); i++)
-    s += String ("/mudelapaper") + i.key () 
-      + "{" + i.val ()->str () + "} bind def\n";
-  s +=  *scope_p_->elem ("pssetting")->access_String ();
-  return s;
+  return default_count_i_ ++;
 }
 
-String
-Paper_def::tex_output_settings_str () const
+//urg
+extern char const* lily_version_number_sz ();
+
+void
+output_def (Paper_outputter* p, String key, String val)
+{
+  SCM args_scm =
+    gh_cons (gh_str02scm (key.ch_l ()), gh_cons (gh_str02scm (val.ch_l ()), SCM_EOL));
+  SCM scm =
+    ly_append (ly_lambda_o (),
+    ly_list1 (ly_append (ly_func_o ("lily-def"), args_scm)));
+  p->output_scheme (scm);
+}
+
+void
+output_header (Paper_outputter* p, Scope *head)
+{
+  if (!head)
+    return;
+
+  String id_str = "Lily was here";
+  if (no_timestamps_global_b)
+    id_str += ".";
+  else
+    id_str += String (", ") + lily_version_number_sz ();
+  output_def (p, "lily_id_string", id_str);
+  
+  for (Dictionary_iter<Identifier*> i (*head); i.ok (); i++)
+    {
+      if (!i.val ()->access_String_identifier ())
+	continue;
+      
+      String val = *i.val()->access_String_identifier ()->data_p_;
+      output_def (p, i.key (), val);
+    }
+}
+
+void
+Paper_def::output_settings (Paper_outputter* p) const
 {
-  String s ("\n ");
   for (Dictionary_iter<Identifier*> i (*scope_p_); i.ok (); i++)
-    s += String ("\\def\\mudelapaper") + i.key () 
-      + "{" + i.val ()->str () + "}\n";
-  s +=  *scope_p_->elem ("texsetting")->access_String ();
-  return s;
+    output_def (p, String ("mudelapaper") + i.key (), i.val ()->str ());
+  p->output_string (*scope_p_->elem (String (output_global_ch) + "setting")->access_String ());
 }
 
-int Paper_def::default_count_i_ = 0;
+Paper_outputter*
+Paper_def::paper_outputter_p (Paper_stream* os_p, Header* header_l, String origin_str) const
+{
+  Paper_outputter* p = new Paper_outputter (os_p);
 
-int
-Paper_def::get_next_default_count () const
+  output_header (p, header_global_p);
+  p->output_comment (_ ("outputting Score, defined at: "));
+  p->output_comment (origin_str);
+
+  output_header (p, header_l);
+
+  output_settings (p);
+
+  SCM scm =
+    ly_append (ly_lambda_o (),
+    ly_list1 (ly_append (ly_func_o ("experimental-on"), SCM_EOL)));
+
+  p->output_scheme (scm);
+
+  scm =
+    ly_append (ly_lambda_o (),
+    ly_list1 (ly_append (ly_func_o ("header-end"), SCM_EOL)));
+
+  p->output_scheme (scm);
+
+  return p;
+}
+
+Paper_stream*
+Paper_def::paper_stream_p () const
 {
-  return default_count_i_ ++;
+  String outname = base_output_str ();
+
+  if (outname != "-")
+    outname += String (".") + output_global_ch;
+  *mlog << _f ("Paper output to %s...", 
+	       outname == "-" ? String ("<stdout>") : outname ) << endl;
+  target_str_global_array.push (outname);
+  return new Paper_stream (outname);
 }
 
 
+String
+Paper_def::base_output_str () const
+{
+  String str = get_default_output ();
+
+  if (str.empty_b ())
+    {
+      str = default_outname_base_global;
+      int def = get_next_default_count ();
+      if (def)
+	str += "-" + to_str (def);
+    }
+  return str;
+}
 
diff --git a/lily/paper-outputter.cc b/lily/paper-outputter.cc
index 1e8d450c7b..9e2b0978a6 100644
--- a/lily/paper-outputter.cc
+++ b/lily/paper-outputter.cc
@@ -7,6 +7,7 @@
   Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
+#include <time.h>
 #include "paper-outputter.hh"
 #include "paper-stream.hh"
 #include "molecule.hh"
@@ -20,14 +21,58 @@
 Paper_outputter::Paper_outputter (Paper_stream *s)
 {
   outstream_l_ = s;
+  output_header ();
 }
 
 Paper_outputter::~Paper_outputter ()
 {
+  SCM scm =
+    ly_append (ly_lambda_o (),
+    ly_list1 (ly_append (ly_func_o ("end-output"), SCM_EOL)));
+
+  output_scheme (scm);
 }
 
 void
-Paper_outputter::output_molecule (Molecule const*m, Offset o, char const *nm, String s)
+Paper_outputter::output_header ()
+{
+  String creator;
+  if (no_timestamps_global_b)
+    creator = "GNU LilyPond\n";
+  else
+    creator = get_version_str ();
+  String generate;
+  if (no_timestamps_global_b)
+    generate = ".";
+  else
+    {
+      generate = _ (", at ");
+      time_t t (time (0));
+      generate += ctime (&t);
+      //urg
+    }
+
+  SCM args_scm = 
+    gh_cons (gh_str02scm (creator.ch_l ()),
+    gh_cons (gh_str02scm (generate.ch_l ()), SCM_EOL));
+
+#ifndef NPRINT
+  DOUT << "output_header\n";
+  if (check_debug && !monitor->silent_b ("Guile"))
+    {
+      gh_display (args_scm); gh_newline ();
+    }
+#endif
+
+  SCM scm =
+    ly_append (ly_lambda_o (),
+    ly_list1 (ly_append (ly_func_o ("header"), args_scm)));
+
+  output_scheme (scm);
+}
+
+void
+Paper_outputter::output_molecule (Molecule const*m, Offset o, char const *nm)
 {
   if (check_debug)
     *outstream_l_ << String ("\n%start: ") << nm << "\n";
@@ -37,15 +82,153 @@ Paper_outputter::output_molecule (Molecule const*m, Offset o, char const *nm, St
       Offset a_off = i->offset ();
       a_off += o;
 
+      if (!i->lambda_)
+        {
+	  // urg
+	  i->lambda_ = 
+	    ly_append (ly_lambda_o (), 
+	    ly_list1 (ly_func_o ("empty")));
+	}
+
       switch_to_font (i->font_);
 
-      Array<String> a;
-      String r;
-  
-      a.push (global_lookup_l->print_dimen (a_off.y()));
-      a.push (global_lookup_l->print_dimen (a_off.x()));
-      a.push (i->str_);
-      r += global_lookup_l->substitute_args (s, a);
-      *outstream_l_ << r;
+#ifndef NPRINT
+      if (check_debug && !monitor->silent_b ("Guile"))
+	{
+	  gh_display (i->lambda_); gh_newline ();
+	}
+#endif
+
+      SCM args_scm = 
+	gh_cons (gh_double2scm (a_off.x ()), 
+	gh_cons (gh_double2scm (a_off.y ()), 
+	gh_cons (i->lambda_, SCM_EOL)));
+
+#ifndef NPRINT
+      if (check_debug && !monitor->silent_b ("Guile"))
+	{
+	  gh_display (args_scm); gh_newline ();
+	}
+#endif
+
+      SCM box_scm =
+	ly_append (ly_lambda_o (),
+	ly_list1 (ly_append (ly_func_o ("placebox"), args_scm)));
+
+      output_scheme (box_scm);
+    }
+}
+
+void
+Paper_outputter::output_comment (String str)
+{
+  // urg
+  *outstream_l_ << "% " << str << "\n";
+}
+
+
+void
+Paper_outputter::output_scheme (SCM scm)
+{
+  String o = String ("\'") + output_global_ch;
+#ifndef NPRINT
+  if (check_debug && !monitor->silent_b ("Guile"))
+    {
+      gh_display (scm); gh_newline ();
     }
+#endif
+  SCM str_scm = gh_call1 (ly_eval (scm), gh_eval_str (o.ch_l ()));
+  char* c = gh_scm2newstr (str_scm, NULL);
+#ifndef NPRINT
+  if (check_debug && !monitor->silent_b ("Guile"))
+    {
+      gh_display (str_scm); gh_newline ();
+    }
+#endif
+  *outstream_l_ << c;
+  free (c);
+}
+
+void
+Paper_outputter::output_string (String str)
+{
+  // urg
+  *outstream_l_ << str;
+}
+
+void
+Paper_outputter::switch_to_font (String fontname)
+{
+  if (fontname.length_i () && (fontname != current_font_))
+    {
+      current_font_ = fontname;
+      int i=0;
+      bool new_b = false;
+      for (; i< font_arr_.size (); i++)
+	if (font_arr_[i] == fontname)
+	  {
+	    new_b = true;
+	    break;
+	  }
+
+      if (new_b)
+	{
+	  font_arr_.push (fontname);
+	  output_font_def (i, fontname);
+	}
+      output_font_switch (i);
+    }
+  return;
+}
+
+void
+Paper_outputter::start_line ()
+{
+  SCM scm =
+    ly_append (ly_lambda_o (),
+    ly_list1 (ly_append (ly_func_o ("start-line"), SCM_EOL)));
+
+  output_scheme (scm);
+}
+
+/*
+   26 fonts ought to be enough for anyone.
+*/
+void
+Paper_outputter::output_font_def (int i, String str)
+{
+  //urg, broken with guile-1.3
+  //return;
+  SCM scm =
+    ly_append (ly_lambda_o (),
+    ly_list1 (ly_append (ly_func_o ("font-def"), 
+    gh_cons (gh_int2scm (i), gh_cons (gh_str02scm (str.ch_l ()), SCM_EOL)))));
+
+  output_scheme (scm);
+}
+
+void
+Paper_outputter::output_font_switch (int i)
+{
+  //urg, broken with guile-1.2, 1.3
+  //return;
+  SCM scm =
+    ly_append (ly_lambda_o (),
+    ly_list1 (ly_append (ly_func_o ("font-switch"), 
+    gh_cons (gh_int2scm (i), SCM_EOL))));
+
+  output_scheme (scm);
+}
+
+void
+Paper_outputter::stop_line ()
+{
+  SCM scm =
+    ly_append (ly_lambda_o (),
+    ly_list1 (ly_append (ly_func_o ("stop-line"), SCM_EOL)));
+
+  output_scheme (scm);
+
+  current_font_ = "";
+  font_arr_.clear ();
 }
diff --git a/lily/paper-stream.cc b/lily/paper-stream.cc
index 72d14a69b5..91ff01041c 100644
--- a/lily/paper-stream.cc
+++ b/lily/paper-stream.cc
@@ -7,7 +7,6 @@
 */
 
 #include <fstream.h>
-#include <time.h>
 
 #include "main.hh"
 #include "paper-stream.hh"
@@ -27,7 +26,6 @@ Paper_stream::Paper_stream (String filename)
   nest_level = 0;
   line_len_i_ = 0;
   outputting_comment=false;
-  //  header ();
 }
 
 Paper_stream::~Paper_stream ()
@@ -99,6 +97,8 @@ Paper_stream::operator << (Scalar s)
 		break;
 	      }
     }
+  //urg, for debugging only!!
+  *os << flush;
   return *this;
 }
 
diff --git a/lily/parser.yy b/lily/parser.yy
index bf82af8ec4..ccca7e4942 100644
--- a/lily/parser.yy
+++ b/lily/parser.yy
@@ -10,14 +10,13 @@
 */
 
 #include <iostream.h>
+#include "lily-guile.hh"
 #include "notename-table.hh"
 #include "scalar.hh"
 #include "translation-property.hh"
 #include "script-def.hh"
 #include "symtable.hh"
 #include "lookup.hh"
-#include "ps-lookup.hh"
-#include "tex-lookup.hh"
 #include "misc.hh"
 #include "my-lily-lexer.hh"
 #include "paper-def.hh"
@@ -96,7 +95,6 @@ Paper_def* current_paper = 0;
 #define yyerror THIS->parser_error
 #define ARRAY_SIZE(a,s)   if (a.size () != s) THIS->parser_error (_f("expecting %d arguments", s))
 
-
 %}
 
 
@@ -195,6 +193,7 @@ yylex (YYSTYPE *s,  void * v_l)
 %token PT_T
 %token RELATIVE
 %token REMOVE
+%token SCHEME /* token vs typedef;  can't be named SCM */
 %token SCORE
 %token SCRIPT
 %token SHAPE
@@ -321,8 +320,18 @@ toplevel_expression:
 			Midi_def_identifier ($1, MIDI_IDENTIFIER);
 		THIS->lexer_p_->set_identifier ("$defaultmidi", id)
 	}
+	| embedded_scm { 
+	}
 	;
 
+embedded_scm:
+	SCHEME STRING ';' {
+	#ifdef HAVE_LIBGUILE
+		gh_eval_str ($2->ch_l ());
+	#endif
+		delete $2;
+	};
+
 check_version:
 	VERSION STRING ';'		{
 	 	Mudela_version ver (*$2);
@@ -589,7 +598,7 @@ paper_def_body:
 		$$ = p;
 	}
 	| paper_def_body int '=' symtables		{ // ugh, what a syntax
-		Lookup * l = global_lookup_l->lookup_p (*$4);
+		Lookup * l = new Lookup (*$4);
 		$$->set_lookup ($2, l);
 	}
 	| paper_def_body assignment ';' {
@@ -1450,13 +1459,15 @@ symtable_body:
 
 symboldef:
 	STRING unsigned box		{
-		$$ = global_lookup_l->atom_p (*$1, $2, *$3);
+		// ignore #args
+		$$ = new Atom (*$1, *$3);
 		delete $1;
 		delete $3;
 	}
 	| STRING unsigned {
 		Box b (Interval (0,0), Interval (0,0));
-		$$ = global_lookup_l->atom_p (*$1, $2, b);
+		// ignore #args
+		$$ = new Atom (*$1, b);
 		delete $1;
 	}
 	;
diff --git a/lily/performer.cc b/lily/performer.cc
index 7fdbdc001a..7c5e541f82 100644
--- a/lily/performer.cc
+++ b/lily/performer.cc
@@ -30,6 +30,6 @@ Performer_group_performer*
 Performer::daddy_perf_l () const
 {
   return (daddy_trans_l_) 
-    ?(Performer_group_performer*) daddy_trans_l_->access_Performer ()
+    ?(Performer_group_performer*) dynamic_cast <Performer *> (daddy_trans_l_)
     : 0;
 }
diff --git a/lily/pitch-squash-engraver.cc b/lily/pitch-squash-engraver.cc
index 026027ed04..4851cee02c 100644
--- a/lily/pitch-squash-engraver.cc
+++ b/lily/pitch-squash-engraver.cc
@@ -15,7 +15,7 @@ Pitch_squash_engraver::acknowledge_element (Score_element_info i)
 {
   if (i.elem_l_->is_type_b (Note_head::static_name ()))
     {
-      Note_head * nl = (Note_head*)i.elem_l_->access_Item ();
+      Note_head * nl = (Note_head*)dynamic_cast <Item *> (i.elem_l_);
       nl->position_i_  =0;
     }
 }
diff --git a/lily/plet-engraver.cc b/lily/plet-engraver.cc
index 8da468ec92..ed85c58bfd 100644
--- a/lily/plet-engraver.cc
+++ b/lily/plet-engraver.cc
@@ -35,16 +35,16 @@ Plet_engraver::acknowledge_element (Score_element_info i)
     return;
 
   if (!plet_spanner_p_->stem_l_drul_[LEFT])
-    plet_spanner_p_->set_stem (LEFT, (Stem*)i.elem_l_->access_Item ());
+    plet_spanner_p_->set_stem (LEFT, (Stem*)dynamic_cast <Item *> (i.elem_l_));
   else
     if (span_reqs_drul_[RIGHT] && !plet_spanner_p_->stem_l_drul_[RIGHT]) 
-      plet_spanner_p_->set_stem (RIGHT, (Stem*)i.elem_l_->access_Item ());
+      plet_spanner_p_->set_stem (RIGHT, (Stem*)dynamic_cast <Item *> (i.elem_l_));
 }
 
 bool
 Plet_engraver::do_try_request (Request* req_l)
 {
-  Musical_req* mus_l = req_l->access_Musical_req ();
+  Musical_req* mus_l = dynamic_cast <Musical_req *> (req_l);
   if (!mus_l)
     return false;
 
@@ -52,7 +52,7 @@ Plet_engraver::do_try_request (Request* req_l)
     UGH! This is incorrect!
     Beam_req might not reach the Plet_engraver if ordering is wrong!
    */
-  Beam_req* b = mus_l->access_Beam_req ();
+  Beam_req* b = dynamic_cast <Beam_req *> (mus_l);
   if (b)
     {
       if (b->spantype)
@@ -63,7 +63,7 @@ Plet_engraver::do_try_request (Request* req_l)
       return false;
     }
     
-  Plet_req* p = mus_l->access_Plet_req ();
+  Plet_req* p = dynamic_cast <Plet_req *> (mus_l);
   if (!p)
     return false;
 
diff --git a/lily/plet-spanner.cc b/lily/plet-spanner.cc
index 5b7637f12e..4a032ffc72 100644
--- a/lily/plet-spanner.cc
+++ b/lily/plet-spanner.cc
@@ -130,10 +130,10 @@ Plet_spanner::do_post_processing ()
 void
 Plet_spanner::do_substitute_dependency (Score_element* o, Score_element* n)
 {
-  Stem* new_l = n ? (Stem*)n->access_Item () : 0;
-  if (o->access_Item () == stem_l_drul_[LEFT])
+  Stem* new_l = n ? (Stem*)dynamic_cast <Item *> (n) : 0;
+  if (dynamic_cast <Item *> (o) == stem_l_drul_[LEFT])
     stem_l_drul_[LEFT] = new_l;
-  else if (o->access_Item () == stem_l_drul_[RIGHT])
+  else if (dynamic_cast <Item *> (o) == stem_l_drul_[RIGHT])
     stem_l_drul_[RIGHT] = new_l;
 }
   
diff --git a/lily/plet-swallow-engraver.cc b/lily/plet-swallow-engraver.cc
index 0e98605b6c..47da034354 100644
--- a/lily/plet-swallow-engraver.cc
+++ b/lily/plet-swallow-engraver.cc
@@ -15,7 +15,5 @@ ADD_THIS_TRANSLATOR(Plet_swallow_engraver);
 bool
 Plet_swallow_engraver::do_try_request (Request* req_l)
 {
-  if (req_l && req_l->access_Musical_req () && req_l->access_Musical_req ()->access_Plet_req ())
-    return true;
-  return false;
+  return  dynamic_cast <Plet_req *> (req_l);
 }
diff --git a/lily/priority-halign-engraver.cc b/lily/priority-halign-engraver.cc
index 60300b18a1..2aa56cb7cf 100644
--- a/lily/priority-halign-engraver.cc
+++ b/lily/priority-halign-engraver.cc
@@ -38,7 +38,7 @@ Priority_horizontal_align_engraver::acknowledge_element (Score_element_info i)
 	  halign_p_->breakable_b_ = true;
 	  announce_element (Score_element_info (halign_p_,0));
 	}
-      Item * it = i.elem_l_->access_Item ();
+      Item * it = dynamic_cast <Item *> (i.elem_l_);
       if (it->break_priority_i_ == 0)
 	halign_p_->center_l_ = it;
 
diff --git a/lily/ps-lookup.cc b/lily/ps-lookup.cc
deleted file mode 100644
index 8d160b1f88..0000000000
--- a/lily/ps-lookup.cc
+++ /dev/null
@@ -1,285 +0,0 @@
-/*
-  ps-lookup.cc -- implement Ps_lookup
-
-  source file of the GNU LilyPond music typesetter
-
-  (c)  1997--1998 Jan Nieuwenhuizen <janneke@gnu.org>
-*/
-
-#include "ps-lookup.hh"
-#include "debug.hh"
-#include "dimensions.hh"
-#include "symtable.hh"
-#include "scalar.hh"
-#include "paper-def.hh"
-#include "string-convert.hh"
-#include "main.hh"
-#include "file-results.hh"
-#include "scope.hh"
-#include "paper-stream.hh"
-#include "ps-stream.hh"
-#include "ps-outputter.hh"
-#include "scope.hh"
-#include "dictionary-iter.hh"
-#include "identifier.hh"
-
-Ps_lookup::Ps_lookup ()
-  : Lookup ()
-{
-}
-
-Ps_lookup::Ps_lookup (Lookup const& s)
-  : Lookup (s)
-{
-}
-
-Ps_lookup::Ps_lookup (Symtables const& s)
-  : Lookup (s)
-{
-}
-
-Ps_lookup::~Ps_lookup ()
-{
-}
-
-Atom
-Ps_lookup::afm_find (String s) const
-{
-  return Lookup::afm_find (s, String ("(\\%03o) show "));
-}
-
-Atom*
-Ps_lookup::atom_p (String s, int n, Box b) const
-{
-  for (int i = 0; i < n; i++)
-    s.prepend ("% ");
-  return new Atom (s, b);
-}
-
-String
-Ps_lookup::character_str (int i) const
-{
-  return to_str (i, "(\\%03o)");
-}
-
-Atom
-Ps_lookup::dashed_slur (Array<Offset> controls, Real thick, Real dash) const
-{
-  assert (controls.size () == 8);
-
-  String ps;
-  
-  Real dx = controls[3].x () - controls[0].x ();
-  Real dy = controls[3].y () - controls[0].y ();
-
-  for (int i = 1; i < 4; i++)
-    ps += String_convert::double_str (controls[i].x ()) + " "
-      + String_convert::double_str (controls[i].y ()) + " ";
-
-  ps += String_convert::double_str (controls[0].x ()) + " "
-    + String_convert::double_str (controls[0].y ()) + " ";
-
-  ps += String_convert::double_str (thick) + " ";
-  Real on = dash > 1? thick * dash - thick : 0;
-  Real off = 2 * thick;
-  ps += "[" + String_convert::double_str (on) + " ";
-  ps += String_convert::double_str (off) + "] ";
-  ps += String_convert::int_str (0) + " ";
-  ps += "draw_dashed_slur ";
-
-  Atom a;
-  a.str_ = ps;
-  
-  a.dim_[X_AXIS] = Interval (0, dx);
-  a.dim_[Y_AXIS] = Interval (0 <? dy,  0 >? dy);
-  a.font_ = font_;
-  return a;
-}
-
-Atom
-Ps_lookup::hairpin (Real width, bool decresc, bool continued) const
-{
-  Atom a;  
-  Real height = paper_l_->staffheight_f () / 6;
-  String ps;
-  ps += to_str (width) + " " 
-	+ to_str (height) + " " 
-    + to_str (continued ? height/2 : 0) + 
-    + " draw_"  + String (decresc ? "de" : "") + "cresc\n";
-  a.str_ = ps;
-
-
-  a.dim_.x () = Interval (0, width);
-  a.dim_.y () = Interval (-2*height, 2*height);
-  a.font_ = font_;
-  return a;
-}
-
-Lookup*
-Ps_lookup::lookup_p (Lookup const& l) const
-{
-  return new Ps_lookup (l);
-}
-
-Lookup*
-Ps_lookup::lookup_p (Symtables const& s) const
-{
-  return new Ps_lookup (s);
-}
-extern char const *lily_version_number_sz ();
-
-String
-header_to_ps_string (Scope *head)
-{
-  String s;
-  String lily_id_str = "Lily was here, " +
-    String (lily_version_number_sz ());
-  
-  s+= "/lily_id_string\n{" + lily_id_str + "} bind def\n";
-  
-  for (Dictionary_iter<Identifier*> i (*head); i.ok (); i++)
-    {
-      if (!i.val ()->access_String_identifier ())
-	continue;
-      
-      String val = *i.val()->access_String_identifier ()->data_p_;
-      
-      s += "/mudela" + i.key () + "{" + val + "} bind def\n";
-    }
-      
-  return s;
-}
-
-Paper_outputter*
-Ps_lookup::paper_outputter_p (Paper_stream* os_p, Paper_def* paper_l, Header* header_l, String origin_str) const
-{
-  if (header_global_p)
-    *os_p << header_to_ps_string (header_global_p);
-
-  *os_p << _ ("\n% outputting Score, defined at: ") << origin_str << '\n';
-
-  if (header_l)
-    {
-      *os_p << header_to_ps_string (header_l);
-    }
-
-  *os_p << paper_l->ps_output_settings_str ();
-
-  if (experimental_features_global_b)
-    *os_p << "turnOnExperimentalFeatures\n";
-
-  return new Ps_outputter (os_p);
-}
-
-Paper_stream*
-Ps_lookup::paper_stream_p () const
-{
-  String outname = base_output_str ();
-
-  if (outname != "-")
-    outname += ".ps";
-  *mlog << _f ("PostScript output to %s...", 
-	       outname == "-" ? String ("<stdout>") : outname ) << endl;
-  target_str_global_array.push (outname);
-  return new Ps_stream (outname);
-}
-
-Atom
-Ps_lookup::plet (Real dy , Real dx, Direction dir) const
-{
-  String ps;
-  
-  ps += String_convert::double_str (dx) + " " 
-    + String_convert::double_str (dy) + " "
-    + String_convert::int_str ( (int)dir) +
-    " draw_plet ";
-
-  Atom s;
-  s.str_ = ps;
-  return s;
-}
-
-Atom
-Ps_lookup::ps_beam (Real slope, Real width, Real thick) const
-{
-  String ps;
-  ps += to_str (width) + " "+ to_str (slope) + " " + to_str (thick)
-    + " draw_beam ";
-
-  Atom s;
-  s.str_ = ps;
-  return s;
-}
-
-Atom
-Ps_lookup::slur (Array<Offset> controls) const
-{
-  assert (controls.size () == 8);
-
-  String ps;
-  
-  Real dx = controls[3].x () - controls[0].x ();
-  Real dy = controls[3].y () - controls[0].y ();
-
-  for (int i = 5; i < 8; i++)
-    ps += String_convert::double_str (controls[i].x ()) + " "
-      + String_convert::double_str (controls[i].y ()) + " ";
-
-  ps += String_convert::double_str (controls[4].x ()) + " "
-    + String_convert::double_str (controls[4].y ()) + " ";
-  
-  for (int i = 1; i < 4; i++)
-    ps += String_convert::double_str (controls[i].x ()) + " "
-      + String_convert::double_str (controls[i].y ()) + " ";
-
-  ps += String_convert::double_str (controls[0].x ()) + " "
-    + String_convert::double_str (controls[0].y ()) + " ";
-
-  ps += " draw_slur ";
-
-  Atom s;
-  s.str_ = ps;
-  
-  s.dim_[X_AXIS] = Interval (0, dx);
-  s.dim_[Y_AXIS] = Interval (0 <? dy,  0 >? dy);
-  s.font_ = font_;
-  return s;
-}
-
-Atom
-Ps_lookup::stem (Real y1, Real y2) const
-{
-  return Lookup::stem (y1, y2, "\n% % % % draw_stem ");
-}
-
-Atom
-Ps_lookup::text (String style, String text) const
-{
-  return Lookup::text (style, "(" + text + ")");
-}
-
-String
-Ps_lookup::unknown_str () const
-{
-  return "unknown ";
-}
-
-Atom
-Ps_lookup::vbracket (Real &y) const
-{
-  Atom psbracket;
-  Real min_y = paper_l_->staffheight_f ();
-  if (y < min_y)
-    {
-      warning (_ ("bracket")
-	+ " " + _ ("too small") +  " (" + print_dimen (y) + ")");
-//      y = min_y;
-    }
-  psbracket.str_ = to_str (y) + " draw_bracket ";
-  psbracket.dim_[Y_AXIS] = Interval (-y/2,y/2);
-  psbracket.dim_[X_AXIS] = Interval (0,4 PT);
-  return psbracket;
-}
-
-
-
diff --git a/lily/ps-outputter.cc b/lily/ps-outputter.cc
deleted file mode 100644
index d0ad70ef39..0000000000
--- a/lily/ps-outputter.cc
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
-  ps-outputter.cc -- implement Ps_outputter
-
-  source file of the GNU LilyPond music typesetter
-
-  (c)  1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-  Jan Nieuwenhuizen <janneke@gnu.org>
-*/
-
-#include "ps-outputter.hh"
-#include "ps-stream.hh"
-#include "molecule.hh"
-#include "atom.hh"
-#include "array.hh"
-#include "string-convert.hh"
-#include "debug.hh"
-
-Ps_outputter::Ps_outputter (Paper_stream *s)
-  :Paper_outputter (s)
-{
-}
-
-Ps_outputter::~Ps_outputter ()
-{
-}
-
-/*
-   26 fonts ought to be enough for anyone.
-*/
-static String
-ps_font_command(int i)
-{
-// urg
-//  return "%\\font" + String_convert::form_str ("%c",  'A' + i) + "\n";
-  return "\n/feta20 findfont 12 scalefont setfont ";
-}
-
-void
-Ps_outputter::switch_to_font (String fontname)
-{
-  if (!fontname.length_i () || fontname == current_font_)
-    return;
-
-  current_font_ = fontname;
-  int i=0;
-  for (; i< font_arr_.size (); i++)
-    if (font_arr_[i] == fontname)
-      {
-	*outstream_l_ <<ps_font_command (i) << "\n";
-	return ;
-      }
-
-  
-  font_arr_.push (fontname);
-  *outstream_l_ << "%\\font"  + ps_font_command (i) << "% =" + fontname << "\n";
-  *outstream_l_<< ps_font_command (i) << "\n";
-}
-
-void
-Ps_outputter::output_molecule (Molecule const*m, Offset o, char const *nm)
-{
-  if (check_debug)
-    *outstream_l_ << String ("\n%start: ") << nm << "\n";
-
-  Paper_outputter::output_molecule (m, o, nm, "% % {%}placebox \n");
-}
-
-void
-Ps_outputter::start_line ()
-{
-  *outstream_l_ << "\nstart_line {\n";
-}
-
-void
-Ps_outputter::stop_line ()
-{
-  *outstream_l_ << "}\nstop_line\n";
-  current_font_ = "";
-  font_arr_.clear ();
-}
diff --git a/lily/ps-stream.cc b/lily/ps-stream.cc
deleted file mode 100644
index 4bdbc9e2bf..0000000000
--- a/lily/ps-stream.cc
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
-  tex-stream.cc -- implement Ps_stream
-
-  source file of the GNU LilyPond music typesetter
-
-  (c)  1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-  Jan Nieuwenhuizen <janneke@gnu.org>
-*/
-
-#include <fstream.h>
-#include <time.h>
-
-#include "main.hh"
-#include "ps-stream.hh"
-#include "debug.hh"
-
-Ps_stream::Ps_stream (String filename)
-  : Paper_stream (filename)
-{
-  header ();
-}
-
-Ps_stream::~Ps_stream ()
-{
-  *os << "\nshowpage\n";
-}
-
-void
-Ps_stream::header ()
-{
-  *os << _ ("%!PS-Adobe-3.0\n");
-  // urg, merge with Tex
-  *os << _ ("%%Creator: ");
-  if (no_timestamps_global_b)
-    *os << "GNU LilyPond\n";
-  else
-    *os << get_version_str () << '\n';
-  *os << _ ("%%Automatically generated");
-  if (no_timestamps_global_b)
-    *os << ".\n";
-  else
-    {
-      *os << _ (", at ");
-      time_t t (time (0));
-      *os << ctime (&t) << "%\n";
-    }
-}
-
-// print string. don't forget indent.
-Paper_stream&
-Ps_stream::operator << (Scalar s)
-{
-  return Paper_stream::operator << (s);
-}
-
diff --git a/lily/rest-collision-engraver.cc b/lily/rest-collision-engraver.cc
index d139313be2..2c52168807 100644
--- a/lily/rest-collision-engraver.cc
+++ b/lily/rest-collision-engraver.cc
@@ -37,7 +37,7 @@ void
 Rest_collision_engraver::acknowledge_element (Score_element_info i)
 {
   if (i.elem_l_->is_type_b (Note_column::static_name()))
-    note_column_l_arr_.push ((Note_column*)i.elem_l_->access_Item ());
+    note_column_l_arr_.push ((Note_column*)dynamic_cast <Item *> (i.elem_l_));
 }
 
 void
diff --git a/lily/rest-collision.cc b/lily/rest-collision.cc
index 38d393f160..54cfe814c1 100644
--- a/lily/rest-collision.cc
+++ b/lily/rest-collision.cc
@@ -133,12 +133,12 @@ Rest_collision::do_print() const
 void
 Rest_collision::do_substitute_dependency (Score_element*o,Score_element*n)
 {
-  Item*o_l = o->access_Item ();
+  Item*o_l = dynamic_cast <Item *> (o);
   
 
   if (o_l&&o_l->is_type_b (Note_column::static_name ()))
     {
-      Note_column *n_l = n?(Note_column*)n->access_Item ():0;
+      Note_column *n_l = n?(Note_column*)dynamic_cast <Item *> (n):0;
       rest_l_arr_.substitute ((Note_column*)o_l, n_l);
       ncol_l_arr_.substitute ((Note_column*)o_l, n_l);
     }
diff --git a/lily/rest-engraver.cc b/lily/rest-engraver.cc
index 96c40d75c2..f4f2e6efbe 100644
--- a/lily/rest-engraver.cc
+++ b/lily/rest-engraver.cc
@@ -62,11 +62,11 @@ Rest_engraver::do_process_requests ()
 bool
 Rest_engraver::do_try_request (Request *r)
 {
-  Musical_req *m = r->access_Musical_req ();
-  if (!m || !m->access_Rest_req ())
+  Musical_req *m = dynamic_cast <Musical_req *> (r);
+  if (!m || !dynamic_cast <Rest_req *> (m))
     return false;
 
-  rest_req_l_ = m->access_Rest_req ();	// ugh
+  rest_req_l_ = dynamic_cast <Rest_req *> (m);	// ugh
   return true;
 }
 
diff --git a/lily/rhythmic-column-engraver.cc b/lily/rhythmic-column-engraver.cc
index 6d7fc6927b..8c1cacfdf5 100644
--- a/lily/rhythmic-column-engraver.cc
+++ b/lily/rhythmic-column-engraver.cc
@@ -12,6 +12,7 @@
 #include "note-column.hh"
 #include "script.hh"
 #include "dot-column.hh"
+#include "musical-request.hh"
 
 Rhythmic_column_engraver::Rhythmic_column_engraver()
 {
@@ -66,12 +67,12 @@ Rhythmic_column_engraver::process_acknowledged ()
 void
 Rhythmic_column_engraver::acknowledge_element (Score_element_info i)
 {
-  Item * item =  i.elem_l_->access_Item ();
+  Item * item =  dynamic_cast <Item *> (i.elem_l_);
   if (!item)
     return;
   if (item->is_type_b (Script::static_name ())
       && i.req_l_
-      && i.req_l_->access_Musical_req ()) 
+      && dynamic_cast <Musical_req *> (i.req_l_)) 
     {
       script_l_arr_.push ((Script*)item);
     }
diff --git a/lily/rhythmic-head.cc b/lily/rhythmic-head.cc
index ab9e7396dc..d4625e7c2b 100644
--- a/lily/rhythmic-head.cc
+++ b/lily/rhythmic-head.cc
@@ -52,7 +52,7 @@ void
 Rhythmic_head::do_substitute_dependent (Score_element*o,Score_element*n)
 {
   if (o == dots_l_)
-    dots_l_ = n ? (Dots*)n->access_Item () :0;
+    dots_l_ = n ? (Dots*)dynamic_cast <Item *> (n) :0;
 }
 
 IMPLEMENT_IS_TYPE_B1(Rhythmic_head, Item);
diff --git a/lily/score-element-info.cc b/lily/score-element-info.cc
index a0c6f68e85..81aa07fdbf 100644
--- a/lily/score-element-info.cc
+++ b/lily/score-element-info.cc
@@ -15,6 +15,7 @@ Score_element_info::Score_element_info (Score_element*s_l, Request*r_l)
   req_l_ = r_l;
 }
 
+
 Score_element_info::Score_element_info()
 {
   elem_l_ = 0;
diff --git a/lily/score-element.cc b/lily/score-element.cc
index b92945e285..cbaadfc4f4 100644
--- a/lily/score-element.cc
+++ b/lily/score-element.cc
@@ -9,7 +9,6 @@
 
 #include <string.h>
 
-#include "tex-outputter.hh"
 #include "p-score.hh"
 #include "paper-def.hh"
 #include "lookup.hh"
@@ -22,6 +21,7 @@
 #include "p-col.hh"
 #include "molecule.hh"
 #include "misc.hh"
+#include "paper-outputter.hh"
 
 #define PARANOID
 
@@ -291,17 +291,17 @@ Score_element::handle_broken_dependencies()
       Score_element * elt = dependency (i);
       if (elt->line_l() != line)
 	{
-	  if (elt->access_Spanner ()) 
+	  if (dynamic_cast <Spanner *> (elt)) 
 	    {
-	      Spanner * sp = elt->access_Spanner ();
+	      Spanner * sp = dynamic_cast <Spanner *> (elt);
 	      Spanner * broken = sp->find_broken_piece (line);
 	      substitute_dependency (sp, broken);
 
 	      add_dependency (broken);
 	    }
-	  else if (elt->access_Item ())
+	  else if (dynamic_cast <Item *> (elt))
 	    {
-	      Item * my_item = elt->access_Item ()->find_prebroken_piece (line);
+	      Item * my_item = dynamic_cast <Item *> (elt)->find_prebroken_piece (line);
 		
 	      substitute_dependency (elt, my_item);
 	      if (my_item)
@@ -338,11 +338,11 @@ Score_element::handle_prebroken_dependencies()
   for (int i=0; i < dependency_size(); i++) 
     {
       Score_element * elt = dependency (i);
-      Item *it_l = elt->access_Item ();
+      Item *it_l = dynamic_cast <Item *> (elt);
       if (it_l && it_l->breakable_b_)
-	if (access_Item ()) 
+	if (Item *me = dynamic_cast<Item*> (this) )
 	  {
-	    Score_element *new_l = it_l->find_prebroken_piece (access_Item ()->break_status_dir_);
+	    Score_element *new_l = it_l->find_prebroken_piece (me->break_status_dir_);
 	    if (new_l != elt) 
 	      {
 		new_arr.push (new_l);
diff --git a/lily/score-engraver.cc b/lily/score-engraver.cc
index 1b30731fd7..30a38f5360 100644
--- a/lily/score-engraver.cc
+++ b/lily/score-engraver.cc
@@ -18,6 +18,7 @@
 #include "paper-def.hh"
 
 
+
 Score_engraver::Score_engraver()
 {
   break_penalty_i_ = 0;
@@ -103,8 +104,8 @@ Score_engraver::do_announces()
 	  */
 	if (announce_info_arr_[i].req_l_) 
 	  {
-	    Musical_req *m = announce_info_arr_[i].req_l_->access_Musical_req ();
-	    if (m && m->access_Rhythmic_req ()) 
+	    Musical_req *m =dynamic_cast <Musical_req *> ( announce_info_arr_[i].req_l_);
+	    if (m && dynamic_cast <Rhythmic_req *> (m)) 
 	      {
 		musical_column_l_->add_duration (m->duration());
 	      }
@@ -117,23 +118,22 @@ Score_engraver::do_announces()
 void
 Score_engraver::typeset_element (Score_element *elem_p)
 {
-  elem_p_arr_.push(elem_p);
+  elem_p_arr_.push (elem_p);
 }
 
+
 void
 Score_engraver::typeset_all()
 {
   for  (int i =0; i < elem_p_arr_.size(); i++) 
     {
       Score_element * elem_p = elem_p_arr_[i];
-      if (elem_p->access_Spanner ()) 
+      if (dynamic_cast <Spanner *> (elem_p)) 
 	{
-	  Spanner *s = elem_p->access_Spanner ();
+	  Spanner *s = dynamic_cast <Spanner *> (elem_p);
 	  pscore_p_->typeset_unbroken_spanner (s);
 
-
-
-	    	  /*
+	    /*
 	    do something sensible if spanner not 
 	    spanned on 2 items.
 	   */
@@ -148,7 +148,7 @@ Score_engraver::typeset_all()
 	}
       else 
 	{
-	  Item *item_p = elem_p->access_Item ();
+	  Item *item_p = dynamic_cast <Item *> (elem_p);
 	  pscore_p_->typeset_element (item_p);
 	  if (!item_p->axis_group_l_a_[X_AXIS]) {
 	    if (item_p->breakable_b_) 
@@ -228,7 +228,6 @@ Score_engraver::get_staff_info() const
 }
 
 
-
 Music_output*
 Score_engraver::get_output_p ()
 {
@@ -242,13 +241,13 @@ Score_engraver::do_try_request (Request*r)
 {
   bool gotcha = Engraver_group_engraver::do_try_request (r);  
 
-  if (gotcha || !r->access_Command_req ())
+  if (gotcha || !dynamic_cast <Command_req *> (r))
     return gotcha;
 
-  Command_req * c = r->access_Command_req ();
-  if (c->access_Break_req ())
+  Command_req * c = dynamic_cast <Command_req *> (r);
+  if (dynamic_cast <Break_req *> (c))
     {
-      Break_req* b = (Break_req*)c->access_Break_req ();
+      Break_req* b = (Break_req*)dynamic_cast <Break_req *> (c);
       if (b->penalty_i_ <= Break_req::DISALLOW)
 	break_penalty_i_ = b->penalty_i_;
       else if (b->penalty_i_ >= Break_req::FORCE)
diff --git a/lily/score-priority-engraver.cc b/lily/score-priority-engraver.cc
index 310e44e101..3de5ea9f00 100644
--- a/lily/score-priority-engraver.cc
+++ b/lily/score-priority-engraver.cc
@@ -35,7 +35,7 @@ Score_priority_engraver::do_pre_move_processing()
 void
 Score_priority_engraver::acknowledge_element (Score_element_info inf)
 {
-  Item * item_l = inf.elem_l_->access_Item ();
+  Item * item_l = dynamic_cast <Item *> (inf.elem_l_);
   if (item_l && item_l->breakable_b_ && !item_l->empty_b ())
     {
       /*
@@ -68,7 +68,7 @@ Score_priority_engraver::acknowledge_element (Score_element_info inf)
 	  */
 	  if (unbound_elem->axis_group_l_a_[X_AXIS] == hg)
 	    return;
-	  unbound_elem = unbound_elem->axis_group_l_a_[X_AXIS]->access_Score_element ();
+	  unbound_elem = dynamic_cast<Score_element*> (unbound_elem->axis_group_l_a_[X_AXIS]);
 	}
 
       hg->add_element (unbound_elem);
diff --git a/lily/scores.cc b/lily/scores.cc
index f41666b0ad..5ac2645737 100644
--- a/lily/scores.cc
+++ b/lily/scores.cc
@@ -17,7 +17,6 @@
 #include "file-results.hh"
 #include "my-lily-parser.hh"
 #include "source.hh"
-#include "lookup.hh"
 
 Sources* source_global_l = 0;
 Array<String> inclusion_global_array;
@@ -125,16 +124,6 @@ do_one_file (String init_str, String file_str)
     parser.set_version_check (version_ignore_global_b);
     parser.parse_file (init_str, file_str);
 
-    /*
-       urg
-       when calling {Ps,Tex}_lookup::paper_stream_p (),
-       it *appears* (aaargh, latest gdb on ppc is gdb 4.16.97)
-       that (global_lookup_l's) 
-       paper_l_ is invalid but not NULL
-       (deleted without being reset maybe?)
-     */
-    global_lookup_l->paper_l_ = parser.default_paper_p ();
-
     if (parser.error_level_i_)
       {
 	exit_status_i_  = 1;
diff --git a/lily/script-column.cc b/lily/script-column.cc
index f67907c869..d85e1a6e0b 100644
--- a/lily/script-column.cc
+++ b/lily/script-column.cc
@@ -105,9 +105,9 @@ Script_column::add_support (Item*i_l)
 void
 Script_column::do_substitute_dependency (Score_element*o,Score_element*n)
 {
-  if (o->access_Item ()) 
+  if (dynamic_cast <Item *> (o)) 
     {
-      script_l_arr_.substitute ((Script*)o->access_Item (),(Script*) (n?n->access_Item ():0));
-      support_l_arr_.substitute (o->access_Item (), (n?n->access_Item ():0));
+      script_l_arr_.substitute ((Script*)dynamic_cast <Item *> (o),(Script*) (n?dynamic_cast <Item *> (n):0));
+      support_l_arr_.substitute (dynamic_cast <Item *> (o), (n?dynamic_cast <Item *> (n):0));
     }
 }
diff --git a/lily/script-engraver.cc b/lily/script-engraver.cc
index 671ca17e38..f27577e44b 100644
--- a/lily/script-engraver.cc
+++ b/lily/script-engraver.cc
@@ -21,7 +21,7 @@ Script_engraver::Script_engraver()
 bool
 Script_engraver::do_try_request (Request *r_l)
 {
-  if (!r_l->access_Musical_req () || ! r_l->access_Musical_req ()->access_Musical_script_req ())
+  if (!dynamic_cast <Musical_script_req *> (r_l))
     return false ;
   
   for (int i=0; i < script_req_l_arr_.size(); i++) 
@@ -29,7 +29,7 @@ Script_engraver::do_try_request (Request *r_l)
       if (r_l->equal_b (script_req_l_arr_[i]))
 	return true;
     }
-  script_req_l_arr_.push (r_l->access_Script_req ());
+  script_req_l_arr_.push (dynamic_cast <Script_req *> (r_l));
   
   return true;
 }
diff --git a/lily/script.cc b/lily/script.cc
index 76c9cbc02a..ee525907ae 100644
--- a/lily/script.cc
+++ b/lily/script.cc
@@ -27,7 +27,7 @@ Script::do_substitute_dependency (Score_element*o,Score_element*n)
   Staff_side::do_substitute_dependency (o,n);
   if (o == stem_l_)
     {
-      stem_l_ = n ? (Stem*)n->access_Item () : 0;
+      stem_l_ = n ? (Stem*)dynamic_cast <Item *> (n) : 0;
     }
 }
 
diff --git a/lily/separating-group-spanner.cc b/lily/separating-group-spanner.cc
index cffc4ee276..059afad994 100644
--- a/lily/separating-group-spanner.cc
+++ b/lily/separating-group-spanner.cc
@@ -65,8 +65,8 @@ Separating_group_spanner::do_substitute_dependency (Score_element*o, Score_eleme
   if (o->is_type_b (Single_malt_grouping_item::static_name ()))
     {
       Single_malt_grouping_item*ns = n ?
-	(Single_malt_grouping_item*)n->access_Item () : 0;
-      spacing_unit_l_arr_.substitute ((Single_malt_grouping_item*)o->access_Item (), ns);
+	(Single_malt_grouping_item*)dynamic_cast <Item *> (n) : 0;
+      spacing_unit_l_arr_.substitute ((Single_malt_grouping_item*)dynamic_cast <Item *> (o), ns);
     }
 }
 
diff --git a/lily/separating-line-group-engraver.cc b/lily/separating-line-group-engraver.cc
index 878bb1f1dc..f43b99a3c3 100644
--- a/lily/separating-line-group-engraver.cc
+++ b/lily/separating-line-group-engraver.cc
@@ -38,7 +38,7 @@ Separating_line_group_engraver::do_removal_processing ()
 void
 Separating_line_group_engraver::acknowledge_element (Score_element_info i)
 {
-  Item * it = i.elem_l_->access_Item ();
+  Item * it = dynamic_cast <Item *> (i.elem_l_);
   if (it && !it->axis_group_l_a_[X_AXIS])
     {
       Single_malt_grouping_item *&p_ref_ (it->breakable_b_ ?
diff --git a/lily/single-malt-grouping-item.cc b/lily/single-malt-grouping-item.cc
index 284a494d7e..56541540f1 100644
--- a/lily/single-malt-grouping-item.cc
+++ b/lily/single-malt-grouping-item.cc
@@ -46,9 +46,9 @@ IMPLEMENT_IS_TYPE_B1(Single_malt_grouping_item, Item);
 void
 Single_malt_grouping_item::do_substitute_dependency (Score_element*o, Score_element*n)
 {
-  if (o->access_Item ())
+  if (dynamic_cast <Item *> (o))
     {
-      item_l_arr_.unordered_substitute (o->access_Item (),  n ? n->access_Item () : 0);
+      item_l_arr_.unordered_substitute (dynamic_cast <Item *> (o),  n ? dynamic_cast <Item *> (n) : 0);
     }
 }
 
diff --git a/lily/slur-engraver.cc b/lily/slur-engraver.cc
index 8c43bfddfb..e7447b7432 100644
--- a/lily/slur-engraver.cc
+++ b/lily/slur-engraver.cc
@@ -15,11 +15,11 @@
 bool
 Slur_engraver::do_try_request (Request *req_l)
 {
-  Musical_req *mus_l = req_l->access_Musical_req ();
-  if (!mus_l || !mus_l->access_Slur_req ())
+  Musical_req *mus_l = dynamic_cast <Musical_req *> (req_l);
+  if (!mus_l || !dynamic_cast <Slur_req *> (mus_l))
     return false;
 
-  new_slur_req_l_arr_.push (mus_l->access_Slur_req ());
+  new_slur_req_l_arr_.push (dynamic_cast <Slur_req *> (mus_l));
   return true;
 }
 
@@ -28,7 +28,7 @@ Slur_engraver::acknowledge_element (Score_element_info info)
 {
   if (info.elem_l_->is_type_b (Note_column::static_name ()))
     {
-      Note_column *col_l =(Note_column*) info.elem_l_->access_Item() ;// ugh
+      Note_column *col_l =(Note_column*) dynamic_cast <Item *> (info.elem_l_) ;// ugh
       for (int i = 0; i < slur_l_stack_.size(); i++)
 	slur_l_stack_[i]->add_column (col_l);
       for (int i = 0; i < end_slur_l_arr_.size(); i++)
diff --git a/lily/slur.cc b/lily/slur.cc
index 28bd21fa6e..41769d8e0c 100644
--- a/lily/slur.cc
+++ b/lily/slur.cc
@@ -76,10 +76,10 @@ void
 Slur::do_substitute_dependency (Score_element*o, Score_element*n)
 {
   int i;
-  while ((i = encompass_arr_.find_i ((Note_column*)o->access_Item ())) >=0) 
+  while ((i = encompass_arr_.find_i ((Note_column*)dynamic_cast <Item *> (o))) >=0) 
     {
       if (n)
-	encompass_arr_[i] = (Note_column*)n->access_Item ();
+	encompass_arr_[i] = (Note_column*)dynamic_cast <Item *> (n);
       else
 	encompass_arr_.del (i);
     }
diff --git a/lily/span-bar-engraver.cc b/lily/span-bar-engraver.cc
index 61898273c0..4d3dc1f6f4 100644
--- a/lily/span-bar-engraver.cc
+++ b/lily/span-bar-engraver.cc
@@ -40,7 +40,7 @@ Span_bar_engraver::acknowledge_element (Score_element_info i)
   if (depth > 1
       && i.elem_l_->is_type_b (Bar::static_name())) 
     {
-      bar_l_arr_.push ((Bar*)i.elem_l_->access_Item ());
+      bar_l_arr_.push ((Bar*)dynamic_cast <Item *> (i.elem_l_));
 	
       if (bar_l_arr_.size() >= 2 && !spanbar_p_) 
 	/*
@@ -65,7 +65,7 @@ Span_bar_engraver::acknowledge_element (Score_element_info i)
   else if  (i.elem_l_->is_type_b (Vertical_align_spanner::static_name()) 
 	    && i.origin_grav_l_arr_.size() <= 2) 
     {
-      valign_l_ = (Vertical_align_spanner*)i.elem_l_->access_Spanner ();
+      valign_l_ = (Vertical_align_spanner*)dynamic_cast <Spanner *> (i.elem_l_);
     }
 }
 
diff --git a/lily/span-score-bar-engraver.cc b/lily/span-score-bar-engraver.cc
index 524d5b20ad..d3cff445e5 100644
--- a/lily/span-score-bar-engraver.cc
+++ b/lily/span-score-bar-engraver.cc
@@ -50,7 +50,7 @@ Staff_group_bar_engraver::acknowledge_element (Score_element_info i)
   Span_bar_engraver::acknowledge_element (i);
   if (i.elem_l_->is_type_b (Piano_brace::static_name ()))
     {
-      Span_bar* b =  i.elem_l_->access_Span_bar ();
+      Span_bar* b =  dynamic_cast <Span_bar *> (i.elem_l_);
       Piano_brace * piano_l = (Piano_brace*) b;
       piano_l->extra_move_left_f_  = paper ()->interline_f (); // ugh
     }
diff --git a/lily/spanner.cc b/lily/spanner.cc
index 0a1a74e5bd..83ad5f2091 100644
--- a/lily/spanner.cc
+++ b/lily/spanner.cc
@@ -10,8 +10,8 @@
 #include "spanner.hh"
 #include "p-col.hh"
 #include "p-score.hh"
-#include "tex-outputter.hh"
 #include "molecule.hh"
+#include "paper-outputter.hh"
 
 IMPLEMENT_IS_TYPE_B1(Spanner,Score_element);
 
@@ -53,7 +53,7 @@ Spanner::break_into_pieces ()
 
   for (int i=1; i < break_cols.size(); i++) 
     {
-      Spanner* span_p = clone()->access_Spanner ();
+      Spanner* span_p = dynamic_cast<Spanner*> (clone());
       Item *left = break_cols[i-1];
       Item *right = break_cols[i];
       if (!right->line_l())
diff --git a/lily/staff-margin-engraver.cc b/lily/staff-margin-engraver.cc
index 26150a6ba0..a80d36bd0a 100644
--- a/lily/staff-margin-engraver.cc
+++ b/lily/staff-margin-engraver.cc
@@ -40,7 +40,7 @@ Staff_margin_engraver::Staff_margin_engraver ()
 void
 Staff_margin_engraver::acknowledge_element (Score_element_info i)
 {
-  Item * it =  i.elem_l_->access_Item ();
+  Item * it =  dynamic_cast <Item *> (i.elem_l_);
 
   if (!it
       || script_p_ 
diff --git a/lily/stem-engraver.cc b/lily/stem-engraver.cc
index 8fa6d56761..e21c8c9012 100644
--- a/lily/stem-engraver.cc
+++ b/lily/stem-engraver.cc
@@ -38,10 +38,10 @@ Stem_engraver::acknowledge_element(Score_element_info i)
 {
   if (i.elem_l_->is_type_b (Rhythmic_head::static_name()))
     {
-      Rhythmic_head *h  = (Rhythmic_head*) i.elem_l_->access_Item ();
+      Rhythmic_head *h  = (Rhythmic_head*) dynamic_cast <Item *> (i.elem_l_);
       if (!stem_p_) 
 	{
-	  Rhythmic_req * r = i.req_l_->access_Musical_req ()->access_Rhythmic_req ();
+	  Rhythmic_req * r = dynamic_cast <Rhythmic_req *> (i.req_l_);
 	  stem_p_ = new Stem;
 	  int durlog_i = r->duration_.durlog_i_;
 	  stem_p_->flag_i_ = durlog_i;
@@ -103,11 +103,11 @@ Stem_engraver::do_pre_move_processing()
 bool
 Stem_engraver::do_try_request (Request* r)
 {
-  Musical_req* mus_l = r->access_Musical_req ();
+  Musical_req* mus_l = dynamic_cast <Musical_req *> (r);
   if (!mus_l)
     return false;
   
-  Abbreviation_req* a = mus_l->access_Abbreviation_req ();
+  Abbreviation_req* a = dynamic_cast <Abbreviation_req *> (mus_l);
   if (!a)
     return false;
 
diff --git a/lily/stem.cc b/lily/stem.cc
index b9e7e59b8a..423b40b397 100644
--- a/lily/stem.cc
+++ b/lily/stem.cc
@@ -347,8 +347,8 @@ Stem::hpos_f () const
 void
  Stem::do_substitute_dependency (Score_element*o,Score_element*n)
 {
-  Item * o_l = o->access_Item ();
-  Item * n_l = n? n->access_Item () : 0;
+  Item * o_l = dynamic_cast <Item *> (o);
+  Item * n_l = n? dynamic_cast <Item *> (n) : 0;
   head_l_arr_.substitute ((Note_head*)o_l, (Note_head*)n_l);
   rest_l_arr_.substitute ((Rest*)o_l, (Rest*)n_l);
 }
diff --git a/lily/super-element.cc b/lily/super-element.cc
index 419618ed4c..89168838b7 100644
--- a/lily/super-element.cc
+++ b/lily/super-element.cc
@@ -10,7 +10,7 @@
 #include "line-of-score.hh"
 #include "p-score.hh"
 #include "string.hh"
-#include "tex-outputter.hh"
+#include "paper-outputter.hh"
 
 
 Super_element::Super_element()
diff --git a/lily/tex-lookup.cc b/lily/tex-lookup.cc
deleted file mode 100644
index 4f10886e11..0000000000
--- a/lily/tex-lookup.cc
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
-  tex-lookup.cc -- implement Tex_lookup
-
-  source file of the GNU LilyPond music typesetter
-
-  (c)  1997--1998 Jan Nieuwenhuizen <janneke@gnu.org>
-  Jan Nieuwenhuizen <janneke@gnu.org>
-*/
-
-#include "tex-lookup.hh"
-#include "debug.hh"
-#include "symtable.hh"
-#include "scalar.hh"
-#include "paper-def.hh"
-#include "string-convert.hh"
-#include "main.hh"
-#include "file-results.hh"
-#include "scope.hh"
-#include "paper-stream.hh"
-#include "tex-stream.hh"
-#include "tex-outputter.hh"
-#include "dictionary-iter.hh"
-#include "identifier.hh"
-
-Tex_lookup::Tex_lookup ()
-  : Ps_lookup ()
-{
-}
-
-Tex_lookup::Tex_lookup (Lookup const& s)
-  : Ps_lookup (s)
-{
-}
-
-Tex_lookup::Tex_lookup (Symtables const& s)
-  : Ps_lookup (s)
-{
-}
-
-Tex_lookup::~Tex_lookup()
-{
-}
-
-Atom
-Tex_lookup::afm_find (String s) const
-{
-  return Lookup::afm_find (s, String ("\\char%d"));
-}
-
-Atom*
-Tex_lookup::atom_p (String s, int n, Box b) const
-{
-  if (s.length_i ())
-    s.prepend ("\\");
-  for (int i = 0; i < n; i++)
-    s += "{%}";
-  return new Atom (s, b);
-}
-
-String
-Tex_lookup::character_str (int i) const
-{
-  return Lookup::character_str (i);
-}
-
-Atom
-Tex_lookup::dashed_slur (Array<Offset> controls, Real thick, Real dash) const
-{
-  return embed (Ps_lookup::dashed_slur (controls, thick, dash));
-}
-
-Atom
-Tex_lookup::embed (Atom a) const
-{
-  a.str_ = "\\embeddedps{\n" + a.str_ + "}";
-  return a;
-}
-
-Atom
-Tex_lookup::hairpin (Real width, bool decresc, bool continued) const
-{
-  return embed (Ps_lookup::hairpin (width, decresc, continued));
-}
-
-Atom
-Tex_lookup::plet (Real dy , Real dx, Direction dir) const
-{
-  return embed (Ps_lookup::plet (dy, dx, dir));
-}
-
-Lookup*
-Tex_lookup::lookup_p (Lookup const& l) const
-{
-  return new Tex_lookup (l);
-}
-
-Lookup*
-Tex_lookup::lookup_p (Symtables const& s) const
-{
-  return new Tex_lookup (s);
-}
-
-extern char const *lily_version_number_sz ();
-
-String
-header_to_tex_string (Scope *head)
-{
-  String s;
-  String lily_id_str = "Lily was here, " +
-    String (lily_version_number_sz ());
-  s+= "\\def\\LilyIdString{"  + lily_id_str + "}\n";
-  
-  for (Dictionary_iter<Identifier*> i(*head); i.ok (); i++)
-    {
-      if (!i.val ()->access_String_identifier ())
-	continue;
-      
-      String val = *i.val()->access_String_identifier ()->data_p_;
-      s += "\\def\\mudela" + i.key () + "{" + val  + "}\n";
-    }
-  return s;
-}
-
-
-Paper_outputter*
-Tex_lookup::paper_outputter_p (Paper_stream* os_p, Paper_def* paper_l, Scope* header_l, String origin_str) const
-{
-  if (header_global_p)
-    *os_p << header_to_tex_string(header_global_p);
-  
-  *os_p << _ ("\n% outputting Score, defined at: ") << origin_str << '\n';
-
-  if (header_l)
-    *os_p << header_to_tex_string (header_global_p);
-  
-
-  *os_p << paper_l->tex_output_settings_str ();
-  
-  if (experimental_features_global_b)
-    *os_p << "\\turnOnExperimentalFeatures%\n";
-
-  *os_p << "\\turnOnPostScript%\n";
-
-  return new Tex_outputter (os_p);
-}
-
-Paper_stream *
-Tex_lookup::paper_stream_p () const
-{
-  String outname = base_output_str ();
-
-  Paper_stream* p;
-  if (outname != "-")
-    outname += ".tex";
-  *mlog << _f ("TeX output to %s...", 
-	       outname == "-" ? String ("<stdout>") : outname ) << endl;
-  p = new Tex_stream (outname);
-  target_str_global_array.push (outname);
-  return p;
-}
-
-String
-Tex_lookup::print_dimen (Real r) const
-{
-  String s = to_str (r, "%.3f");
-  if (s.index_i ("NaN") != -1)
-    {
-      warning (_ ("NaN"));
-      s = "0.0";
-    }
-  return Lookup::print_dimen (r) + "pt";
-}
-
-Atom
-Tex_lookup::ps_beam (Real slope, Real width, Real thick) const
-{
-  return embed (Ps_lookup::ps_beam (slope, width, thick));
-}
-
-Atom
-Tex_lookup::slur (Array<Offset> controls) const
-{
-  return embed (Ps_lookup::slur (controls));
-}
-
-Atom
-Tex_lookup::stem (Real y1, Real y2) const
-{
-  return Lookup::stem (y1, y2, "\\kern %\\vrule width % height % depth %");
-}
-
-Atom
-Tex_lookup::text (String style, String text) const
-{
-  return Lookup::text (style, text);
-}
-
-String
-Tex_lookup::unknown_str () const
-{
-  return "\\unknown";
-}
-
-Atom
-Tex_lookup::vbracket (Real &y) const
-{
-  return embed (Ps_lookup::vbracket (y));
-}
-
diff --git a/lily/tex-outputter.cc b/lily/tex-outputter.cc
deleted file mode 100644
index 89ebf31623..0000000000
--- a/lily/tex-outputter.cc
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
-  tex-outputter.cc -- implement Tex_outputter
-
-  source file of the GNU LilyPond music typesetter
-
-  (c)  1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-  Jan Nieuwenhuizen <janneke@gnu.org>
-*/
-
-#include "tex-outputter.hh"
-#include "tex-stream.hh"
-#include "molecule.hh"
-#include "atom.hh"
-#include "array.hh"
-#include "string-convert.hh"
-#include "debug.hh"
-
-Tex_outputter::Tex_outputter (Paper_stream *s)
-  :Paper_outputter (s)
-{
-}
-
-Tex_outputter::~Tex_outputter ()
-{
-}
-
-/*
-   26 fonts ought to be enough for anyone.
-*/
-static String
-tex_font_command(int i)
-{
-  return "\\font"  +String_convert::form_str ("%c",  'A' + i) ;
-}
-
-void
-Tex_outputter::switch_to_font (String fontname)
-{
-  if (!fontname.length_i () || fontname == current_font_)
-    return;
-
-  current_font_ = fontname;
-  int i=0;
-  for (; i< font_arr_.size (); i++)
-    if (font_arr_[i] == fontname)
-      {
-	*outstream_l_ <<tex_font_command (i) << "\n";
-	return ;
-      }
-
-  
-  font_arr_.push (fontname);
-  *outstream_l_ << "\\font"  + tex_font_command (i) << "=" + fontname << "\n";
-  *outstream_l_<< tex_font_command (i);
-}
-
-void
-Tex_outputter::output_molecule (Molecule const*m, Offset o, char const *nm)
-{
-  if (check_debug)
-    *outstream_l_ << String ("\n%start: ") << nm << "\n";
-
-  Paper_outputter::output_molecule (m, o, nm, "\\placebox{%}{%}{%}");
-}
-
-void
-Tex_outputter::start_line ()
-{
-  *outstream_l_ << "\\hbox{%\n";
-}
-
-void
-Tex_outputter::stop_line ()
-{
-  *outstream_l_ << "}";
-  *outstream_l_ << "\\interscoreline";
-  current_font_ = "";
-  font_arr_.clear ();
-}
diff --git a/lily/tex-stream.cc b/lily/tex-stream.cc
deleted file mode 100644
index d803058002..0000000000
--- a/lily/tex-stream.cc
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
-  tex-stream.cc -- implement Tex_stream
-
-  source file of the GNU LilyPond music typesetter
-
-  (c)  1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-
-*/
-
-#include <fstream.h>
-#include <time.h>
-
-#include "main.hh"
-#include "tex-stream.hh"
-#include "debug.hh"
-
-Tex_stream::Tex_stream (String filename)
-  : Paper_stream (filename)
-{
-  header ();
-}
-
-Tex_stream::~Tex_stream ()
-{
-  *os << "\n\\EndLilyPondOutput";
-}
-
-void
-Tex_stream::header ()
-{
-  // urg, merge with Ps
-  *os << _ ("% Creator: ");
-  if (no_timestamps_global_b)
-    *os << "GNU LilyPond\n";
-  else
-    *os << get_version_str () << '\n';
-  *os << _ ("% Automatically generated");
-  if (no_timestamps_global_b)
-    *os << ".\n";
-  else
-    {
-      *os << _ (", at ");
-      time_t t (time (0));
-      *os << ctime (&t) << "%\n";
-    }
-}
-
-// print string. don't forget indent.
-Paper_stream&
-Tex_stream::operator << (Scalar s)
-{
-  return Paper_stream::operator << (s);
-}
-
diff --git a/lily/text-spanner.cc b/lily/text-spanner.cc
index 2bafc76723..522081cedf 100644
--- a/lily/text-spanner.cc
+++ b/lily/text-spanner.cc
@@ -81,7 +81,7 @@ void
 Text_spanner::do_substitute_dependency (Score_element* o, Score_element*n)
 {
   if (support_span_l_ == o) 
-	support_span_l_ = (Directional_spanner*) (n?n->access_Spanner ():0);
+	support_span_l_ = (Directional_spanner*) (n?dynamic_cast <Spanner *> (n):0);
 }
 
 
diff --git a/lily/tie.cc b/lily/tie.cc
index cc36ab22c0..002c5e9694 100644
--- a/lily/tie.cc
+++ b/lily/tie.cc
@@ -151,10 +151,10 @@ Tie::do_post_processing()
 void
 Tie::do_substitute_dependency (Score_element*o, Score_element*n)
 {
-  Note_head *new_l =n?(Note_head*)n->access_Item ():0;
-  if (o->access_Item () == head_l_drul_[LEFT])
+  Note_head *new_l =n?(Note_head*)dynamic_cast <Item *> (n):0;
+  if (dynamic_cast <Item *> (o) == head_l_drul_[LEFT])
     head_l_drul_[LEFT] = new_l;
-  else if (o->access_Item () == head_l_drul_[RIGHT])
+  else if (dynamic_cast <Item *> (o) == head_l_drul_[RIGHT])
     head_l_drul_[RIGHT] = new_l;
 }
 
diff --git a/lily/ties-engraver.cc b/lily/ties-engraver.cc
index 9ed1ef3b04..f79dab5ac9 100644
--- a/lily/ties-engraver.cc
+++ b/lily/ties-engraver.cc
@@ -28,15 +28,15 @@ Ties_engraver::do_post_move_processing()
 bool
 Ties_engraver::do_try_request (Request*req)
 {
-  if (! req->access_Musical_req ())
+  if (! dynamic_cast <Musical_req *> (req))
       return false;
 
-  Tie_req * r=  req->access_Musical_req ()->access_Tie_req ();
-  if (!r)
-    return false;
-  
-  req_l_ = r;
-  return true;
+  if(Tie_req * r=  dynamic_cast <Tie_req *> (req))
+    {  
+      req_l_ = r;
+      return true;
+    }
+  return false;
 }
 
 
@@ -47,8 +47,8 @@ Ties_engraver::acknowledge_element (Score_element_info i)
     return;
   if (i.elem_l_->is_type_b (Note_head::static_name ()))
     {
-      Note_head * h = (Note_head*)i.elem_l_->access_Item ();
-      Melodic_req *m = i.req_l_->access_Musical_req ()->access_Melodic_req ();
+      Note_head * h = dynamic_cast <Note_head *> (i.elem_l_);
+      Melodic_req *m = dynamic_cast <Melodic_req *> (i.req_l_);
       
       head_mel_tuple_arr_.push (Head_melodic_tuple (h, m));
     }
diff --git a/lily/time-signature-engraver.cc b/lily/time-signature-engraver.cc
index 1e52ea151e..89e29e61ed 100644
--- a/lily/time-signature-engraver.cc
+++ b/lily/time-signature-engraver.cc
@@ -30,7 +30,7 @@ Time_signature_engraver::do_process_requests()
       return ;
     }
   
-  Timing_engraver * timing_grav_l= (Timing_engraver*) result->access_Engraver  ();
+  Timing_engraver * timing_grav_l= (Timing_engraver*) dynamic_cast <Engraver *> (result);
   
   Time_signature_change_req *req = timing_grav_l->time_signature_req_l();
   if (req)
diff --git a/lily/time-signature-performer.cc b/lily/time-signature-performer.cc
index df41bf56b0..6440550170 100644
--- a/lily/time-signature-performer.cc
+++ b/lily/time-signature-performer.cc
@@ -45,8 +45,8 @@ Time_signature_performer::do_try_request (Request* req_l)
   if (time_signature_req_l_)
     return false;
 
-  if (req_l->access_Command_req ())
-    time_signature_req_l_ = req_l->access_Command_req ()->access_Time_signature_change_req ();
+  if (dynamic_cast <Command_req *> (req_l))
+    time_signature_req_l_ = dynamic_cast <Time_signature_change_req *> (req_l);
 
   if (time_signature_req_l_)
     return true;
diff --git a/lily/timing-translator.cc b/lily/timing-translator.cc
index 79dd64035c..316f31d523 100644
--- a/lily/timing-translator.cc
+++ b/lily/timing-translator.cc
@@ -20,8 +20,8 @@ Timing_translator::Timing_translator ()
 bool
 Timing_translator::do_try_request(Request*r)
 {
-  Command_req * c = r->access_Command_req ();
-  if (!(c && c->access_Timing_req ()))
+  Command_req * c = dynamic_cast <Command_req *> (r);
+  if (!(c && dynamic_cast <Timing_req *> (c)))
     return false;
   for (int i=0; i < timing_req_l_arr_.size (); i++)
     {
@@ -34,7 +34,7 @@ Timing_translator::do_try_request(Request*r)
 	}
     }
 
-  timing_req_l_arr_.push(c->access_Timing_req ());
+  timing_req_l_arr_.push(dynamic_cast <Timing_req *> (c));
   return true;
 }
 
@@ -44,7 +44,7 @@ Timing_translator::time_signature_req_l() const
   Time_signature_change_req *m_l=0;
   for (int i=0; !m_l && i < timing_req_l_arr_.size (); i++)
     {
-      m_l=timing_req_l_arr_[i]->access_Time_signature_change_req ();
+      m_l=dynamic_cast<Time_signature_change_req*> (timing_req_l_arr_[i]);
     }
   return m_l;
 }
@@ -55,7 +55,7 @@ Timing_translator::do_process_requests()
   for (int i=0; i < timing_req_l_arr_.size (); i++)
     {
       Timing_req * tr_l = timing_req_l_arr_[i];
-      Time_signature_change_req *m_l = tr_l->access_Time_signature_change_req ();
+      Time_signature_change_req *m_l = dynamic_cast <Time_signature_change_req *> (tr_l);
       if (m_l)
 	{
 	  int b_i= m_l->beats_i_;
@@ -69,9 +69,9 @@ Timing_translator::do_process_requests()
 		Rhythmic_grouping (MInterval (0,Moment (b_i, o_i)), b_i);
 	    }
 	}
-      else if (tr_l->access_Partial_measure_req ())
+      else if (dynamic_cast <Partial_measure_req *> (tr_l))
 	{
-	  Moment m = tr_l->access_Partial_measure_req ()->duration_;
+	  Moment m = dynamic_cast <Partial_measure_req *> (tr_l)->duration_;
 	  String error = time_.try_set_partial_str (m);
 	  if (error.length_i ())
 	    {
@@ -80,7 +80,7 @@ Timing_translator::do_process_requests()
 	  else
 	    time_.setpartial (m);
 	}
-      else if (tr_l->access_Barcheck_req())
+      else if (dynamic_cast <Barcheck_req *> (tr_l))
 	{
 	  if (time_.whole_in_measure_)
 	    {
@@ -92,15 +92,15 @@ Timing_translator::do_process_requests()
 	    }
 
 	}
-      else if (tr_l->access_Cadenza_req ())
+      else if (dynamic_cast <Cadenza_req *> (tr_l))
 	{
-	  time_.set_cadenza (tr_l->access_Cadenza_req ()->on_b_);
+	  time_.set_cadenza (dynamic_cast <Cadenza_req *> (tr_l)->on_b_);
 	}
-      else if (tr_l->access_Measure_grouping_req ())
+      else if (dynamic_cast <Measure_grouping_req *> (tr_l))
 	{
 	  default_grouping_ =
-	    parse_grouping (tr_l->access_Measure_grouping_req ()->beat_i_arr_,
-			    tr_l->access_Measure_grouping_req ()->elt_length_arr_);
+	    parse_grouping (dynamic_cast <Measure_grouping_req *> (tr_l)->beat_i_arr_,
+			    dynamic_cast <Measure_grouping_req *> (tr_l)->elt_length_arr_);
 
 	}
     }
diff --git a/lily/translator-group.cc b/lily/translator-group.cc
index 77d0f18b6e..5d9a3e31fb 100644
--- a/lily/translator-group.cc
+++ b/lily/translator-group.cc
@@ -88,7 +88,7 @@ Translator_group::removable_b() const
 {
   for (PCursor<Translator*> i (trans_p_list_.top ()); i.ok (); i++)
     {
-      if (i->access_Translator_group ())
+      if (dynamic_cast <Translator_group *> (i.ptr ()))
 	return false;
     }
 
@@ -118,9 +118,9 @@ Translator_group::path_to_acceptable_translator (String type) const
   for (int i=0; i < accepts_str_arr_.size (); i++)
     {
       Translator *t = output_def_l ()->find_translator_l (accepts_str_arr_[i]);
-      if (!t || !t->access_Translator_group ())
+      if (!t || !dynamic_cast <Translator_group *> (t))
 	continue;
-      accepted_arr.push (t->access_Translator_group ());
+      accepted_arr.push (dynamic_cast <Translator_group *> (t));
     }
 
 
@@ -166,7 +166,7 @@ Translator_group::find_create_translator_l (String n, String id)
       // start at 1.  The first one (index 0) will be us.
       for (int i=0; i < path.size (); i++)
 	{
-	  Translator_group * new_group = path[i]->clone ()->access_Translator_group ();
+	  Translator_group * new_group = dynamic_cast<Translator_group*>(path[i]->clone ());
 	  current->add_translator (new_group);
 	  current = new_group;
 	}
@@ -221,8 +221,8 @@ Translator_group::group_l_arr () const
   Link_array<Translator_group> groups;
   for (PCursor<Translator*> i (trans_p_list_.top ()); i.ok (); i++)
     {
-      if (i->access_Translator_group ())
-	groups.push (i->access_Translator_group ());
+      if (dynamic_cast <Translator_group *> (i.ptr ()))
+	groups.push (dynamic_cast <Translator_group *> (i.ptr ()));
     }
   return groups;
 }
@@ -233,7 +233,7 @@ Translator_group::nongroup_l_arr () const
   Link_array<Translator> groups;
   for (PCursor<Translator*> i (trans_p_list_.top ()); i.ok (); i++)
     {
-      if (!i->access_Translator_group ())
+      if (!dynamic_cast <Translator_group *> (i.ptr ()))
 	groups.push (i.ptr ());
     }
   return groups;
@@ -300,7 +300,7 @@ Translator_group::get_default_interpreter()
 	  warning (_f ("can't find or create `%s\'", accepts_str_arr_[0]));
 	  t = this;
 	}
-      Translator_group * g= t->clone ()->access_Translator_group ();
+      Translator_group * g= dynamic_cast <Translator_group*>(t->clone ());
       add_translator (g);
 
       if (!g->is_bottom_translator_b ())
diff --git a/make/out/lelievijver.lsm b/make/out/lelievijver.lsm
index a34c05299c..0979341e1a 100644
--- a/make/out/lelievijver.lsm
+++ b/make/out/lelievijver.lsm
@@ -1,15 +1,15 @@
 Begin3
 Titel: LilyPond
-Versie: 1.0.17
-Inschrijf datum: 19OCT98
+Versie: 1.1.0
+Inschrijf datum: 23OCT98
 Beschrijving: @FLAPTEKST@
 Trefwoorden: muziek typezetten midi notatie
 Auteur: hanwen@stack.nl (Han-Wen Nienhuys)
 	janneke@gnu.org (Jan Nieuwenhuizen)
 Onderhouden door: hanwen@cs.ruu.nl (Han-Wen Nienhuys)
 Voornaamste plek: sunsite.unc.edu /pub/Linux/apps
-	770k lilypond-1.0.17.tar.gz 
+	770k lilypond-1.1.0.tar.gz 
 Oorspronkelijke plek: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
-	770k lilypond-1.0.17.tar.gz 
+	770k lilypond-1.1.0.tar.gz 
 Copi-eer voorwaarden: GPL
 End
diff --git a/make/out/lilypond.lsm b/make/out/lilypond.lsm
index 6f9269827a..2d97b83a71 100644
--- a/make/out/lilypond.lsm
+++ b/make/out/lilypond.lsm
@@ -1,7 +1,7 @@
 Begin3
 Title: LilyPond
-Version: 1.0.17
-Entered-date: 19OCT98
+Version: 1.1.0
+Entered-date: 23OCT98
 Description: 
 LilyPond is the GNU Project music typesetter.  This program can print
 beautiful sheet music from a music definition file.  It can also play
@@ -14,8 +14,8 @@ Author: hanwen@cs.ruu.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
-	770k lilypond-1.0.17.tar.gz 
+	770k lilypond-1.1.0.tar.gz 
 Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
-	770k lilypond-1.0.17.tar.gz 
+	770k lilypond-1.1.0.tar.gz 
 Copying-policy: GPL
 End
diff --git a/make/out/lilypond.spec b/make/out/lilypond.spec
index 0464aff56a..34f9660243 100644
--- a/make/out/lilypond.spec
+++ b/make/out/lilypond.spec
@@ -1,9 +1,9 @@
 Name: lilypond
-Version: 1.0.17
+Version: 1.1.0
 Release: 1
 Copyright: GPL
 Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.0.17.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.1.0.tar.gz
 Summary: A program for printing sheet music.
 URL: http://www.cs.uu.nl/~hanwen/lilypond
 Packager: Han-Wen Nienhuys <hanwen@cs.uu.nl>
diff --git a/make/stepmake.make b/make/stepmake.make
index 44f7d3e405..07d293704e 100644
--- a/make/stepmake.make
+++ b/make/stepmake.make
@@ -23,7 +23,7 @@ else
 outdir=out
 endif
 
-stepdir = $(depth)/$(stepmake)/stepmake
+stepdir = $(stepmake)/stepmake
 
 STEPMAKE_TEMPLATES := generic $(STEPMAKE_TEMPLATES) 
 LOCALSTEPMAKE_TEMPLATES:= generic $(LOCALSTEPMAKE_TEMPLATES)
diff --git a/make/toplevel.make.in b/make/toplevel.make.in
index d41d58a405..628a2a9f78 100644
--- a/make/toplevel.make.in
+++ b/make/toplevel.make.in
@@ -15,7 +15,7 @@ SUBDIRS = scripts buildscripts  flower lib lily mf mi2mu po debian \
 
 SCRIPTS = configure aclocal.m4
 README_FILES = BUGS DEDICATION ANNOUNCE-0.1 ANNOUNCEMENT \
- COPYING NEWS-0.1 NEWS-0.0 NEWS  TODO
+ COPYING NEWS-0.1 NEWS-1.0 NEWS-0.0 NEWS  TODO
 README_TXT_FILES = README.txt AUTHORS.txt INSTALL.txt PATCHES.txt
 IN_FILES := $(wildcard *.in)
 EXTRA_DIST_FILES = dstreamrc mudela-mode.el vimrc VERSION $(README_FILES)  $(SCRIPTS) $(IN_FILES)
diff --git a/mf/GNUmakefile b/mf/GNUmakefile
index dfc37de8c9..88c89cdeff 100644
--- a/mf/GNUmakefile
+++ b/mf/GNUmakefile
@@ -2,9 +2,9 @@
 
 depth = ..
 
-STEPMAKE_TEMPLATES=metafont metapost
+STEPMAKE_TEMPLATES=metafont metapost install install-out
 
-EXTRA_DIST_FILES += TODO README feta.mp mfmp.ini
+EXTRA_DIST_FILES += TODO README feta.mp mfplain.ini
 
 
 FET_FILES = $(wildcard feta[0-9]*.mf)
@@ -19,34 +19,23 @@ ALL_GEN_FILES=$(LYTABLES) $(TEXTABLES) $(LOG_FILES) $(AFM_FILES)
 
 OUT_DIST_FILES += $(AFM_FILES)
 
-include $(depth)/make/stepmake.make 
-
-default: $(ALL_GEN_FILES)
-
-
-$(outdir)/%.afm $(outdir)/%.ly $(outdir)/%.tex $(outdir)/%.dep: $(outdir)/%.log
-	$(PYTHON) $(buildscripts)/mf-to-table.py --package=$(topdir) --outdir=$(outdir) --dep $(outdir)/$(<F:.log=.dep) --ly $(outdir)/$(<F:.log=.ly) --afm $(outdir)/$(<F:.log=.afm) --tex $(outdir)/$(<F:.log=.tex) $<
-
-
-
-TEXINSTALL=$(MAKE) INSTALLATION_OUT_DIR=$(datadir)/tex/ depth=.. INSTALLATION_OUT_FILES="$(TEXTABLES)" -f $(stepdir)/install-outfiles.sub.make $@
+#PRE_INSTALL=$(MAKE) "$(ALL_GEN_FILES)"
+INSTALLATION_DIR=$(datadir)/mf/
+INSTALLATION_FILES=$(MF_FILES)
 
-AFMINSTALL=$(MAKE) depth=.. INSTALLATION_OUT_DIR=$(datadir)/afm/ INSTALLATION_OUT_FILES="$(AFM_FILES)" -f $(stepdir)/install-outfiles.sub.make $@
+INSTALLATION_OUT_DIR=$(datadir)/tex
+INSTALLATION_OUT_FILES=$(TEXTABLES)
 
-LYINSTALL=$(MAKE) depth=.. INSTALLATION_OUT_DIR=$(datadir)/ly/ INSTALLATION_OUT_FILES="$(LYTABLES)" -f $(stepdir)/install-outfiles.sub.make $@
+INSTALLATION_OUT_DIR1=$(datadir)/afm
+INSTALLATION_OUT_FILES1=$(AFM_FILES)
 
-localinstall: $(ALL_GEN_FILES)
-	$(TEXINSTALL)
-	$(LYINSTALL)
-	$(AFMINSTALL)
+INSTALLATION_OUT_DIR2=$(datadir)/ly
+INSTALLATION_OUT_FILES2=$(LYTABLES)
 
-localuninstall:
-	$(TEXINSTALL)
-	$(LYINSTALL)
-	$(AFMINSTALL)
+include $(depth)/make/stepmake.make 
 
-INSTALLATION_DIR=$(datadir)/mf/
-INSTALLATION_FILES=$(MF_FILES)
+default: $(ALL_GEN_FILES)
 
-include $(stepdir)/installfiles.make
+$(outdir)/%.afm $(outdir)/%.ly $(outdir)/%.tex $(outdir)/%.dep: $(outdir)/%.log
+	$(PYTHON) $(buildscripts)/mf-to-table.py --package=$(topdir) --outdir=$(outdir) --dep $(outdir)/$(<F:.log=.dep) --ly $(outdir)/$(<F:.log=.ly) --afm $(outdir)/$(<F:.log=.afm) --tex $(outdir)/$(<F:.log=.tex) $<
 
diff --git a/mf/feta-autometric.mf b/mf/feta-autometric.mf
index c638935f85..27703e2686 100644
--- a/mf/feta-autometric.mf
+++ b/mf/feta-autometric.mf
@@ -3,7 +3,7 @@
 % 
 % source file of the Feta (Font-En-Tja) pretty-but-neat music font
 % 
-% (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+% (c) 1997, 1998 Han-Wen Nienhuys <hanwen@stack.nl>
 %          Jan Nieuwenhuizen <janneke@gnu.org>
 % 
 % these macros help create ascii logging output
diff --git a/mf/feta-beum.mf b/mf/feta-beum.mf
index 7097d68d3c..1288d6f20d 100644
--- a/mf/feta-beum.mf
+++ b/mf/feta-beum.mf
@@ -3,7 +3,7 @@
 % 
 % source file of LilyPond's pretty-but-neat music font
 % 
-% (c) 1997 Jan Nieuwenhuizen <janneke@gnu.org>
+% (c) 1997, 1998 Jan Nieuwenhuizen <janneke@gnu.org>
 % 
 mode_setup;
 
diff --git a/mf/feta-bolletjes.mf b/mf/feta-bolletjes.mf
index 8a48d4bfc7..6b3e9890ba 100644
--- a/mf/feta-bolletjes.mf
+++ b/mf/feta-bolletjes.mf
@@ -3,7 +3,7 @@
 % 
 % source file of LilyPond's pretty-but-neat music font
 % 
-% (c) 1997 Jan Nieuwenhuizen <janneke@gnu.org>
+% (c) 1997, 1998 Jan Nieuwenhuizen <janneke@gnu.org>
 % & Han-Wen Nienhuys <hanwen@stack.nl>
 % 
 
diff --git a/mf/feta-braces16.mf b/mf/feta-braces16.mf
index c5748c1aba..60dc071186 100644
--- a/mf/feta-braces16.mf
+++ b/mf/feta-braces16.mf
@@ -4,7 +4,7 @@
 % 
 % source file of the Feta (Font-En-Tja) music font
 % 
-% (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+% (c) 1997, 1998 Han-Wen Nienhuys <hanwen@stack.nl>
 % 
 
 font_identifier:="feta-braces16";
diff --git a/mf/feta-braces20.mf b/mf/feta-braces20.mf
index 5ee256430f..9aae3d5379 100644
--- a/mf/feta-braces20.mf
+++ b/mf/feta-braces20.mf
@@ -3,7 +3,7 @@
 % 
 % source file of the Feta (Font-En-Tja) music font
 % 
-% (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+% (c) 1997, 1998 Han-Wen Nienhuys <hanwen@stack.nl>
 % 
 
 font_identifier:="feta-braces20";
diff --git a/mf/feta-eindelijk.mf b/mf/feta-eindelijk.mf
index 0670ea351b..f3c26b669b 100644
--- a/mf/feta-eindelijk.mf
+++ b/mf/feta-eindelijk.mf
@@ -1,6 +1,10 @@
-% eindelijk.mf
-% LilyPond's own rest(s)
-
+% feta-eindelijk.mf -- implement rest symbols
+%
+% part of LilyPond's pretty-but-neat music font
+%
+% source file of the Feta (not the Font-En-Tja) music font
+% 
+% (c) 1997, 1998 Jan Nieuwenhuizen <janneke@gnu.org>
 
 fet_begingroup("rests");
 
diff --git a/mf/feta-generic.mf b/mf/feta-generic.mf
index 6b3bdda090..41729fe324 100644
--- a/mf/feta-generic.mf
+++ b/mf/feta-generic.mf
@@ -4,7 +4,7 @@
 % source file of the Feta (defintively not an abbreviation for Font-En-Tja)
 % music font
 % 
-% (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+% (c) 1997, 1998 Han-Wen Nienhuys <hanwen@stack.nl>
 % 
 
 
diff --git a/mf/feta-klef.mf b/mf/feta-klef.mf
index cccaef43fd..2e846acb43 100644
--- a/mf/feta-klef.mf
+++ b/mf/feta-klef.mf
@@ -1,14 +1,13 @@
-% 
 % feta-klef.mf --  implement Clefs
 % 
-% source file of the Feta (Font-En-Tja) music font
+% part of LilyPond's pretty-but-neat music font
+%
+% source file of the Feta (not the Font-En-Tja) music font
 % 
-% (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>,
+% (c) 1997, 1998 Han-Wen Nienhuys <hanwen@stack.nl>,
 % Jan Nieuwenhuizen <janneke@gnu.org>
 
 
-
-
 fet_begingroup("clefs");
 
 %
diff --git a/mf/feta-nummer.mf b/mf/feta-nummer.mf
index c35ee4c2f2..66a4649ac1 100644
--- a/mf/feta-nummer.mf
+++ b/mf/feta-nummer.mf
@@ -1,5 +1,10 @@
-% feta-nummer.mf
+% feta-nummer.mf -- implement bold Orator numerals
+%
 % part of LilyPond's pretty-but-neat music font
+%
+% source file of the Feta (not the Font-En-Tja) music font
+% 
+% (c) 1997, 1998 Jan Nieuwenhuizen <janneke@gnu.org>
 
 fet_begingroup("nummer")
 code := 47;
diff --git a/mf/feta-schrift.mf b/mf/feta-schrift.mf
index 7257a45277..2c314efb6e 100644
--- a/mf/feta-schrift.mf
+++ b/mf/feta-schrift.mf
@@ -4,7 +4,7 @@
 % source file of the Feta (defintively not an abbreviation for Font-En-Tja)
 % music font
 % 
-% (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+% (c) 1997, 1998 Han-Wen Nienhuys <hanwen@stack.nl>
 %	Jan Nieuwenhuizen <janneke@gnu.org>
 % 
 
@@ -58,6 +58,37 @@ fet_beginchar("fermata down", "dfermata", "dfermata")
 	y_mirror_char;
 fet_endchar;
 
+%
+% Thumbs are used in cello music.
+% TODO : thumbs should look like the finger-font and should be placed in
+% the same way in the score.
+%
+
+fet_beginchar("Thumb", "thumb", "thumb")
+        save thin, height, width, thick;
+        height# = 5/4 width#;
+        height# = interline#;
+        thin = 1.2 stafflinethickness;
+        thick =  1.4 thin;
+        set_char_box(width#/2, width#/2, height#/2, height#/2);
+
+        penpos1(thick, 0);
+        penpos2(thin, 90);
+        z1r = (w, 0);
+        z2r = (0, h);
+        penlabels(1,2);
+        penstroke z1e{up} .. {left}z2e;
+        addto currentpicture also currentpicture xscaled -1;
+        addto currentpicture also currentpicture yscaled -1;
+
+	pickup pencircle scaled thin;
+	save x,y;
+	z3r = (0, -h);
+	z4 = (0, -2h);
+	penlabels(3,4);
+	draw z3r -- z4;
+fet_endchar;
+
 
 %
 % FIXME: rounded endings
@@ -179,6 +210,7 @@ fet_beginchar("marcato down", "dmarcato", "dmarcato")
 	xy_mirror_char;
 fet_endchar;
  
+
 %
 % used in french horn music todo
 %
diff --git a/mf/feta-sleur.mf b/mf/feta-sleur.mf
index e612937728..6d98d4dfc7 100644
--- a/mf/feta-sleur.mf
+++ b/mf/feta-sleur.mf
@@ -3,7 +3,7 @@
 % 
 % source file of LilyPond's pretty-but-neat music font
 % 
-% (c) 1997 Jan Nieuwenhuizen <janneke@gnu.org>
+% (c) 1997, 1998 Jan Nieuwenhuizen <janneke@gnu.org>
 % & Han-Wen Nienhuys <hanwen@stack.nl>
 % 
 % see Documentation/fonts.tex
diff --git a/mf/feta-toevallig.mf b/mf/feta-toevallig.mf
index 7da404d0c7..b9c9a0ebbe 100644
--- a/mf/feta-toevallig.mf
+++ b/mf/feta-toevallig.mf
@@ -3,7 +3,7 @@
 % 
 % source file of the Feta (Font-En-Tja) music font
 % 
-% (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+% (c) 1997, 1998 Han-Wen Nienhuys <hanwen@stack.nl>
 % 
 
 
diff --git a/mf/mfmp.ini b/mf/mfmp.ini
deleted file mode 100644
index 1b0e00c26b..0000000000
--- a/mf/mfmp.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-\input mfplain
-\input modes
-\dump
-
diff --git a/mf/mfplain.ini b/mf/mfplain.ini
new file mode 100644
index 0000000000..7ad4dfd71e
--- /dev/null
+++ b/mf/mfplain.ini
@@ -0,0 +1,3 @@
+\input plain.mf
+\input modes.mf
+\dump mfplain
diff --git a/mf/out/feta11.afm b/mf/out/feta11.afm
index 7e8f6f28d6..c95d407d33 100644
--- a/mf/out/feta11.afm
+++ b/mf/out/feta11.afm
@@ -32,52 +32,53 @@ C 27; N balls-2; B 0.00 -1512.51 3632.84 1512.51 ;
 C 28; N balls-2l; B -908.22 -275.02 4541.06 275.02 ;
 C 29; N scripts-ufermata; B -3643.77 -206.27 3643.77 3987.55 ;
 C 30; N scripts-dfermata; B -3643.77 -3987.55 3643.77 206.27 ;
-C 31; N scripts-sforzato; B -2474.99 -1375.00 2474.99 1375.00 ;
-C 32; N scripts-staccato; B -412.54 -412.54 412.54 412.54 ;
-C 33; N scripts-ustaccatissimo; B -550.05 -200.00 550.05 2750.06 ;
-C 34; N scripts-dstaccatissimo; B -550.05 -2750.06 550.05 200.00 ;
-C 35; N scripts-tenuto; B -1650.02 -192.52 1650.02 192.52 ;
-C 36; N scripts-umarcato; B -1375.00 0.00 1375.00 3025.02 ;
-C 37; N scripts-dmarcato; B -1375.00 -3025.02 1375.00 0.00 ;
-C 38; N scripts-open; B -1100.00 -1375.00 1100.00 1375.00 ;
-C 39; N scripts-stopped; B -1512.51 -1512.51 1512.51 1512.51 ;
-C 40; N scripts-upbow; B -1787.50 0.00 1787.50 5720.05 ;
-C 41; N scripts-downbow; B -2062.50 0.00 2062.50 3666.66 ;
-C 42; N scripts-reverseturn; B -3007.81 -1455.89 3007.81 1455.89 ;
-C 43; N scripts-turn; B -3007.81 -1455.89 3007.81 1455.89 ;
-C 44; N scripts-trill; B -2750.00 0.00 2750.00 6187.50 ;
-C 45; N scripts-upedalheel; B -1375.00 -1375.00 1375.00 1833.33 ;
-C 46; N scripts-dpedalheel; B -1375.00 -1833.33 1375.00 1375.00 ;
-C 47; N scripts-upedaltoe; B -1375.00 0.00 1375.00 4125.00 ;
-C 48; N scripts-dpedaltoe; B -1375.00 -4125.00 1375.00 0.00 ;
-C 49; N scripts-flageolet; B -1466.67 -1466.67 1466.67 1466.67 ;
-C 50; N scripts-trilelement; B -1833.33 -1375.00 718.64 1375.00 ;
-C 51; N scripts-prall; B -3109.31 -1375.00 3109.31 1375.00 ;
-C 52; N scripts-mordent; B -3109.31 -1375.00 3109.31 1375.00 ;
-C 53; N scripts-prallprall; B -4385.30 -1375.00 4385.30 1375.00 ;
-C 54; N scripts-prallmordent; B -4385.30 -1375.00 4385.30 1375.00 ;
-C 55; N scripts-upprall; B -4385.30 -1375.00 4385.30 1375.00 ;
-C 56; N scripts-downprall; B -4385.30 -1375.00 4385.30 1375.00 ;
-C 57; N flags-u3; B -137.51 -8428.77 3393.31 137.51 ;
-C 58; N flags-u4; B -137.51 -9803.77 3393.31 137.51 ;
-C 59; N flags-u5; B -137.51 -11866.27 3393.31 137.51 ;
-C 60; N flags-u6; B -137.51 -14616.27 3393.31 137.51 ;
-C 61; N flags-d3; B -137.51 -137.51 3755.11 8016.30 ;
-C 62; N flags-d4; B -137.51 -137.51 3755.11 8428.77 ;
-C 63; N flags-d5; B -137.51 -137.51 3755.11 10766.30 ;
-C 64; N flags-d6; B -137.51 -137.51 3755.11 12141.30 ;
-C 65; N clefs-alto; B -2750.00 -5500.00 10236.10 5500.00 ;
-C 66; N clefs-alto_change; B -2200.01 -4400.02 8188.93 4400.02 ;
-C 67; N clefs-bass; B -1375.00 -6875.00 9900.02 2750.00 ;
-C 68; N clefs-bass_change; B -1100.02 -5500.03 7920.04 2200.01 ;
-C 69; N clefs-violin; B -2396.44 -8250.00 10277.13 13750.00 ;
-C 70; N clefs-violin_change; B -2082.15 -6600.04 8056.75 11000.06 ;
-C 71; N timesig-C4/4; B -4950.01 -2750.00 4674.99 2750.00 ;
-C 72; N timesig-C2/2; B -4950.01 -3849.99 4674.99 3849.99 ;
-C 73; N timesig-old4/4; B -4812.50 -2062.50 4812.50 2062.50 ;
-C 74; N timesig-old2/2; B -4812.50 -2750.00 4812.50 2750.00 ;
-C 75; N timesig-old3/2; B -4812.50 -2062.50 4812.50 2062.50 ;
-C 76; N timesig-old6/4; B -4812.50 -3437.50 4812.50 3437.50 ;
-C 77; N timesig-old9/4; B -4812.50 -3437.50 4812.50 3437.50 ;
+C 31; N scripts-thumb; B -1100.00 -1375.00 1100.00 1375.00 ;
+C 32; N scripts-sforzato; B -2474.99 -1375.00 2474.99 1375.00 ;
+C 33; N scripts-staccato; B -412.54 -412.54 412.54 412.54 ;
+C 34; N scripts-ustaccatissimo; B -550.05 -200.00 550.05 2750.06 ;
+C 35; N scripts-dstaccatissimo; B -550.05 -2750.06 550.05 200.00 ;
+C 36; N scripts-tenuto; B -1650.02 -192.52 1650.02 192.52 ;
+C 37; N scripts-umarcato; B -1375.00 0.00 1375.00 3025.02 ;
+C 38; N scripts-dmarcato; B -1375.00 -3025.02 1375.00 0.00 ;
+C 39; N scripts-open; B -1100.00 -1375.00 1100.00 1375.00 ;
+C 40; N scripts-stopped; B -1512.51 -1512.51 1512.51 1512.51 ;
+C 41; N scripts-upbow; B -1787.50 0.00 1787.50 5720.05 ;
+C 42; N scripts-downbow; B -2062.50 0.00 2062.50 3666.66 ;
+C 43; N scripts-reverseturn; B -3007.81 -1455.89 3007.81 1455.89 ;
+C 44; N scripts-turn; B -3007.81 -1455.89 3007.81 1455.89 ;
+C 45; N scripts-trill; B -2750.00 0.00 2750.00 6187.50 ;
+C 46; N scripts-upedalheel; B -1375.00 -1375.00 1375.00 1833.33 ;
+C 47; N scripts-dpedalheel; B -1375.00 -1833.33 1375.00 1375.00 ;
+C 48; N scripts-upedaltoe; B -1375.00 0.00 1375.00 4125.00 ;
+C 49; N scripts-dpedaltoe; B -1375.00 -4125.00 1375.00 0.00 ;
+C 50; N scripts-flageolet; B -1466.67 -1466.67 1466.67 1466.67 ;
+C 51; N scripts-trilelement; B -1833.33 -1375.00 718.64 1375.00 ;
+C 52; N scripts-prall; B -3109.31 -1375.00 3109.31 1375.00 ;
+C 53; N scripts-mordent; B -3109.31 -1375.00 3109.31 1375.00 ;
+C 54; N scripts-prallprall; B -4385.30 -1375.00 4385.30 1375.00 ;
+C 55; N scripts-prallmordent; B -4385.30 -1375.00 4385.30 1375.00 ;
+C 56; N scripts-upprall; B -4385.30 -1375.00 4385.30 1375.00 ;
+C 57; N scripts-downprall; B -4385.30 -1375.00 4385.30 1375.00 ;
+C 58; N flags-u3; B -137.51 -8428.77 3393.31 137.51 ;
+C 59; N flags-u4; B -137.51 -9803.77 3393.31 137.51 ;
+C 60; N flags-u5; B -137.51 -11866.27 3393.31 137.51 ;
+C 61; N flags-u6; B -137.51 -14616.27 3393.31 137.51 ;
+C 62; N flags-d3; B -137.51 -137.51 3755.11 8016.30 ;
+C 63; N flags-d4; B -137.51 -137.51 3755.11 8428.77 ;
+C 64; N flags-d5; B -137.51 -137.51 3755.11 10766.30 ;
+C 65; N flags-d6; B -137.51 -137.51 3755.11 12141.30 ;
+C 66; N clefs-alto; B -2750.00 -5500.00 10236.10 5500.00 ;
+C 67; N clefs-alto_change; B -2200.01 -4400.02 8188.93 4400.02 ;
+C 68; N clefs-bass; B -1375.00 -6875.00 9900.02 2750.00 ;
+C 69; N clefs-bass_change; B -1100.02 -5500.03 7920.04 2200.01 ;
+C 70; N clefs-violin; B -2396.44 -8250.00 10277.13 13750.00 ;
+C 71; N clefs-violin_change; B -2082.15 -6600.04 8056.75 11000.06 ;
+C 72; N timesig-C4/4; B -4950.01 -2750.00 4674.99 2750.00 ;
+C 73; N timesig-C2/2; B -4950.01 -3849.99 4674.99 3849.99 ;
+C 74; N timesig-old4/4; B -4812.50 -2062.50 4812.50 2062.50 ;
+C 75; N timesig-old2/2; B -4812.50 -2750.00 4812.50 2750.00 ;
+C 76; N timesig-old3/2; B -4812.50 -2062.50 4812.50 2062.50 ;
+C 77; N timesig-old6/4; B -4812.50 -3437.50 4812.50 3437.50 ;
+C 78; N timesig-old9/4; B -4812.50 -3437.50 4812.50 3437.50 ;
 EndCharMetrics
 EndFontMetrics
diff --git a/mf/out/feta13.afm b/mf/out/feta13.afm
index 7679a06b19..328de318be 100644
--- a/mf/out/feta13.afm
+++ b/mf/out/feta13.afm
@@ -32,52 +32,53 @@ C 27; N balls-2; B 0.00 -1787.52 4293.33 1787.52 ;
 C 28; N balls-2l; B -1073.33 -325.03 5366.67 325.03 ;
 C 29; N scripts-ufermata; B -4306.27 -243.77 4306.27 4712.55 ;
 C 30; N scripts-dfermata; B -4306.27 -4712.55 4306.27 243.77 ;
-C 31; N scripts-sforzato; B -2924.99 -1625.00 2924.99 1625.00 ;
-C 32; N scripts-staccato; B -487.55 -487.55 487.55 487.55 ;
-C 33; N scripts-ustaccatissimo; B -650.05 -200.00 650.05 3250.06 ;
-C 34; N scripts-dstaccatissimo; B -650.05 -3250.06 650.05 200.00 ;
-C 35; N scripts-tenuto; B -1950.03 -227.52 1950.03 227.52 ;
-C 36; N scripts-umarcato; B -1625.00 0.00 1625.00 3575.03 ;
-C 37; N scripts-dmarcato; B -1625.00 -3575.03 1625.00 0.00 ;
-C 38; N scripts-open; B -1300.00 -1625.00 1300.00 1625.00 ;
-C 39; N scripts-stopped; B -1787.52 -1787.52 1787.52 1787.52 ;
-C 40; N scripts-upbow; B -2112.50 0.00 2112.50 6760.04 ;
-C 41; N scripts-downbow; B -2437.50 0.00 2437.50 4333.31 ;
-C 42; N scripts-reverseturn; B -3554.69 -1720.60 3554.69 1720.60 ;
-C 43; N scripts-turn; B -3554.69 -1720.60 3554.69 1720.60 ;
-C 44; N scripts-trill; B -3250.00 0.00 3250.00 7312.50 ;
-C 45; N scripts-upedalheel; B -1625.00 -1625.00 1625.00 2166.67 ;
-C 46; N scripts-dpedalheel; B -1625.00 -2166.67 1625.00 1625.00 ;
-C 47; N scripts-upedaltoe; B -1625.00 0.00 1625.00 4875.00 ;
-C 48; N scripts-dpedaltoe; B -1625.00 -4875.00 1625.00 0.00 ;
-C 49; N scripts-flageolet; B -1733.34 -1733.34 1733.34 1733.34 ;
-C 50; N scripts-trilelement; B -2166.67 -1625.00 849.30 1625.00 ;
-C 51; N scripts-prall; B -3674.65 -1625.00 3674.65 1625.00 ;
-C 52; N scripts-mordent; B -3674.65 -1625.00 3674.65 1625.00 ;
-C 53; N scripts-prallprall; B -5182.63 -1625.00 5182.63 1625.00 ;
-C 54; N scripts-prallmordent; B -5182.63 -1625.00 5182.63 1625.00 ;
-C 55; N scripts-upprall; B -5182.63 -1625.00 5182.63 1625.00 ;
-C 56; N scripts-downprall; B -5182.63 -1625.00 5182.63 1625.00 ;
-C 57; N flags-u3; B -162.52 -9961.27 4010.27 162.52 ;
-C 58; N flags-u4; B -162.52 -11586.27 4010.27 162.52 ;
-C 59; N flags-u5; B -162.52 -14023.77 4010.27 162.52 ;
-C 60; N flags-u6; B -162.52 -17273.77 4010.27 162.52 ;
-C 61; N flags-d3; B -162.52 -162.52 4437.84 9473.80 ;
-C 62; N flags-d4; B -162.52 -162.52 4437.84 9961.27 ;
-C 63; N flags-d5; B -162.52 -162.52 4437.84 12723.80 ;
-C 64; N flags-d6; B -162.52 -162.52 4437.84 14348.80 ;
-C 65; N clefs-alto; B -3250.00 -6500.00 12097.24 6500.00 ;
-C 66; N clefs-alto_change; B -2600.00 -5200.01 9677.81 5200.01 ;
-C 67; N clefs-bass; B -1625.00 -8125.00 11700.03 3250.00 ;
-C 68; N clefs-bass_change; B -1300.02 -6500.02 9360.02 2600.00 ;
-C 69; N clefs-violin; B -2832.14 -9750.00 12145.70 16250.00 ;
-C 70; N clefs-violin_change; B -2460.72 -7800.02 9521.58 13000.03 ;
-C 71; N timesig-C4/4; B -5850.00 -3250.00 5525.00 3250.00 ;
-C 72; N timesig-C2/2; B -5850.00 -4549.99 5525.00 4549.99 ;
-C 73; N timesig-old4/4; B -5687.50 -2437.50 5687.50 2437.50 ;
-C 74; N timesig-old2/2; B -5687.50 -3250.00 5687.50 3250.00 ;
-C 75; N timesig-old3/2; B -5687.50 -2437.50 5687.50 2437.50 ;
-C 76; N timesig-old6/4; B -5687.50 -4062.50 5687.50 4062.50 ;
-C 77; N timesig-old9/4; B -5687.50 -4062.50 5687.50 4062.50 ;
+C 31; N scripts-thumb; B -1300.00 -1625.00 1300.00 1625.00 ;
+C 32; N scripts-sforzato; B -2924.99 -1625.00 2924.99 1625.00 ;
+C 33; N scripts-staccato; B -487.55 -487.55 487.55 487.55 ;
+C 34; N scripts-ustaccatissimo; B -650.05 -200.00 650.05 3250.06 ;
+C 35; N scripts-dstaccatissimo; B -650.05 -3250.06 650.05 200.00 ;
+C 36; N scripts-tenuto; B -1950.03 -227.52 1950.03 227.52 ;
+C 37; N scripts-umarcato; B -1625.00 0.00 1625.00 3575.03 ;
+C 38; N scripts-dmarcato; B -1625.00 -3575.03 1625.00 0.00 ;
+C 39; N scripts-open; B -1300.00 -1625.00 1300.00 1625.00 ;
+C 40; N scripts-stopped; B -1787.52 -1787.52 1787.52 1787.52 ;
+C 41; N scripts-upbow; B -2112.50 0.00 2112.50 6760.04 ;
+C 42; N scripts-downbow; B -2437.50 0.00 2437.50 4333.31 ;
+C 43; N scripts-reverseturn; B -3554.69 -1720.60 3554.69 1720.60 ;
+C 44; N scripts-turn; B -3554.69 -1720.60 3554.69 1720.60 ;
+C 45; N scripts-trill; B -3250.00 0.00 3250.00 7312.50 ;
+C 46; N scripts-upedalheel; B -1625.00 -1625.00 1625.00 2166.67 ;
+C 47; N scripts-dpedalheel; B -1625.00 -2166.67 1625.00 1625.00 ;
+C 48; N scripts-upedaltoe; B -1625.00 0.00 1625.00 4875.00 ;
+C 49; N scripts-dpedaltoe; B -1625.00 -4875.00 1625.00 0.00 ;
+C 50; N scripts-flageolet; B -1733.34 -1733.34 1733.34 1733.34 ;
+C 51; N scripts-trilelement; B -2166.67 -1625.00 849.30 1625.00 ;
+C 52; N scripts-prall; B -3674.65 -1625.00 3674.65 1625.00 ;
+C 53; N scripts-mordent; B -3674.65 -1625.00 3674.65 1625.00 ;
+C 54; N scripts-prallprall; B -5182.63 -1625.00 5182.63 1625.00 ;
+C 55; N scripts-prallmordent; B -5182.63 -1625.00 5182.63 1625.00 ;
+C 56; N scripts-upprall; B -5182.63 -1625.00 5182.63 1625.00 ;
+C 57; N scripts-downprall; B -5182.63 -1625.00 5182.63 1625.00 ;
+C 58; N flags-u3; B -162.52 -9961.27 4010.27 162.52 ;
+C 59; N flags-u4; B -162.52 -11586.27 4010.27 162.52 ;
+C 60; N flags-u5; B -162.52 -14023.77 4010.27 162.52 ;
+C 61; N flags-u6; B -162.52 -17273.77 4010.27 162.52 ;
+C 62; N flags-d3; B -162.52 -162.52 4437.84 9473.80 ;
+C 63; N flags-d4; B -162.52 -162.52 4437.84 9961.27 ;
+C 64; N flags-d5; B -162.52 -162.52 4437.84 12723.80 ;
+C 65; N flags-d6; B -162.52 -162.52 4437.84 14348.80 ;
+C 66; N clefs-alto; B -3250.00 -6500.00 12097.24 6500.00 ;
+C 67; N clefs-alto_change; B -2600.00 -5200.01 9677.81 5200.01 ;
+C 68; N clefs-bass; B -1625.00 -8125.00 11700.03 3250.00 ;
+C 69; N clefs-bass_change; B -1300.02 -6500.02 9360.02 2600.00 ;
+C 70; N clefs-violin; B -2832.14 -9750.00 12145.70 16250.00 ;
+C 71; N clefs-violin_change; B -2460.72 -7800.02 9521.58 13000.03 ;
+C 72; N timesig-C4/4; B -5850.00 -3250.00 5525.00 3250.00 ;
+C 73; N timesig-C2/2; B -5850.00 -4549.99 5525.00 4549.99 ;
+C 74; N timesig-old4/4; B -5687.50 -2437.50 5687.50 2437.50 ;
+C 75; N timesig-old2/2; B -5687.50 -3250.00 5687.50 3250.00 ;
+C 76; N timesig-old3/2; B -5687.50 -2437.50 5687.50 2437.50 ;
+C 77; N timesig-old6/4; B -5687.50 -4062.50 5687.50 4062.50 ;
+C 78; N timesig-old9/4; B -5687.50 -4062.50 5687.50 4062.50 ;
 EndCharMetrics
 EndFontMetrics
diff --git a/mf/out/feta16.afm b/mf/out/feta16.afm
index f1562888fd..3bf340009e 100644
--- a/mf/out/feta16.afm
+++ b/mf/out/feta16.afm
@@ -32,52 +32,53 @@ C 27; N balls-2; B 0.00 -2200.01 5284.09 2200.01 ;
 C 28; N balls-2l; B -1321.03 -400.02 6605.12 400.02 ;
 C 29; N scripts-ufermata; B -5300.02 -300.02 5300.02 5800.05 ;
 C 30; N scripts-dfermata; B -5300.02 -5800.05 5300.02 300.02 ;
-C 31; N scripts-sforzato; B -3599.98 -2000.00 3599.98 2000.00 ;
-C 32; N scripts-staccato; B -600.04 -600.04 600.04 600.04 ;
-C 33; N scripts-ustaccatissimo; B -800.05 -200.00 800.05 4000.06 ;
-C 34; N scripts-dstaccatissimo; B -800.05 -4000.06 800.05 200.00 ;
-C 35; N scripts-tenuto; B -2400.02 -280.01 2400.02 280.01 ;
-C 36; N scripts-umarcato; B -2000.00 0.00 2000.00 4400.02 ;
-C 37; N scripts-dmarcato; B -2000.00 -4400.02 2000.00 0.00 ;
-C 38; N scripts-open; B -1600.00 -2000.00 1600.00 2000.00 ;
-C 39; N scripts-stopped; B -2200.01 -2200.01 2200.01 2200.01 ;
-C 40; N scripts-upbow; B -2600.00 0.00 2600.00 8320.05 ;
-C 41; N scripts-downbow; B -3000.00 0.00 3000.00 5333.31 ;
-C 42; N scripts-reverseturn; B -4375.00 -2117.65 4375.00 2117.65 ;
-C 43; N scripts-turn; B -4375.00 -2117.65 4375.00 2117.65 ;
-C 44; N scripts-trill; B -4000.00 0.00 4000.00 9000.00 ;
-C 45; N scripts-upedalheel; B -2000.00 -2000.00 2000.00 2666.67 ;
-C 46; N scripts-dpedalheel; B -2000.00 -2666.67 2000.00 2000.00 ;
-C 47; N scripts-upedaltoe; B -2000.00 0.00 2000.00 6000.00 ;
-C 48; N scripts-dpedaltoe; B -2000.00 -6000.00 2000.00 0.00 ;
-C 49; N scripts-flageolet; B -2133.33 -2133.33 2133.33 2133.33 ;
-C 50; N scripts-trilelement; B -2666.67 -2000.00 1045.30 2000.00 ;
-C 51; N scripts-prall; B -4522.66 -2000.00 4522.66 2000.00 ;
-C 52; N scripts-mordent; B -4522.66 -2000.00 4522.66 2000.00 ;
-C 53; N scripts-prallprall; B -6378.65 -2000.00 6378.65 2000.00 ;
-C 54; N scripts-prallmordent; B -6378.65 -2000.00 6378.65 2000.00 ;
-C 55; N scripts-upprall; B -6378.65 -2000.00 6378.65 2000.00 ;
-C 56; N scripts-downprall; B -6378.65 -2000.00 6378.65 2000.00 ;
-C 57; N flags-u3; B -200.01 -12260.03 4935.68 200.01 ;
-C 58; N flags-u4; B -200.01 -14260.03 4935.68 200.01 ;
-C 59; N flags-u5; B -200.01 -17260.03 4935.68 200.01 ;
-C 60; N flags-u6; B -200.01 -21260.03 4935.68 200.01 ;
-C 61; N flags-d3; B -200.01 -200.01 5461.91 11660.05 ;
-C 62; N flags-d4; B -200.01 -200.01 5461.91 12260.03 ;
-C 63; N flags-d5; B -200.01 -200.01 5461.91 15660.05 ;
-C 64; N flags-d6; B -200.01 -200.01 5461.91 17660.05 ;
-C 65; N clefs-alto; B -4000.00 -8000.00 14888.90 8000.00 ;
-C 66; N clefs-alto_change; B -3200.01 -6400.02 11911.18 6400.02 ;
-C 67; N clefs-bass; B -2000.00 -10000.00 14400.02 4000.00 ;
-C 68; N clefs-bass_change; B -1600.04 -8000.03 11520.03 3200.01 ;
-C 69; N clefs-violin; B -3485.72 -12000.00 14948.55 20000.00 ;
-C 70; N clefs-violin_change; B -3028.58 -9600.04 11718.89 16000.06 ;
-C 71; N timesig-C4/4; B -7200.01 -4000.00 6799.99 4000.00 ;
-C 72; N timesig-C2/2; B -7200.01 -5599.98 6799.99 5599.98 ;
-C 73; N timesig-old4/4; B -7000.00 -3000.00 7000.00 3000.00 ;
-C 74; N timesig-old2/2; B -7000.00 -4000.00 7000.00 4000.00 ;
-C 75; N timesig-old3/2; B -7000.00 -3000.00 7000.00 3000.00 ;
-C 76; N timesig-old6/4; B -7000.00 -5000.00 7000.00 5000.00 ;
-C 77; N timesig-old9/4; B -7000.00 -5000.00 7000.00 5000.00 ;
+C 31; N scripts-thumb; B -1600.00 -2000.00 1600.00 2000.00 ;
+C 32; N scripts-sforzato; B -3599.98 -2000.00 3599.98 2000.00 ;
+C 33; N scripts-staccato; B -600.04 -600.04 600.04 600.04 ;
+C 34; N scripts-ustaccatissimo; B -800.05 -200.00 800.05 4000.06 ;
+C 35; N scripts-dstaccatissimo; B -800.05 -4000.06 800.05 200.00 ;
+C 36; N scripts-tenuto; B -2400.02 -280.01 2400.02 280.01 ;
+C 37; N scripts-umarcato; B -2000.00 0.00 2000.00 4400.02 ;
+C 38; N scripts-dmarcato; B -2000.00 -4400.02 2000.00 0.00 ;
+C 39; N scripts-open; B -1600.00 -2000.00 1600.00 2000.00 ;
+C 40; N scripts-stopped; B -2200.01 -2200.01 2200.01 2200.01 ;
+C 41; N scripts-upbow; B -2600.00 0.00 2600.00 8320.05 ;
+C 42; N scripts-downbow; B -3000.00 0.00 3000.00 5333.31 ;
+C 43; N scripts-reverseturn; B -4375.00 -2117.65 4375.00 2117.65 ;
+C 44; N scripts-turn; B -4375.00 -2117.65 4375.00 2117.65 ;
+C 45; N scripts-trill; B -4000.00 0.00 4000.00 9000.00 ;
+C 46; N scripts-upedalheel; B -2000.00 -2000.00 2000.00 2666.67 ;
+C 47; N scripts-dpedalheel; B -2000.00 -2666.67 2000.00 2000.00 ;
+C 48; N scripts-upedaltoe; B -2000.00 0.00 2000.00 6000.00 ;
+C 49; N scripts-dpedaltoe; B -2000.00 -6000.00 2000.00 0.00 ;
+C 50; N scripts-flageolet; B -2133.33 -2133.33 2133.33 2133.33 ;
+C 51; N scripts-trilelement; B -2666.67 -2000.00 1045.30 2000.00 ;
+C 52; N scripts-prall; B -4522.66 -2000.00 4522.66 2000.00 ;
+C 53; N scripts-mordent; B -4522.66 -2000.00 4522.66 2000.00 ;
+C 54; N scripts-prallprall; B -6378.65 -2000.00 6378.65 2000.00 ;
+C 55; N scripts-prallmordent; B -6378.65 -2000.00 6378.65 2000.00 ;
+C 56; N scripts-upprall; B -6378.65 -2000.00 6378.65 2000.00 ;
+C 57; N scripts-downprall; B -6378.65 -2000.00 6378.65 2000.00 ;
+C 58; N flags-u3; B -200.01 -12260.03 4935.68 200.01 ;
+C 59; N flags-u4; B -200.01 -14260.03 4935.68 200.01 ;
+C 60; N flags-u5; B -200.01 -17260.03 4935.68 200.01 ;
+C 61; N flags-u6; B -200.01 -21260.03 4935.68 200.01 ;
+C 62; N flags-d3; B -200.01 -200.01 5461.91 11660.05 ;
+C 63; N flags-d4; B -200.01 -200.01 5461.91 12260.03 ;
+C 64; N flags-d5; B -200.01 -200.01 5461.91 15660.05 ;
+C 65; N flags-d6; B -200.01 -200.01 5461.91 17660.05 ;
+C 66; N clefs-alto; B -4000.00 -8000.00 14888.90 8000.00 ;
+C 67; N clefs-alto_change; B -3200.01 -6400.02 11911.18 6400.02 ;
+C 68; N clefs-bass; B -2000.00 -10000.00 14400.02 4000.00 ;
+C 69; N clefs-bass_change; B -1600.04 -8000.03 11520.03 3200.01 ;
+C 70; N clefs-violin; B -3485.72 -12000.00 14948.55 20000.00 ;
+C 71; N clefs-violin_change; B -3028.58 -9600.04 11718.89 16000.06 ;
+C 72; N timesig-C4/4; B -7200.01 -4000.00 6799.99 4000.00 ;
+C 73; N timesig-C2/2; B -7200.01 -5599.98 6799.99 5599.98 ;
+C 74; N timesig-old4/4; B -7000.00 -3000.00 7000.00 3000.00 ;
+C 75; N timesig-old2/2; B -7000.00 -4000.00 7000.00 4000.00 ;
+C 76; N timesig-old3/2; B -7000.00 -3000.00 7000.00 3000.00 ;
+C 77; N timesig-old6/4; B -7000.00 -5000.00 7000.00 5000.00 ;
+C 78; N timesig-old9/4; B -7000.00 -5000.00 7000.00 5000.00 ;
 EndCharMetrics
 EndFontMetrics
diff --git a/mf/out/feta19.afm b/mf/out/feta19.afm
index e1f742fdbd..c3eb6c4ba8 100644
--- a/mf/out/feta19.afm
+++ b/mf/out/feta19.afm
@@ -32,52 +32,53 @@ C 27; N balls-2; B 0.00 -2612.52 6274.89 2612.52 ;
 C 28; N balls-2l; B -1568.73 -475.04 7843.61 475.04 ;
 C 29; N scripts-ufermata; B -6293.78 -356.28 6293.78 6887.57 ;
 C 30; N scripts-dfermata; B -6293.78 -6887.57 6293.78 356.28 ;
-C 31; N scripts-sforzato; B -4274.98 -2375.00 4274.98 2375.00 ;
-C 32; N scripts-staccato; B -712.55 -712.55 712.55 712.55 ;
-C 33; N scripts-ustaccatissimo; B -950.07 -200.00 950.07 4750.09 ;
-C 34; N scripts-dstaccatissimo; B -950.07 -4750.09 950.07 200.00 ;
-C 35; N scripts-tenuto; B -2850.04 -332.53 2850.04 332.53 ;
-C 36; N scripts-umarcato; B -2375.00 0.00 2375.00 5225.04 ;
-C 37; N scripts-dmarcato; B -2375.00 -5225.04 2375.00 0.00 ;
-C 38; N scripts-open; B -1900.01 -2375.00 1900.01 2375.00 ;
-C 39; N scripts-stopped; B -2612.52 -2612.52 2612.52 2612.52 ;
-C 40; N scripts-upbow; B -3087.51 0.00 3087.51 9880.07 ;
-C 41; N scripts-downbow; B -3562.50 0.00 3562.50 6333.31 ;
-C 42; N scripts-reverseturn; B -5195.31 -2514.71 5195.31 2514.71 ;
-C 43; N scripts-turn; B -5195.31 -2514.71 5195.31 2514.71 ;
-C 44; N scripts-trill; B -4750.00 0.00 4750.00 10687.50 ;
-C 45; N scripts-upedalheel; B -2375.00 -2375.00 2375.00 3166.67 ;
-C 46; N scripts-dpedalheel; B -2375.00 -3166.67 2375.00 2375.00 ;
-C 47; N scripts-upedaltoe; B -2375.00 0.00 2375.00 7125.00 ;
-C 48; N scripts-dpedaltoe; B -2375.00 -7125.00 2375.00 0.00 ;
-C 49; N scripts-flageolet; B -2533.34 -2533.34 2533.34 2533.34 ;
-C 50; N scripts-trilelement; B -3166.67 -2375.00 1241.30 2375.00 ;
-C 51; N scripts-prall; B -5370.65 -2375.00 5370.65 2375.00 ;
-C 52; N scripts-mordent; B -5370.65 -2375.00 5370.65 2375.00 ;
-C 53; N scripts-prallprall; B -7574.63 -2375.00 7574.63 2375.00 ;
-C 54; N scripts-prallmordent; B -7574.63 -2375.00 7574.63 2375.00 ;
-C 55; N scripts-upprall; B -7574.63 -2375.00 7574.63 2375.00 ;
-C 56; N scripts-downprall; B -7574.63 -2375.00 7574.63 2375.00 ;
-C 57; N flags-u3; B -237.52 -14558.78 5861.15 237.52 ;
-C 58; N flags-u4; B -237.52 -16933.78 5861.15 237.52 ;
-C 59; N flags-u5; B -237.52 -20496.28 5861.15 237.52 ;
-C 60; N flags-u6; B -237.52 -25246.28 5861.15 237.52 ;
-C 61; N flags-d3; B -237.52 -237.52 6486.07 13846.31 ;
-C 62; N flags-d4; B -237.52 -237.52 6486.07 14558.78 ;
-C 63; N flags-d5; B -237.52 -237.52 6486.07 18596.31 ;
-C 64; N flags-d6; B -237.52 -237.52 6486.07 20971.31 ;
-C 65; N clefs-alto; B -4750.00 -9500.00 17680.59 9500.00 ;
-C 66; N clefs-alto_change; B -3800.02 -7600.04 14144.50 7600.04 ;
-C 67; N clefs-bass; B -2375.00 -11875.00 17100.04 4750.00 ;
-C 68; N clefs-bass_change; B -1900.04 -9500.05 13680.05 3800.02 ;
-C 69; N clefs-violin; B -4139.30 -14250.00 17751.40 23750.00 ;
-C 70; N clefs-violin_change; B -3596.45 -11400.05 13916.18 19000.09 ;
-C 71; N timesig-C4/4; B -8550.02 -4750.00 8074.98 4750.00 ;
-C 72; N timesig-C2/2; B -8550.02 -6649.98 8074.98 6649.98 ;
-C 73; N timesig-old4/4; B -8312.50 -3562.50 8312.50 3562.50 ;
-C 74; N timesig-old2/2; B -8312.50 -4750.00 8312.50 4750.00 ;
-C 75; N timesig-old3/2; B -8312.50 -3562.50 8312.50 3562.50 ;
-C 76; N timesig-old6/4; B -8312.50 -5937.50 8312.50 5937.50 ;
-C 77; N timesig-old9/4; B -8312.50 -5937.50 8312.50 5937.50 ;
+C 31; N scripts-thumb; B -1900.01 -2375.00 1900.01 2375.00 ;
+C 32; N scripts-sforzato; B -4274.98 -2375.00 4274.98 2375.00 ;
+C 33; N scripts-staccato; B -712.55 -712.55 712.55 712.55 ;
+C 34; N scripts-ustaccatissimo; B -950.07 -200.00 950.07 4750.09 ;
+C 35; N scripts-dstaccatissimo; B -950.07 -4750.09 950.07 200.00 ;
+C 36; N scripts-tenuto; B -2850.04 -332.53 2850.04 332.53 ;
+C 37; N scripts-umarcato; B -2375.00 0.00 2375.00 5225.04 ;
+C 38; N scripts-dmarcato; B -2375.00 -5225.04 2375.00 0.00 ;
+C 39; N scripts-open; B -1900.01 -2375.00 1900.01 2375.00 ;
+C 40; N scripts-stopped; B -2612.52 -2612.52 2612.52 2612.52 ;
+C 41; N scripts-upbow; B -3087.51 0.00 3087.51 9880.07 ;
+C 42; N scripts-downbow; B -3562.50 0.00 3562.50 6333.31 ;
+C 43; N scripts-reverseturn; B -5195.31 -2514.71 5195.31 2514.71 ;
+C 44; N scripts-turn; B -5195.31 -2514.71 5195.31 2514.71 ;
+C 45; N scripts-trill; B -4750.00 0.00 4750.00 10687.50 ;
+C 46; N scripts-upedalheel; B -2375.00 -2375.00 2375.00 3166.67 ;
+C 47; N scripts-dpedalheel; B -2375.00 -3166.67 2375.00 2375.00 ;
+C 48; N scripts-upedaltoe; B -2375.00 0.00 2375.00 7125.00 ;
+C 49; N scripts-dpedaltoe; B -2375.00 -7125.00 2375.00 0.00 ;
+C 50; N scripts-flageolet; B -2533.34 -2533.34 2533.34 2533.34 ;
+C 51; N scripts-trilelement; B -3166.67 -2375.00 1241.30 2375.00 ;
+C 52; N scripts-prall; B -5370.65 -2375.00 5370.65 2375.00 ;
+C 53; N scripts-mordent; B -5370.65 -2375.00 5370.65 2375.00 ;
+C 54; N scripts-prallprall; B -7574.63 -2375.00 7574.63 2375.00 ;
+C 55; N scripts-prallmordent; B -7574.63 -2375.00 7574.63 2375.00 ;
+C 56; N scripts-upprall; B -7574.63 -2375.00 7574.63 2375.00 ;
+C 57; N scripts-downprall; B -7574.63 -2375.00 7574.63 2375.00 ;
+C 58; N flags-u3; B -237.52 -14558.78 5861.15 237.52 ;
+C 59; N flags-u4; B -237.52 -16933.78 5861.15 237.52 ;
+C 60; N flags-u5; B -237.52 -20496.28 5861.15 237.52 ;
+C 61; N flags-u6; B -237.52 -25246.28 5861.15 237.52 ;
+C 62; N flags-d3; B -237.52 -237.52 6486.07 13846.31 ;
+C 63; N flags-d4; B -237.52 -237.52 6486.07 14558.78 ;
+C 64; N flags-d5; B -237.52 -237.52 6486.07 18596.31 ;
+C 65; N flags-d6; B -237.52 -237.52 6486.07 20971.31 ;
+C 66; N clefs-alto; B -4750.00 -9500.00 17680.59 9500.00 ;
+C 67; N clefs-alto_change; B -3800.02 -7600.04 14144.50 7600.04 ;
+C 68; N clefs-bass; B -2375.00 -11875.00 17100.04 4750.00 ;
+C 69; N clefs-bass_change; B -1900.04 -9500.05 13680.05 3800.02 ;
+C 70; N clefs-violin; B -4139.30 -14250.00 17751.40 23750.00 ;
+C 71; N clefs-violin_change; B -3596.45 -11400.05 13916.18 19000.09 ;
+C 72; N timesig-C4/4; B -8550.02 -4750.00 8074.98 4750.00 ;
+C 73; N timesig-C2/2; B -8550.02 -6649.98 8074.98 6649.98 ;
+C 74; N timesig-old4/4; B -8312.50 -3562.50 8312.50 3562.50 ;
+C 75; N timesig-old2/2; B -8312.50 -4750.00 8312.50 4750.00 ;
+C 76; N timesig-old3/2; B -8312.50 -3562.50 8312.50 3562.50 ;
+C 77; N timesig-old6/4; B -8312.50 -5937.50 8312.50 5937.50 ;
+C 78; N timesig-old9/4; B -8312.50 -5937.50 8312.50 5937.50 ;
 EndCharMetrics
 EndFontMetrics
diff --git a/mf/out/feta20.afm b/mf/out/feta20.afm
index 7b7bb8be82..ce54077bb9 100644
--- a/mf/out/feta20.afm
+++ b/mf/out/feta20.afm
@@ -32,52 +32,53 @@ C 27; N balls-2; B 0.00 -2750.02 6605.15 2750.02 ;
 C 28; N balls-2l; B -1651.29 -500.03 8256.44 500.03 ;
 C 29; N scripts-ufermata; B -6625.03 -375.03 6625.03 7250.06 ;
 C 30; N scripts-dfermata; B -6625.03 -7250.06 6625.03 375.03 ;
-C 31; N scripts-sforzato; B -4499.97 -2500.00 4499.97 2500.00 ;
-C 32; N scripts-staccato; B -750.05 -750.05 750.05 750.05 ;
-C 33; N scripts-ustaccatissimo; B -1000.06 -200.00 1000.06 5000.08 ;
-C 34; N scripts-dstaccatissimo; B -1000.06 -5000.08 1000.06 200.00 ;
-C 35; N scripts-tenuto; B -3000.03 -350.02 3000.03 350.02 ;
-C 36; N scripts-umarcato; B -2500.00 0.00 2500.00 5500.03 ;
-C 37; N scripts-dmarcato; B -2500.00 -5500.03 2500.00 0.00 ;
-C 38; N scripts-open; B -2000.00 -2500.00 2000.00 2500.00 ;
-C 39; N scripts-stopped; B -2750.02 -2750.02 2750.02 2750.02 ;
-C 40; N scripts-upbow; B -3250.02 0.00 3250.02 10400.07 ;
-C 41; N scripts-downbow; B -3750.00 0.00 3750.00 6666.64 ;
-C 42; N scripts-reverseturn; B -5468.75 -2647.06 5468.75 2647.06 ;
-C 43; N scripts-turn; B -5468.75 -2647.06 5468.75 2647.06 ;
-C 44; N scripts-trill; B -5000.00 0.00 5000.00 11250.00 ;
-C 45; N scripts-upedalheel; B -2500.00 -2500.00 2500.00 3333.33 ;
-C 46; N scripts-dpedalheel; B -2500.00 -3333.33 2500.00 2500.00 ;
-C 47; N scripts-upedaltoe; B -2500.00 0.00 2500.00 7500.00 ;
-C 48; N scripts-dpedaltoe; B -2500.00 -7500.00 2500.00 0.00 ;
-C 49; N scripts-flageolet; B -2666.67 -2666.67 2666.67 2666.67 ;
-C 50; N scripts-trilelement; B -3333.33 -2500.00 1306.64 2500.00 ;
-C 51; N scripts-prall; B -5653.30 -2500.00 5653.30 2500.00 ;
-C 52; N scripts-mordent; B -5653.30 -2500.00 5653.30 2500.00 ;
-C 53; N scripts-prallprall; B -7973.28 -2500.00 7973.28 2500.00 ;
-C 54; N scripts-prallmordent; B -7973.28 -2500.00 7973.28 2500.00 ;
-C 55; N scripts-upprall; B -7973.28 -2500.00 7973.28 2500.00 ;
-C 56; N scripts-downprall; B -7973.28 -2500.00 7973.28 2500.00 ;
-C 57; N flags-u3; B -250.02 -15325.03 6169.62 250.02 ;
-C 58; N flags-u4; B -250.02 -17825.03 6169.62 250.02 ;
-C 59; N flags-u5; B -250.02 -21575.03 6169.62 250.02 ;
-C 60; N flags-u6; B -250.02 -26575.03 6169.62 250.02 ;
-C 61; N flags-d3; B -250.02 -250.02 6827.44 14575.06 ;
-C 62; N flags-d4; B -250.02 -250.02 6827.44 15325.03 ;
-C 63; N flags-d5; B -250.02 -250.02 6827.44 19575.06 ;
-C 64; N flags-d6; B -250.02 -250.02 6827.44 22075.06 ;
-C 65; N clefs-alto; B -5000.00 -10000.00 18611.10 10000.00 ;
-C 66; N clefs-alto_change; B -4000.02 -8000.03 14888.92 8000.03 ;
-C 67; N clefs-bass; B -2500.00 -12500.00 18000.03 5000.00 ;
-C 68; N clefs-bass_change; B -2000.05 -10000.05 14400.04 4000.02 ;
-C 69; N clefs-violin; B -4357.15 -15000.00 18685.68 25000.00 ;
-C 70; N clefs-violin_change; B -3785.74 -12000.05 14648.60 20000.08 ;
-C 71; N timesig-C4/4; B -9000.02 -5000.00 8499.98 5000.00 ;
-C 72; N timesig-C2/2; B -9000.02 -6999.97 8499.98 6999.97 ;
-C 73; N timesig-old4/4; B -8750.00 -3750.00 8750.00 3750.00 ;
-C 74; N timesig-old2/2; B -8750.00 -5000.00 8750.00 5000.00 ;
-C 75; N timesig-old3/2; B -8750.00 -3750.00 8750.00 3750.00 ;
-C 76; N timesig-old6/4; B -8750.00 -6250.00 8750.00 6250.00 ;
-C 77; N timesig-old9/4; B -8750.00 -6250.00 8750.00 6250.00 ;
+C 31; N scripts-thumb; B -2000.00 -2500.00 2000.00 2500.00 ;
+C 32; N scripts-sforzato; B -4499.97 -2500.00 4499.97 2500.00 ;
+C 33; N scripts-staccato; B -750.05 -750.05 750.05 750.05 ;
+C 34; N scripts-ustaccatissimo; B -1000.06 -200.00 1000.06 5000.08 ;
+C 35; N scripts-dstaccatissimo; B -1000.06 -5000.08 1000.06 200.00 ;
+C 36; N scripts-tenuto; B -3000.03 -350.02 3000.03 350.02 ;
+C 37; N scripts-umarcato; B -2500.00 0.00 2500.00 5500.03 ;
+C 38; N scripts-dmarcato; B -2500.00 -5500.03 2500.00 0.00 ;
+C 39; N scripts-open; B -2000.00 -2500.00 2000.00 2500.00 ;
+C 40; N scripts-stopped; B -2750.02 -2750.02 2750.02 2750.02 ;
+C 41; N scripts-upbow; B -3250.02 0.00 3250.02 10400.07 ;
+C 42; N scripts-downbow; B -3750.00 0.00 3750.00 6666.64 ;
+C 43; N scripts-reverseturn; B -5468.75 -2647.06 5468.75 2647.06 ;
+C 44; N scripts-turn; B -5468.75 -2647.06 5468.75 2647.06 ;
+C 45; N scripts-trill; B -5000.00 0.00 5000.00 11250.00 ;
+C 46; N scripts-upedalheel; B -2500.00 -2500.00 2500.00 3333.33 ;
+C 47; N scripts-dpedalheel; B -2500.00 -3333.33 2500.00 2500.00 ;
+C 48; N scripts-upedaltoe; B -2500.00 0.00 2500.00 7500.00 ;
+C 49; N scripts-dpedaltoe; B -2500.00 -7500.00 2500.00 0.00 ;
+C 50; N scripts-flageolet; B -2666.67 -2666.67 2666.67 2666.67 ;
+C 51; N scripts-trilelement; B -3333.33 -2500.00 1306.64 2500.00 ;
+C 52; N scripts-prall; B -5653.30 -2500.00 5653.30 2500.00 ;
+C 53; N scripts-mordent; B -5653.30 -2500.00 5653.30 2500.00 ;
+C 54; N scripts-prallprall; B -7973.28 -2500.00 7973.28 2500.00 ;
+C 55; N scripts-prallmordent; B -7973.28 -2500.00 7973.28 2500.00 ;
+C 56; N scripts-upprall; B -7973.28 -2500.00 7973.28 2500.00 ;
+C 57; N scripts-downprall; B -7973.28 -2500.00 7973.28 2500.00 ;
+C 58; N flags-u3; B -250.02 -15325.03 6169.62 250.02 ;
+C 59; N flags-u4; B -250.02 -17825.03 6169.62 250.02 ;
+C 60; N flags-u5; B -250.02 -21575.03 6169.62 250.02 ;
+C 61; N flags-u6; B -250.02 -26575.03 6169.62 250.02 ;
+C 62; N flags-d3; B -250.02 -250.02 6827.44 14575.06 ;
+C 63; N flags-d4; B -250.02 -250.02 6827.44 15325.03 ;
+C 64; N flags-d5; B -250.02 -250.02 6827.44 19575.06 ;
+C 65; N flags-d6; B -250.02 -250.02 6827.44 22075.06 ;
+C 66; N clefs-alto; B -5000.00 -10000.00 18611.10 10000.00 ;
+C 67; N clefs-alto_change; B -4000.02 -8000.03 14888.92 8000.03 ;
+C 68; N clefs-bass; B -2500.00 -12500.00 18000.03 5000.00 ;
+C 69; N clefs-bass_change; B -2000.05 -10000.05 14400.04 4000.02 ;
+C 70; N clefs-violin; B -4357.15 -15000.00 18685.68 25000.00 ;
+C 71; N clefs-violin_change; B -3785.74 -12000.05 14648.60 20000.08 ;
+C 72; N timesig-C4/4; B -9000.02 -5000.00 8499.98 5000.00 ;
+C 73; N timesig-C2/2; B -9000.02 -6999.97 8499.98 6999.97 ;
+C 74; N timesig-old4/4; B -8750.00 -3750.00 8750.00 3750.00 ;
+C 75; N timesig-old2/2; B -8750.00 -5000.00 8750.00 5000.00 ;
+C 76; N timesig-old3/2; B -8750.00 -3750.00 8750.00 3750.00 ;
+C 77; N timesig-old6/4; B -8750.00 -6250.00 8750.00 6250.00 ;
+C 78; N timesig-old9/4; B -8750.00 -6250.00 8750.00 6250.00 ;
 EndCharMetrics
 EndFontMetrics
diff --git a/mf/out/feta23.afm b/mf/out/feta23.afm
index f5b55de4ed..ea84da9de9 100644
--- a/mf/out/feta23.afm
+++ b/mf/out/feta23.afm
@@ -32,52 +32,53 @@ C 27; N balls-2; B 0.00 -3093.77 7430.80 3093.77 ;
 C 28; N balls-2l; B -1857.70 -562.53 9288.50 562.53 ;
 C 29; N scripts-ufermata; B -7453.16 -421.90 7453.16 8156.31 ;
 C 30; N scripts-dfermata; B -7453.16 -8156.31 7453.16 421.90 ;
-C 31; N scripts-sforzato; B -5062.47 -2812.50 5062.47 2812.50 ;
-C 32; N scripts-staccato; B -843.80 -843.80 843.80 843.80 ;
-C 33; N scripts-ustaccatissimo; B -1125.06 -200.00 1125.06 5625.08 ;
-C 34; N scripts-dstaccatissimo; B -1125.06 -5625.08 1125.06 200.00 ;
-C 35; N scripts-tenuto; B -3375.03 -393.77 3375.03 393.77 ;
-C 36; N scripts-umarcato; B -2812.50 0.00 2812.50 6187.53 ;
-C 37; N scripts-dmarcato; B -2812.50 -6187.53 2812.50 0.00 ;
-C 38; N scripts-open; B -2250.00 -2812.50 2250.00 2812.50 ;
-C 39; N scripts-stopped; B -3093.77 -3093.77 3093.77 3093.77 ;
-C 40; N scripts-upbow; B -3656.27 0.00 3656.27 11700.07 ;
-C 41; N scripts-downbow; B -4218.75 0.00 4218.75 7499.97 ;
-C 42; N scripts-reverseturn; B -6152.34 -2977.94 6152.34 2977.94 ;
-C 43; N scripts-turn; B -6152.34 -2977.94 6152.34 2977.94 ;
-C 44; N scripts-trill; B -5625.00 0.00 5625.00 12656.25 ;
-C 45; N scripts-upedalheel; B -2812.50 -2812.50 2812.50 3750.00 ;
-C 46; N scripts-dpedalheel; B -2812.50 -3750.00 2812.50 2812.50 ;
-C 47; N scripts-upedaltoe; B -2812.50 0.00 2812.50 8437.50 ;
-C 48; N scripts-dpedaltoe; B -2812.50 -8437.50 2812.50 0.00 ;
-C 49; N scripts-flageolet; B -3000.00 -3000.00 3000.00 3000.00 ;
-C 50; N scripts-trilelement; B -3750.00 -2812.50 1469.97 2812.50 ;
-C 51; N scripts-prall; B -6359.99 -2812.50 6359.99 2812.50 ;
-C 52; N scripts-mordent; B -6359.99 -2812.50 6359.99 2812.50 ;
-C 53; N scripts-prallprall; B -8969.97 -2812.50 8969.97 2812.50 ;
-C 54; N scripts-prallmordent; B -8969.97 -2812.50 8969.97 2812.50 ;
-C 55; N scripts-upprall; B -8969.97 -2812.50 8969.97 2812.50 ;
-C 56; N scripts-downprall; B -8969.97 -2812.50 8969.97 2812.50 ;
-C 57; N flags-u3; B -281.27 -17240.65 6940.84 281.27 ;
-C 58; N flags-u4; B -281.27 -20053.15 6940.84 281.27 ;
-C 59; N flags-u5; B -281.27 -24271.90 6940.84 281.27 ;
-C 60; N flags-u6; B -281.27 -29896.90 6940.84 281.27 ;
-C 61; N flags-d3; B -281.27 -281.27 7680.88 16396.93 ;
-C 62; N flags-d4; B -281.27 -281.27 7680.88 17240.65 ;
-C 63; N flags-d5; B -281.27 -281.27 7680.88 22021.93 ;
-C 64; N flags-d6; B -281.27 -281.27 7680.88 24834.43 ;
-C 65; N clefs-alto; B -5625.00 -11250.00 20937.50 11250.00 ;
-C 66; N clefs-alto_change; B -4500.02 -9000.03 16750.08 9000.03 ;
-C 67; N clefs-bass; B -2812.50 -14062.50 20250.03 5625.00 ;
-C 68; N clefs-bass_change; B -2250.05 -11250.05 16200.04 4500.02 ;
-C 69; N clefs-violin; B -4901.80 -16875.00 21021.40 28125.00 ;
-C 70; N clefs-violin_change; B -4258.94 -13500.05 16479.68 22500.08 ;
-C 71; N timesig-C4/4; B -10125.02 -5625.00 9562.48 5625.00 ;
-C 72; N timesig-C2/2; B -10125.02 -7874.97 9562.48 7874.97 ;
-C 73; N timesig-old4/4; B -9843.75 -4218.75 9843.75 4218.75 ;
-C 74; N timesig-old2/2; B -9843.75 -5625.00 9843.75 5625.00 ;
-C 75; N timesig-old3/2; B -9843.75 -4218.75 9843.75 4218.75 ;
-C 76; N timesig-old6/4; B -9843.75 -7031.25 9843.75 7031.25 ;
-C 77; N timesig-old9/4; B -9843.75 -7031.25 9843.75 7031.25 ;
+C 31; N scripts-thumb; B -2250.00 -2812.50 2250.00 2812.50 ;
+C 32; N scripts-sforzato; B -5062.47 -2812.50 5062.47 2812.50 ;
+C 33; N scripts-staccato; B -843.80 -843.80 843.80 843.80 ;
+C 34; N scripts-ustaccatissimo; B -1125.06 -200.00 1125.06 5625.08 ;
+C 35; N scripts-dstaccatissimo; B -1125.06 -5625.08 1125.06 200.00 ;
+C 36; N scripts-tenuto; B -3375.03 -393.77 3375.03 393.77 ;
+C 37; N scripts-umarcato; B -2812.50 0.00 2812.50 6187.53 ;
+C 38; N scripts-dmarcato; B -2812.50 -6187.53 2812.50 0.00 ;
+C 39; N scripts-open; B -2250.00 -2812.50 2250.00 2812.50 ;
+C 40; N scripts-stopped; B -3093.77 -3093.77 3093.77 3093.77 ;
+C 41; N scripts-upbow; B -3656.27 0.00 3656.27 11700.07 ;
+C 42; N scripts-downbow; B -4218.75 0.00 4218.75 7499.97 ;
+C 43; N scripts-reverseturn; B -6152.34 -2977.94 6152.34 2977.94 ;
+C 44; N scripts-turn; B -6152.34 -2977.94 6152.34 2977.94 ;
+C 45; N scripts-trill; B -5625.00 0.00 5625.00 12656.25 ;
+C 46; N scripts-upedalheel; B -2812.50 -2812.50 2812.50 3750.00 ;
+C 47; N scripts-dpedalheel; B -2812.50 -3750.00 2812.50 2812.50 ;
+C 48; N scripts-upedaltoe; B -2812.50 0.00 2812.50 8437.50 ;
+C 49; N scripts-dpedaltoe; B -2812.50 -8437.50 2812.50 0.00 ;
+C 50; N scripts-flageolet; B -3000.00 -3000.00 3000.00 3000.00 ;
+C 51; N scripts-trilelement; B -3750.00 -2812.50 1469.97 2812.50 ;
+C 52; N scripts-prall; B -6359.99 -2812.50 6359.99 2812.50 ;
+C 53; N scripts-mordent; B -6359.99 -2812.50 6359.99 2812.50 ;
+C 54; N scripts-prallprall; B -8969.97 -2812.50 8969.97 2812.50 ;
+C 55; N scripts-prallmordent; B -8969.97 -2812.50 8969.97 2812.50 ;
+C 56; N scripts-upprall; B -8969.97 -2812.50 8969.97 2812.50 ;
+C 57; N scripts-downprall; B -8969.97 -2812.50 8969.97 2812.50 ;
+C 58; N flags-u3; B -281.27 -17240.65 6940.84 281.27 ;
+C 59; N flags-u4; B -281.27 -20053.15 6940.84 281.27 ;
+C 60; N flags-u5; B -281.27 -24271.90 6940.84 281.27 ;
+C 61; N flags-u6; B -281.27 -29896.90 6940.84 281.27 ;
+C 62; N flags-d3; B -281.27 -281.27 7680.88 16396.93 ;
+C 63; N flags-d4; B -281.27 -281.27 7680.88 17240.65 ;
+C 64; N flags-d5; B -281.27 -281.27 7680.88 22021.93 ;
+C 65; N flags-d6; B -281.27 -281.27 7680.88 24834.43 ;
+C 66; N clefs-alto; B -5625.00 -11250.00 20937.50 11250.00 ;
+C 67; N clefs-alto_change; B -4500.02 -9000.03 16750.08 9000.03 ;
+C 68; N clefs-bass; B -2812.50 -14062.50 20250.03 5625.00 ;
+C 69; N clefs-bass_change; B -2250.05 -11250.05 16200.04 4500.02 ;
+C 70; N clefs-violin; B -4901.80 -16875.00 21021.40 28125.00 ;
+C 71; N clefs-violin_change; B -4258.94 -13500.05 16479.68 22500.08 ;
+C 72; N timesig-C4/4; B -10125.02 -5625.00 9562.48 5625.00 ;
+C 73; N timesig-C2/2; B -10125.02 -7874.97 9562.48 7874.97 ;
+C 74; N timesig-old4/4; B -9843.75 -4218.75 9843.75 4218.75 ;
+C 75; N timesig-old2/2; B -9843.75 -5625.00 9843.75 5625.00 ;
+C 76; N timesig-old3/2; B -9843.75 -4218.75 9843.75 4218.75 ;
+C 77; N timesig-old6/4; B -9843.75 -7031.25 9843.75 7031.25 ;
+C 78; N timesig-old9/4; B -9843.75 -7031.25 9843.75 7031.25 ;
 EndCharMetrics
 EndFontMetrics
diff --git a/mf/out/feta26.afm b/mf/out/feta26.afm
index bd5369910d..9e80ffba1f 100644
--- a/mf/out/feta26.afm
+++ b/mf/out/feta26.afm
@@ -32,52 +32,53 @@ C 27; N balls-2; B 0.00 -3575.03 8586.67 3575.03 ;
 C 28; N balls-2l; B -2146.67 -650.04 10733.34 650.04 ;
 C 29; N scripts-ufermata; B -8612.53 -487.53 8612.53 9425.08 ;
 C 30; N scripts-dfermata; B -8612.53 -9425.08 8612.53 487.53 ;
-C 31; N scripts-sforzato; B -5849.96 -3250.00 5849.96 3250.00 ;
-C 32; N scripts-staccato; B -975.07 -975.07 975.07 975.07 ;
-C 33; N scripts-ustaccatissimo; B -1300.08 -200.00 1300.08 6500.10 ;
-C 34; N scripts-dstaccatissimo; B -1300.08 -6500.10 1300.08 200.00 ;
-C 35; N scripts-tenuto; B -3900.04 -455.03 3900.04 455.03 ;
-C 36; N scripts-umarcato; B -3250.00 0.00 3250.00 7150.04 ;
-C 37; N scripts-dmarcato; B -3250.00 -7150.04 3250.00 0.00 ;
-C 38; N scripts-open; B -2600.00 -3250.00 2600.00 3250.00 ;
-C 39; N scripts-stopped; B -3575.03 -3575.03 3575.03 3575.03 ;
-C 40; N scripts-upbow; B -4225.02 0.00 4225.02 13520.10 ;
-C 41; N scripts-downbow; B -4875.00 0.00 4875.00 8666.64 ;
-C 42; N scripts-reverseturn; B -7109.38 -3441.18 7109.38 3441.18 ;
-C 43; N scripts-turn; B -7109.38 -3441.18 7109.38 3441.18 ;
-C 44; N scripts-trill; B -6500.00 0.00 6500.00 14625.00 ;
-C 45; N scripts-upedalheel; B -3250.00 -3250.00 3250.00 4333.33 ;
-C 46; N scripts-dpedalheel; B -3250.00 -4333.33 3250.00 3250.00 ;
-C 47; N scripts-upedaltoe; B -3250.00 0.00 3250.00 9750.00 ;
-C 48; N scripts-dpedaltoe; B -3250.00 -9750.00 3250.00 0.00 ;
-C 49; N scripts-flageolet; B -3466.67 -3466.67 3466.67 3466.67 ;
-C 50; N scripts-trilelement; B -4333.33 -3250.00 1698.62 3250.00 ;
-C 51; N scripts-prall; B -7349.30 -3250.00 7349.30 3250.00 ;
-C 52; N scripts-mordent; B -7349.30 -3250.00 7349.30 3250.00 ;
-C 53; N scripts-prallprall; B -10365.28 -3250.00 10365.28 3250.00 ;
-C 54; N scripts-prallmordent; B -10365.28 -3250.00 10365.28 3250.00 ;
-C 55; N scripts-upprall; B -10365.28 -3250.00 10365.28 3250.00 ;
-C 56; N scripts-downprall; B -10365.28 -3250.00 10365.28 3250.00 ;
-C 57; N flags-u3; B -325.03 -19922.53 8020.51 325.03 ;
-C 58; N flags-u4; B -325.03 -23172.53 8020.51 325.03 ;
-C 59; N flags-u5; B -325.03 -28047.53 8020.51 325.03 ;
-C 60; N flags-u6; B -325.03 -34547.53 8020.51 325.03 ;
-C 61; N flags-d3; B -325.03 -325.03 8875.67 18947.57 ;
-C 62; N flags-d4; B -325.03 -325.03 8875.67 19922.53 ;
-C 63; N flags-d5; B -325.03 -325.03 8875.67 25447.57 ;
-C 64; N flags-d6; B -325.03 -325.03 8875.67 28697.57 ;
-C 65; N clefs-alto; B -6500.00 -13000.00 24194.44 13000.00 ;
-C 66; N clefs-alto_change; B -5200.03 -10400.05 19355.70 10400.05 ;
-C 67; N clefs-bass; B -3250.00 -16250.00 23400.04 6500.00 ;
-C 68; N clefs-bass_change; B -2600.07 -13000.08 18720.08 5200.03 ;
-C 69; N clefs-violin; B -5664.29 -19500.00 24291.40 32500.00 ;
-C 70; N clefs-violin_change; B -4921.46 -15600.08 19043.21 26000.14 ;
-C 71; N timesig-C4/4; B -11700.03 -6500.00 11049.99 6500.00 ;
-C 72; N timesig-C2/2; B -11700.03 -9099.96 11049.99 9099.96 ;
-C 73; N timesig-old4/4; B -11375.00 -4875.00 11375.00 4875.00 ;
-C 74; N timesig-old2/2; B -11375.00 -6500.00 11375.00 6500.00 ;
-C 75; N timesig-old3/2; B -11375.00 -4875.00 11375.00 4875.00 ;
-C 76; N timesig-old6/4; B -11375.00 -8125.00 11375.00 8125.00 ;
-C 77; N timesig-old9/4; B -11375.00 -8125.00 11375.00 8125.00 ;
+C 31; N scripts-thumb; B -2600.00 -3250.00 2600.00 3250.00 ;
+C 32; N scripts-sforzato; B -5849.96 -3250.00 5849.96 3250.00 ;
+C 33; N scripts-staccato; B -975.07 -975.07 975.07 975.07 ;
+C 34; N scripts-ustaccatissimo; B -1300.08 -200.00 1300.08 6500.10 ;
+C 35; N scripts-dstaccatissimo; B -1300.08 -6500.10 1300.08 200.00 ;
+C 36; N scripts-tenuto; B -3900.04 -455.03 3900.04 455.03 ;
+C 37; N scripts-umarcato; B -3250.00 0.00 3250.00 7150.04 ;
+C 38; N scripts-dmarcato; B -3250.00 -7150.04 3250.00 0.00 ;
+C 39; N scripts-open; B -2600.00 -3250.00 2600.00 3250.00 ;
+C 40; N scripts-stopped; B -3575.03 -3575.03 3575.03 3575.03 ;
+C 41; N scripts-upbow; B -4225.02 0.00 4225.02 13520.10 ;
+C 42; N scripts-downbow; B -4875.00 0.00 4875.00 8666.64 ;
+C 43; N scripts-reverseturn; B -7109.38 -3441.18 7109.38 3441.18 ;
+C 44; N scripts-turn; B -7109.38 -3441.18 7109.38 3441.18 ;
+C 45; N scripts-trill; B -6500.00 0.00 6500.00 14625.00 ;
+C 46; N scripts-upedalheel; B -3250.00 -3250.00 3250.00 4333.33 ;
+C 47; N scripts-dpedalheel; B -3250.00 -4333.33 3250.00 3250.00 ;
+C 48; N scripts-upedaltoe; B -3250.00 0.00 3250.00 9750.00 ;
+C 49; N scripts-dpedaltoe; B -3250.00 -9750.00 3250.00 0.00 ;
+C 50; N scripts-flageolet; B -3466.67 -3466.67 3466.67 3466.67 ;
+C 51; N scripts-trilelement; B -4333.33 -3250.00 1698.62 3250.00 ;
+C 52; N scripts-prall; B -7349.30 -3250.00 7349.30 3250.00 ;
+C 53; N scripts-mordent; B -7349.30 -3250.00 7349.30 3250.00 ;
+C 54; N scripts-prallprall; B -10365.28 -3250.00 10365.28 3250.00 ;
+C 55; N scripts-prallmordent; B -10365.28 -3250.00 10365.28 3250.00 ;
+C 56; N scripts-upprall; B -10365.28 -3250.00 10365.28 3250.00 ;
+C 57; N scripts-downprall; B -10365.28 -3250.00 10365.28 3250.00 ;
+C 58; N flags-u3; B -325.03 -19922.53 8020.51 325.03 ;
+C 59; N flags-u4; B -325.03 -23172.53 8020.51 325.03 ;
+C 60; N flags-u5; B -325.03 -28047.53 8020.51 325.03 ;
+C 61; N flags-u6; B -325.03 -34547.53 8020.51 325.03 ;
+C 62; N flags-d3; B -325.03 -325.03 8875.67 18947.57 ;
+C 63; N flags-d4; B -325.03 -325.03 8875.67 19922.53 ;
+C 64; N flags-d5; B -325.03 -325.03 8875.67 25447.57 ;
+C 65; N flags-d6; B -325.03 -325.03 8875.67 28697.57 ;
+C 66; N clefs-alto; B -6500.00 -13000.00 24194.44 13000.00 ;
+C 67; N clefs-alto_change; B -5200.03 -10400.05 19355.70 10400.05 ;
+C 68; N clefs-bass; B -3250.00 -16250.00 23400.04 6500.00 ;
+C 69; N clefs-bass_change; B -2600.07 -13000.08 18720.08 5200.03 ;
+C 70; N clefs-violin; B -5664.29 -19500.00 24291.40 32500.00 ;
+C 71; N clefs-violin_change; B -4921.46 -15600.08 19043.21 26000.14 ;
+C 72; N timesig-C4/4; B -11700.03 -6500.00 11049.99 6500.00 ;
+C 73; N timesig-C2/2; B -11700.03 -9099.96 11049.99 9099.96 ;
+C 74; N timesig-old4/4; B -11375.00 -4875.00 11375.00 4875.00 ;
+C 75; N timesig-old2/2; B -11375.00 -6500.00 11375.00 6500.00 ;
+C 76; N timesig-old3/2; B -11375.00 -4875.00 11375.00 4875.00 ;
+C 77; N timesig-old6/4; B -11375.00 -8125.00 11375.00 8125.00 ;
+C 78; N timesig-old9/4; B -11375.00 -8125.00 11375.00 8125.00 ;
 EndCharMetrics
 EndFontMetrics
diff --git a/ps/GNUmakefile b/ps/GNUmakefile
index d4353253c4..a94b37ef8a 100644
--- a/ps/GNUmakefile
+++ b/ps/GNUmakefile
@@ -2,14 +2,12 @@
 
 depth = ..
 
-
 PS_FILES = $(wildcard *.ps)
 
+STEPMAKE_TEMPLATES=install
 EXTRA_DIST_FILES =  $(PS_FILES) 
 
 INSTALLATION_DIR=$(datadir)/ps/
 INSTALLATION_FILES=$(PS_FILES)
 
 include $(depth)/make/stepmake.make
-include $(stepdir)/installfiles.make
-
diff --git a/scripts/mudela-book.py b/scripts/mudela-book.py
index 596119c3dd..3faa60d238 100644
--- a/scripts/mudela-book.py
+++ b/scripts/mudela-book.py
@@ -1,23 +1,46 @@
 #!@PYTHON@
-
-#  TODO: center option
-
+# All non-english comments are NOT in swedish, they are norwegian!
+
+#  TODO:  center option (??)
+# * clean up handling of filename of inputfile
+# * steal Props class from ly2dvi?
+# * \onecolumn, \twocolumn
+# * fontsize change with commandline parameters
+# * the   verbatim  option should not be visible in the created latex file
+# * what the h.. does castingalgorithm do/mean???
+# * compile all regular expressions
+# * the following fails because mudelabook doesn't care that the
+#   last } after \end{mudela} finishes the marginpar:
+#     \marginpar{
+#     \begin{mudela}[fragment]
+#        c d e f g
+#     \end{mudela}}
+# * Command line parameter that force all inline mudela to be verbatim, and
+#   one that forces all to be printed
 # log:
 
 # 0.3:
 #   rewrite in Python.
+# 0.4:
+#   much rewritten by new author. I think the work has been split more
+#   logical between different classes.
+#   
 
 import os
 import string
 import re
 import getopt
 import sys
+import regsub
 
-outdir = 'out/'
-program_version = '0.3'
-
-
+outdir = 'out'
+program_version = '0.4'
+default_paper_size_global = 'a4'
+default_mudela_fontsize = '16pt'
+force_mudela_fontsize_b = 0
 
+fontsize_i2a = {11:'eleven', 13:'thirteen', 16:'sixteen', 20:'twenty', 26:'twentysix'}
+fontsize_pt2i = {'11pt':11, '13pt':13, '16pt':16, '20pt':20, '26pt':26}
 
 def file_exist_b(name):
     try: 
@@ -27,208 +50,317 @@ def file_exist_b(name):
     f.close ()
     return 1
 
+def ps_dimention(fname):
+    fd = open(fname)
+    lines = fd.readlines()
+    reg = re.compile('%%BoundingBox: ([0-9]*) ([0-9]*) ([0-9]*) ([0-9]*)')
+    for line in lines:
+        s = reg.search(line)
+        if s:
+            break
+    return (int(s.groups()[2])-int(s.groups()[0]), 
+            int(s.groups()[3])-int(s.groups()[1]))
+
+
 class CompileStatus:
-	pass
+    pass
 
 def file_mtime (name):
     return os.stat (name)[8] #mod time
-
-def compile (command, infile, outfile):
-	indate = file_mtime (infile)
-	try:
-		outdate = file_mtime (outfile)
-		recompile = indate > outdate
-
-	except os.error:
-		recompile = 1
-
-	if recompile:
-		sys.stderr.write ('invoking `%s\'\n' % command)
-		
-		status = os.system (command)
-		if status:
-			raise CompileStatus
+#
+# executes os.system(command) if infile is newer than
+# outfile or outfile don't exist
+#
+def compile (command, workingdir, infile, outfile):
+    indate = file_mtime (workingdir+infile)
+    try:
+        outdate = file_mtime (outfile)
+        recompile = indate > outdate
+
+    except os.error:
+        recompile = 1
+
+    if recompile:
+        sys.stderr.write ('invoking `%s\'\n' % command)
+        if workingdir == '':
+            status = os.system (command)
+        else:
+            status = os.system ('cd %s; %s' %(workingdir, command))
+        if status:
+            raise CompileStatus
+
+
+class PaperDef:
+    __onecolumn_linewidth = {
+        'a4':{'10pt': 345, '11pt': 360, '12pt':390},
+        'a5':{'10pt': 276, '11pt': 276, '12pt':276},
+        'b5':{'10pt': 345, '11pt': 356, '12pt':356},
+        'letter':{'10pt': 345, '11pt': 360, '12pt':390},
+        'legal':{'10pt': 345, '11pt': 360, '12pt':390},
+        'executive':{'10pt': 345, '11pt': 360, '12pt':379}
+        }
+    __twocolumn_linewidth = {
+         'a4':{'10pt': 167, '11pt': 175, '12pt':190},
+        'a5':{'10pt': 133, '11pt': 133, '12pt':133},
+        'b5':{'10pt': 167, '11pt': 173, '12pt':173},
+        'letter':{'10pt': 167, '11pt': 175, '12pt':190},
+        'legal':{'10pt': 167, '11pt': 175, '12pt':190},
+        'executive':{'10pt': 167, '11pt': 175, '12pt':184}
+        }
+    __numcolumn = 1
+    __fontsize = '11pt'
+    #
+    # init
+    #
+    def __init__(self):
+        self.__papersize = default_paper_size_global
+    def set_papersize (self, p):
+        if not self.__onecolumn_linewidth.has_key(p):
+            print "warning:unsupported papersize", p, \
+                  "will use", default_paper_size_global
+            self.__papersize = default_paper_size_global
+        else:
+            self.__papersize = p
+    def set_fontsize(self, pt):
+        self.__fontsize = pt
+    def get_linewidth (self):
+        if self.__numcolumn == 1:
+            return self.__onecolumn_linewidth[self.__papersize][self.__fontsize]
+        else:
+            return self.__twocolumn_linewidth[self.__papersize][self.__fontsize]
+    def onecolumn (slef):
+        self.__numcolumn = 1
+    def twocolumn (self):
+        self.__numcolumn = 2
 
 
 class Mudela_output:
-	def __init__ (self):
-		self.basename = ''
-		self.fragment = 0
-		self.size = 16
-		
-	def open (self, basename):
-		self.basename = basename
-		self.temp_file = "%s/%s" %(outdir, 'mudela-temp.ly')
-		self.file = open (self.temp_file, 'w')
-		self.file.write ('\\include \"paper%d.ly\"\n' % self.size)
-		if self.size == 16:
-			s = 'sixteen'
-		else:
-			s = 'twenty'
-
-		self.file.write ('default_paper = \\paper { \\paper_%s\n linewidth = -15.\\cm; }\n' % s)
-		
-		if self.fragment:
-			self.file.write ('\\score { \\notes { ')
-
-	def write (self,s):
-		self.file.write (s)
-
-	def close (self):
-		if self.fragment:
-			self.file.write (
-				'}\n \\paper { linewidth = -1.0\\cm;\n' +
-				'castingalgorithm = \\Wordwrap; } }\n')
-
-
-		self.file.close ()
-
-		inf=self.basename + '.ly'
-		outf = self.basename + '.tex'		
-		if not file_exist_b (inf):
-			status = 1
-		else:
-#		        print 'invoking %s' %('diff %s %s' % (self.temp_file, inf))
-			status = os.system ('diff -q %s %s' % (self.temp_file, inf))
-#			print 'status %d' % status
-
-		if status:
-			os.rename (self.temp_file, inf)
-
-		compile ('lilypond  -o %s %s'%  (self.basename, inf), inf, outf)
-#			os.rename (self.basename + '.tex', outdir  +)
-		
-	
+    def __init__ (self, basename):
+        self.basename = basename
+        # it's an integer!
+        self.feta_pt_size = fontsize_pt2i[default_mudela_fontsize]
+        self.temp_filename = "%s/%s" %(outdir, 'mudela-temp.ly')
+        self.file = open (self.temp_filename, 'w')
+        # 'tex' or 'eps'
+        self.graphic_type = 'tex'
+        self.fragment = 0
+    def write (self, line):
+        # match only if there is nothing but whitespace before \begin
+        if re.search('^\s*\\\\begin{mudela}', line):
+            self.scan_begin_statement(line)
+            self.write_red_tape()
+        else:
+            self.file.write (line)
+    def scan_begin_statement(self, line):
+        r  = begin_mudela_opts_re.search(line)
+        if r:
+            o = r.group()[1:][:-1]
+            optlist =  re.compile('[ ,]*').split(o)
+        else:
+            optlist = []
+        if 'floating' in optlist:
+            self.graphic_type = 'eps'
+        else:
+            self.graphic_type = 'tex'
+        if 'fragment' in optlist:
+            self.fragment = 1
+        else:
+            self.fragment = 0
+        for pt in fontsize_pt2i.keys():
+            if pt in optlist:
+                self.feta_pt_size = fontsize_pt2i[pt]
+    def write_red_tape(self):
+        self.file.write ('\\include \"paper%d.ly\"\n' % self.feta_pt_size)
+        s = fontsize_i2a[self.feta_pt_size]
+        if self.fragment:
+            self.file.write("default_paper = \\paper {"
+                            + "\\paper_%s\n linewidth = -1.\\pt;" % s
+                            + "castingalgorithm = \Wordwrap; indent = 2.\cm; \n}")
+            self.file.write("\\score{\n\\notes") #HACK
+        else:
+            self.file.write ("default_paper = \\paper {"
+                             + "\\paper_%s\n linewidth = %i.\\pt;" % \
+                             (s, Paper.get_linewidth()) \
+                             + "castingalgorithm = \Wordwrap; indent = 2.\cm;\n}")
+    def close (self):
+        if self.fragment:
+            self.file.write ('\\paper { \\default_paper; } }\n')
+        self.file.close ()
+
+        inf = self.basename + '.ly'
+        outf = self.basename + '.tex'		
+        if not file_exist_b (inf):
+            status = 1
+        else:
+            status = os.system ('diff -q %s %s' % (self.temp_filename, inf))
+
+        if status:
+            os.rename (self.temp_filename, inf)
+        compile ('lilypond  -o %s %s;'%  (self.basename, inf), '', inf, outf)
+        if self.graphic_type == 'eps':
+            bname = self.basename[string.rfind(self.basename, '/')+1:]
+            tex_name = bname+'.tex'
+            dvi_name = bname+'.dvi'
+            eps_name = bname+'.eps'
+            compile ('tex %s' % tex_name, outdir, tex_name, dvi_name)
+            compile ('dvips -E -o %s %s' % (eps_name, dvi_name), outdir, dvi_name, eps_name)
+    def insert_me_string(self):
+        "Returns a string that can be used directly in latex."
+        if self.graphic_type == 'tex':
+            return '\\preMudelaExample\\input %s\n\postMudelaExample\n' % self.basename
+        elif self.graphic_type == 'eps':
+            ps_dim = ps_dimention('%s.eps' % self.basename)
+            return '\\parbox{%ipt}{\includegraphics{%s.eps}}' % (ps_dim[0], self.basename)
+        else:
+            print "Unsupported graphic type '%s'" % self.graphic_type
+            sys.exit(1)
 
 class Tex_output:
-	def __init__ (self, name):
-		self.output_fn = '%s/%s' % (outdir, name)
-		self.mudela = 0
-		self.file = open (self.output_fn , 'w')
-		self.verbatim = 0		
-	def open_mudela (self, basename):
-		self.mudela_basename =basename
-		if self.verbatim:
-			self.file.write ('\\begin{verbatim}\n')
-		self.mudela = 1
-
-	def write (self, s):
-		self.file.write (s)
-			
-	def write_mudela (self, s):
-		if self.verbatim:
-			self.file.write (s)
-			
-	def close_mudela (self):
-		if self.verbatim:
-			self.file.write ('\\end{verbatim}\n')
-			self.verbatim = 0
-		
-		self.file.write (
-		    '\\preMudelaExample\\input %s\n\postMudelaExample' %(self.mudela_basename))
-		self.mudela = 0
-
-
-
-
+    def __init__ (self, name):
+        self.output_fn = '%s/%s' % (outdir, name)
+        self.file = open (self.output_fn , 'w')
+    def open_mudela (self, basename):
+        self.mudela_basename = basename
+    def open_verbatim (self):
+        self.file.write ('\\begin{verbatim}\n')
+    def close_verbatim (self):
+        self.file.write ('\\end{verbatim}\n')
+    def write (self, s):
+        self.file.write (s)
 
 begin_mudela_re = re.compile ('^ *\\\\begin{mudela}')
-begin_mudela_opts_re = re.compile ('^ *\\\\begin{mudela}\[(.*)\]')
+begin_mudela_opts_re = re.compile('\[[^\]]*\]')
 end_mudela_re = re.compile ('^ *\\\\end{mudela}')
 section_re = re.compile ('\\\\section')
 chapter_re = re.compile ('\\\\chapter')
-input_re = re.compile ('^\\\\input[ \t\n]+(.*)$')
+input_re = re.compile ('^\\\\input{([^}]*)')
+include_re = re.compile ('^\\\\include{([^}]*)')
+begin_document_re = re.compile ('^ *\\\\begin{document}')
+documentclass_re = re.compile('\\\\documentclass')
+twocolumn_re = re.compile('\\\\twocolumn')
+onecolumn_re = re.compile('\\\\onecolumn')
 
 class Tex_input:
-	def __init__ (self,name):
-		if not re.search ('\\.[^/\\\\]+',name):
-			name = name + '.tex'
-		print 'opening %s' % name
-		self.filename = name
-		self.infile = open (name)
+    def __init__ (self,name):
+        # HACK
+        if (name[-4:] != '.tex') and (name[-4:] != '.doc'):
+            name = name + '.tex'
+        self.filename = name
+        self.infile = open (name)
 		
-	def get_lines (self):
-		lines = self.infile.readlines ()
-		(retlines, retdeps) = ([],[self.filename])
-		for line in lines:
-			m = input_re.search (line)
-			if m:
-				t = Tex_input (m.group (1))
-				ls =t.get_lines ()
-				retlines = retlines + ls[0]
-				retdeps = retdeps + ls[1]
-			else:
-				retlines.append (line)
-
-		return (retlines, retdeps)
+    def get_lines (self):
+        lines = self.infile.readlines ()
+        (retlines, retdeps) = ([],[self.filename])
+        for line in lines:
+            r = input_re.search (line)
+            ri = include_re.search (line)
+            if r:
+                t = Tex_input (r.groups()[0])
+                ls =t.get_lines ()
+                retlines = retlines + ls[0]
+                retdeps = retdeps + ls[1]
+            elif ri:
+                t = Tex_input (ri.groups()[0])
+                ls =t.get_lines ()
+                ls[0].insert(0, '\\newpage')
+                ls[0].append('\\newpage')
+                retlines = retlines + ls[0]
+                retdeps = retdeps + ls[1]                
+            else:
+                retlines.append (line)
+        return (retlines, retdeps)
+
 
 class Main_tex_input(Tex_input):
-	def __init__ (self, name, outname):
+    def __init__ (self, name, outname):
 		
-		Tex_input.__init__ (self, name) # ugh
-
-		self.outname = outname
-		self.chapter = 0
-		self.section = 0
-		self.fine_count =0
-		self.mudtex = Tex_output (self.outname)
-		self.mudela = None
-		self.deps = []
-	def set_sections (self, l):
-		if section_re.search (l):
-			self.section = self.section + 1
-		if chapter_re.search (l):
-			self.section = 0
-			self.chapter = self.chapter + 1
-
-			
-	def gulp_mudela (self):
-		pass
-
-	def gen_basename (self):
-		return '%s/%s-%d.%d.%d' % (outdir, self.outname,self.chapter,self.section,self.fine_count)
-
-	def do_it(self):
-		(lines, self.deps) = self.get_lines ()
-		for line in lines:
-			if begin_mudela_re.search (line):
-				m =begin_mudela_opts_re.search (line) 
-				if m:
-					opts = m.group (1)
-				else:
-					opts = ''
-				optlist = string.split (opts, ',')
-				self.mudela = Mudela_output ()
-				if 'fragment' in optlist:
-					self.mudela.fragment = 1
-				if '16pt' in optlist:
-					self.mudela.size = 16
-				if '20pt' in optlist:
-					self.mudela.size = 20
-				
-				if 'verbatim' in optlist:
-					self.mudtex.verbatim = 1
-
-				b = self.gen_basename ()
-				self.mudtex.open_mudela (b)
-				self.mudela.open (b)
-
-
-				continue
-			elif end_mudela_re.search (line):
-				self.mudela.close ()
-				self.mudtex.close_mudela ()
-				self.mudela = None
-				self.fine_count = self.fine_count + 1
-				continue
-			    
-			if self.mudela:
-				self.mudela.write (line)
-				self.mudtex.write_mudela (line)
-			else:
-				self.mudtex.write (line)
-			self.set_sections(line)
-		del self.mudtex
+        Tex_input.__init__ (self, name) # ugh
+
+        self.outname = outname
+        self.chapter = 0
+        self.section = 0
+        self.fine_count =0
+        self.mudtex = Tex_output (self.outname)
+        self.mudela = None
+        self.deps = []
+        self.verbatim = 0
+        # set to 'mudela' when we are processing mudela code,
+        # both verbatim and graphic-to-be
+        self.mode = 'latex'
+    def set_sections (self, l):
+        if section_re.search (l):
+            self.section = self.section + 1
+        if chapter_re.search (l):
+            self.section = 0
+            self.chapter = self.chapter + 1
+
+    def gen_basename (self):
+        return '%s/%s-%d.%d.%d' % (outdir, self.outname,self.chapter,self.section,self.fine_count)
+
+    def extract_papersize_from_documentclass(self, line):
+        pre = re.search('\\\\documentclass[\[, ]*(\w*)paper[\w ,]*\]\{\w*\}', line)
+        if not pre:
+            return default_paper_size_global
+        return pre.groups()[0]
+    def extract_fontsize_from_documentclass(self, line):
+        if re.search('\\\\documentclass\[[^\]]*\]\{[^\}]*\}', line):
+            r = re.search('[ ,\[]*([0-9]*pt)', line)
+            if r:
+                return r.groups()[0]
+        return '10pt'
+    def do_it(self):
+        (lines, self.deps) = self.get_lines ()
+        for line in lines:
+            if documentclass_re.search (line):
+                Paper.set_papersize (self.extract_papersize_from_documentclass (line) )
+                Paper.set_fontsize (self.extract_fontsize_from_documentclass (line) )
+            elif twocolumn_re.search (line):
+                Paper.twocolumn ()
+            elif onecolumn_re.search (line):
+                Paper.onecolumn ()
+            elif begin_document_re.search (line):
+                self.mudtex.write ('\\def\\preMudelaExample{}\n')
+                self.mudtex.write ('\\def\\postMudelaExample{}\n')
+            elif begin_mudela_re.search (line):
+                if __debug__:
+                    if self.mode == 'mudela':
+                        raise AssertionError
+                self.mode = 'mudela'
+                r  = begin_mudela_opts_re.search (line)
+                if r:
+                    o = r.group()[1:][:-1]
+                    optlist =  re.compile('[ ,]*').split(o)
+                else:
+                    optlist = []
+                if 'verbatim' in optlist:
+                    self.verbatim = 1
+                    self.mudtex.open_verbatim ()
+                else:
+                    self.verbatim = 0
+                    self.mudela = Mudela_output (self.gen_basename ())
+
+            elif end_mudela_re.search (line):
+                if __debug__:
+                    if self.mode != 'mudela':
+                        raise AssertionError
+                if self.mudela:
+                    self.mudela.close ()
+                    self.mudtex.write (self.mudela.insert_me_string())
+                    del self.mudela
+                    self.mudela = None
+                    self.fine_count = self.fine_count + 1
+                else:                    
+                    self.mudtex.write (line)
+                    self.mudtex.close_verbatim ()
+                self.mode = 'latex'
+                continue
+
+            if self.mode == 'mudela' and not self.verbatim:
+                self.mudela.write (line)
+            else:
+                self.mudtex.write (line)
+                self.set_sections(line)
+        del self.mudtex
 		
 
 def help():
@@ -236,32 +368,14 @@ def help():
 		 + "Generate hybrid LaTeX input from Latex + mudela"
 		 + "Options:\n"
 		 + "  -h, --help             print this help\n"
-		 + "  -d, --outdir=DIR       prefix directory\n" 
+		 + "  -d, --outdir=DIR       directory to put generated files\n" 
 		 + "  -o, --outname=FILE     prefix for filenames\n"
+                 + "  --mudela-fontsize=??pt default fontsize when no parameter for \\begin{mudela}\n"
+                 + "  --force-mudela-fontsize=??pt force fontsize for all inline mudela\n"
 		     )
     sys.exit (0)
 
 
-
-sys.stderr.write ('This is %s version %s\n' % ('mudela-book', program_version))
-
-outname = ''
-(options, files) = getopt.getopt(
-	sys.argv[1:], 'hd:o:', [ 'outdir=', 'outname=', 'help', 'dependencies'])
-
-do_deps = 0
-for opt in options:
-	o = opt[0]
-	a = opt[1]
-	if o == '--outname' or o == '-o':
-		outname = a
-	if o == '--outdir' or o == '-d':
-		outdir = a
-	if o == '--help' or o == '-h':
-		help ()
-	if o == '--dependencies':
-		do_deps = 1
-
 def write_deps (fn, out,  deps):
 	out_fn = outdir + '/' + fn
 	print '\`writing \`%s\'\n\'' % out_fn
@@ -271,18 +385,64 @@ def write_deps (fn, out,  deps):
 			      reduce (lambda x,y: x + ' '+ y, deps)))
 	f.close ()
 
-
-for f in files:
-	my_outname = outname
-	if not my_outname:
-		my_outname = regsub.sub ('\\(.*\\)\\.doc', '\\1', f)
-
-	my_depname = my_outname + '.dep'
-
-	inp = Main_tex_input (f, my_outname)
-	inp.do_it ()
-
-	if do_deps:
+def identify():
+    sys.stderr.write('*** Lokal versjon av mudela-book ***\n')
+    sys.stderr.write ('This is %s version %s\n' % ('mudela-book', program_version))
+
+def main():
+    global default_mudela_fontsize, outdir
+    outname = ''
+    try:
+        (options, files) = getopt.getopt(
+            sys.argv[1:], 'hd:o:', ['outdir=', 'outname=', 'mudela-fontsize=',
+                                    'force-mudela-fontsize=', 'help', 'dependencies'])
+    except getopt.error, msg:
+        print "error:", msg
+        sys.exit(1)
+        
+    do_deps = 0
+    for opt in options:
+	o = opt[0]
+	a = opt[1]
+	if o == '--outname' or o == '-o':
+            outname = a
+        if o == '--outdir' or o == '-d':
+            outdir = a
+        if o == '--help' or o == '-h':
+            help ()
+	if o == '--dependencies':
+            do_deps = 1
+        if o == '--mudela-fontsize':
+            default_mudela_fontsize = a
+	if o == '--force-mudela-fontsize':
+            default_mudela_fontsize = a
+            force_mudela_fontsize_b = 1
+
+    if outdir[-1:] != '/':
+        outdir = outdir + '/'
+
+    if not file_exist_b(outdir):
+        os.system('mkdir %s' % outdir)
+
+    if not fontsize_pt2i.has_key(default_mudela_fontsize):
+        print "warning: fontsize %s is not supported using 16pt" % default_mudela_fontsize
+        default_mudela_fontsize = '16pt'
+    
+    for f in files:
+        my_outname = outname
+        if not my_outname:
+            my_outname = regsub.sub ('\\(.*\\)\\.doc', '\\1', f)
+
+        my_depname = my_outname + '.dep'
+        
+        inp = Main_tex_input (f, my_outname)
+        inp.do_it ()
+
+    if do_deps:
 		write_deps (my_depname, my_outname, inp.deps)
 
 
+
+identify()
+Paper = PaperDef()
+main()
diff --git a/stepmake/Documentation/GNUmakefile b/stepmake/Documentation/GNUmakefile
index c49eec6022..4f6e24b7ff 100644
--- a/stepmake/Documentation/GNUmakefile
+++ b/stepmake/Documentation/GNUmakefile
@@ -5,10 +5,11 @@ depth = ..
 
 OUTTXT_FILES = $(OUTYO_FILES:.yo=.txt) $(OUTIN_FILES:.yo=.txt)
 EXTRA_DIST_FILES = 
-SUBDIRS=topdocs
+OUT_DIST_FILES=$(OUTTXT_FILES)
 
+SUBDIRS=topdocs
 
-STEPMAKE_TEMPLATES=documentation
+STEPMAKE_TEMPLATES=documentation install install-out
 
 include $(depth)/make/stepmake.make 
 
@@ -22,3 +23,9 @@ check-doc-deps: do-doc
 
 doc: do-doc
 
+INSTALLATION_DIR=$(datadir)/Documentation
+INSTALLATION_FILES=$(DIST_FILES)
+
+INSTALLATION_OUT_DIR=$(datadir)/Documentation/out
+INSTALLATION_OUT_FILES=$(OUTTXT_FILES)
+
diff --git a/stepmake/Documentation/out/automake.txt b/stepmake/Documentation/out/automake.txt
new file mode 100644
index 0000000000..6f1f5d2de4
--- /dev/null
+++ b/stepmake/Documentation/out/automake.txt
@@ -0,0 +1,173 @@
+
+
+
+
+
+
+
+
+
+                     Automake -- Urgh!
+
+                        HWN and JCN
+
+
+Contents
+
+     1: Introduction
+2: What's wrong with Automake?
+3: Irritations
+4: Fundamental problems
+5: Conclusions
+
+
+1: Introduction
+
+
+Every once in a while, we get comments on our `non-standard'
+(non GNU compliant)  configuration/compilation  system.   In
+this  document,  we try to explain why we built our own sys-
+tem.  We focus on Automake, but of  course  writing  complex
+Makefile.ins  without  generating  them  automatically is an
+even more deadly sin in our opinion.
+
+
+2: What's wrong with Automake?
+
+
+We have tried to use Automake and found it to be  inadequate
+for  our  needs  for  several  reasons.   On the surface the
+shortcomings to Automake  may  seem  bugs  or  "not-yet-com-
+pleted"  features.   However, make itself is broken, and any
+tool built on top of make is broken as well.
+
+
+3: Irritations
+
+
+We'll start with the superficial irritations first:
+
+o    there is no intrinsic support for  wildcarding;  Adding
+     support  for  wildcarding  adds  yet another layer to a
+     top-heavy system.
+
+     This may sound silly, but for a  fast  moving  project,
+     with  1250 sourcefiles, one does not want to administer
+     a list of filenames by hand: files are created, deleted
+     and  moved  very  often,  and wildcarding prevents that
+     distributions miss files.
+
+
+o    Automake tries to cater for every taste of  make.   But
+     anyone  who  does more than the trivial configure; make
+     install has to install Automake  and  GNU  make  anyway
+     (for  example, you need GCC and GNU Make for dependency
+     tracking).
+
+     Automake's universal make support  is  good  for  tools
+     that  have  to  be highly portable, but you have pay in
+     ease of use and speed  while  developing.   This  means
+     that  it  is counterproductive to use Automake for non-
+     essential programs that are under (heavy)  development.
+
+
+o    Support for filetypes in built in to Automake, and can-
+     not be added on the fly: Automake is very much targeted
+     at standard GNU packages that are written in C (or C++)
+     and  come  with  info-pages.   If  you  want   to   add
+
+
+     dependencies  from   or  METAFONT  files you are out of
+     luck.  Ditto if you have weird file types (.pod), weird
+     programming languages, etc.
+
+     There are as many file types as there are languages and
+     compilers.  Extending Automake  to  support  all  these
+     languages  is  error-prone,  and  creates nasty version
+     dependencies  between  an  Automake-using  package  and
+     Automake  itself.   A  package should be able to supply
+     its own specific rules and targets.
+
+
+o    Dependency handling is unreliable in our experience. On
+     several  occasions  we  had  unexplainable errors, that
+     went away after doing a make distclean, and  recompile.
+
+
+o    It  is  slower,  much  slower than a tailored solution.
+     This diffence in speed can be as  large  as  800%.  (On
+     JCNs  machine  a make dist takes 17 minutes in stead of
+     2) for every distribution  made;  this  constitutes  45
+     minutes of irritation on an average hacking-night.
+
+
+o    For  a  large  project,  a  specialised Makefile system
+     costs relatively little extra effort.  The extra effort
+     pays itself back in speed and control.
+
+
+o    The  Makefiles, Makefile.ins, and extensions constitute
+     a huge amount of state.  We found it hard to  reproduce
+     bugs  in Automake (Strictly spoken they aren't bugs, as
+     we haven't  diagnosed  because  we  couldn't  reproduce
+     them.)
+
+
+4: Fundamental problems
+
+
+Many of the fundamental problems can be traced back to flaws
+in make:
+
+
+o    make is not standardised.  The only decent  implementa-
+     tion is GNU make, and GNU make is not widespread enough
+     to require GNU make for compiling GNU tools.
+
+
+o    make does not have enough meta-ness: one cannot manipu-
+     late dependencies and rules in make: they cannot be put
+     in variables, mapped at lists, etc.
+
+     (In our  tailor  made  compilation  system,  we  worked
+     around  this non-feature by using generic include files
+
+
+     as a stopgap function call.)
+
+
+o    VPATH is a broken concept: programs should not  try  to
+     be intelligent on their own; being intelligent is some-
+     thing the programmer should do.  make should do exactly
+     as  it is told, and make should enable easy formulation
+     of these commands.
+
+Automake tries to solve these problems by building on top of
+this  broken  tool:  an  extra layer of complexity is added,
+with self-modifying Makefiles, and different  Makefile  ver-
+sions for maintainer and user.
+
+
+5: Conclusions
+
+
+We  could  be called `cheap' for complaining about the above
+points, while not even filing decent bugreports.  The  real-
+ity  is that we ourselves are busy and that we don't find it
+amusing to hunt for and fix bugs in a fix (Automake)  for  a
+broken tool (make).
+
+It  should  also  be  emphasised  that  we  still think that
+Automake is a good tool: it is excellent for small projects,
+and  reasonable  for big projects that are fully "standard."
+However, for LilyPond, with its many  sourcefiles  and  many
+different filetypes we found it unwieldy.
+
+We  hope  that  some day a better replacement for make comes
+along, so that the gruesomeness of make and friends may  die
+in oblivion.  (*)
+
+(*)  I  personally  would  like to enter a Makefile as func-
+tional program, whose execution caches function  results  on
+the  disk as files.  But I shan't bother you further with my
+vaporware thoughts..
diff --git a/stepmake/Documentation/out/layout.txt b/stepmake/Documentation/out/layout.txt
new file mode 100644
index 0000000000..01bcb4a817
--- /dev/null
+++ b/stepmake/Documentation/out/layout.txt
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+         doos/                        # gnu/windows32 build and binary releases
+         harmonia -> harmonia-x.y.z
+         harmonia-x.y.z/
+         lilypond -> lilypond-x.y.z   # symlink to development directory
+         lilypond-x.y.z/              # current development
+         patches/                 # patches between different releases
+         RedHat/BUILD                 # RedHat build and binary releases
+         RedHat/RPMS
+         RedHat/SPECS
+         releases/                    # .tar.gz releases
+         test/                        # tarballs and diffs from current version
+         yodl -> yodl-1.30.17
+         yodl-1.30.17
+
+
+
+
+with  prefix  $HOME/usr/src  and (for building rpms only) in
+$HOME/.rpmrc:
+
+
+
+
+
+         topdir: /home/fred/usr/src/RedHat
diff --git a/stepmake/Documentation/topdocs/GNUmakefile b/stepmake/Documentation/topdocs/GNUmakefile
index d12c14370e..f01c12573d 100644
--- a/stepmake/Documentation/topdocs/GNUmakefile
+++ b/stepmake/Documentation/topdocs/GNUmakefile
@@ -8,8 +8,16 @@ AT_FILES = $(BLURBS) #
 at-dir = $(doc-dir)/
 at-ext = .in
 BLURBS=BLURB COPERTINA FLAPTEKST
+OUT_DIST_FILES=$(OUTTXT_FILES)
 
-STEPMAKE_TEMPLATES=documentation yolily-topdoc
+STEPMAKE_TEMPLATES=documentation yolily-topdoc install install-out
 
 include $(depth)/make/stepmake.make 
 
+INSTALLATION_DIR=$(datadir)/Documentation/topdocs
+INSTALLATION_FILES=$(DIST_FILES)
+POST_INSTALL=-mkdir $(INSTALLATION_DIR)/out
+
+INSTALLATION_OUT_DIR=$(datadir)/Documentation/topdocs/out
+INSTALLATION_OUT_FILES=$(OUTTXT_FILES)
+
diff --git a/stepmake/Documentation/topdocs/out/AUTHORS.txt b/stepmake/Documentation/topdocs/out/AUTHORS.txt
new file mode 100644
index 0000000000..30fdcd285f
--- /dev/null
+++ b/stepmake/Documentation/topdocs/out/AUTHORS.txt
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+NAME
+
+     AUTHORS - who did what on StepMake?
+
+DESCRIPTION
+
+     This file lists authors of StepMake, and what they did.
+
+AUTHORS
+
+
+o    Han-Wen           Nienhuys           <hanwen@cs.uu.nl>,
+     http://www.cs.uu.nl/people/hanwen
+     Main author.
+
+o    Jan           Nieuwenhuizen          <janneke@gnu.org>,
+     http://www.xs4all.nl/~jantien
+     Main author.
+
+o    Jeffrey B. Reed <daboys@bga.com>, Windows-nt fixes.
diff --git a/stepmake/Documentation/topdocs/out/BLURB b/stepmake/Documentation/topdocs/out/BLURB
new file mode 100644
index 0000000000..7af77f056d
--- /dev/null
+++ b/stepmake/Documentation/topdocs/out/BLURB
@@ -0,0 +1,6 @@
+StepMake is a drop-in package that takes care of generic Makefile and
+packaging/distribution issues.  It enables you to write only the simplest of
+Makefile snippets, while providing a series powerful make targets.  Features
+include speed, wildcarding, out/ dir build, stateless Makefiles and package
+clustering.  It includes some handy scripts for making (package-)diffs and
+patches, making binary distributions etc.
diff --git a/stepmake/Documentation/topdocs/out/INSTALL.txt b/stepmake/Documentation/topdocs/out/INSTALL.txt
new file mode 100644
index 0000000000..a3c8f1c7f1
--- /dev/null
+++ b/stepmake/Documentation/topdocs/out/INSTALL.txt
@@ -0,0 +1,292 @@
+
+
+
+
+
+
+NAME
+
+     INSTALL - installing StepMake
+
+DESCRIPTION
+
+     This page documents installation and usage of StepMake
+
+ABSTRACT
+
+
+
+
+
+     StepMake is a drop-in package that takes care of generic Makefile and
+     packaging/distribution issues.  It enables you to write only the simplest of
+     Makefile snippets, while providing a series powerful make targets.  Features
+     include speed, wildcarding, out/ dir build, stateless Makefiles and package
+     clustering.  It includes some handy scripts for making (package-)diffs and
+     patches, making binary distributions etc.
+
+
+
+
+
+To use StepMake with your package, you do something remotely
+like:
+
+
+
+
+
+         tar xzf releases/stepmake-0.1.23
+         cd package-x.x.x/                # package to be StepMake-ised
+         ./../stepmake-0.1.23/bin/stepmakeise.sh
+
+
+
+
+You'll have to customize at least the files:
+
+
+
+
+
+         ./VERSION .
+         ./configure.in
+
+
+
+
+to your package's needs.  You might want to take a look at:
+
+
+         ./make/Toplevel.make.in
+         ./config.hh.in
+         ./config.make.in
+
+
+
+
+
+Also, you should put a Makefile  in  every  subdirectory  of
+your  package.   These makefiles generally are quite simple,
+e.g. this is a the makefile  for  an  include  directory  of
+LilyPond:
+
+
+
+
+
+         # lily/include/Makefile
+
+         depth = ../..
+         include $(depth)/make/Stepmake.make
+
+
+
+
+
+it  will  identify  all  .h, .hh, ... files and take care of
+distributing them.
+
+There's a make/Template.make that you can use as an example.
+See also the Makefiles in the LilyPond or Yodl package.
+
+Once  included  in  your  package, StepMake (or in fact, any
+StepMake-ised package) behaves  as  a  normal  subdirectory;
+make  commands such as 'make dist' recurse into the stepmake
+tree (For a list of available targets, type make help  after
+configuring).   Stepmake (and any changes made) will be dis-
+tributed with the main pacakage.  However, StepMake  doesn't
+lose its independency, change to the stepmake directory, and
+it'll behave as  a  main  package.   You  shouldn't  version
+directory  names  of  subpackages, otherwise you'll see that
+package twice in each patch when you upgrade.
+
+
+PREREQUISITES
+
+
+To use StepMake with a package you need:
+
+
+o    A GNU system: StepMake is known to work  on  these  GNU
+     systems:  Linux  (PPC,  intel), FreeBSD, AIX, NeXTStep,
+     IRIX, Digital Unix and Solaris.  If you have the Cygnus
+     WINDOWS32  port  of the GNU utils, it will even work in
+
+
+     Windows NT/95, but we don't promise to support it.
+
+o    GNU make
+
+o    GNU autoconf
+
+
+RECOMMENDED
+
+
+Although not strictly necessary, these  are  recommended  to
+have.
+
+
+o    Python
+
+o    Yodl.  All documentation will be in Yodl. (1.22.jcn3)
+
+o    GNU find
+
+
+INTERNALS
+
+
+Over  time,  we  put a lot of effort in the configure, make,
+distribute system (CMDS) for LilyPond.  Some months ago,  we
+realised it was not standard GNU --- we require GNU make for
+building, and Python for extra scripting.  In an  effort  to
+be  more  GNU,  we  tried  automake,  but after two weeks we
+realised the costs were too high for us and we  reverted  to
+our  own  system (see automake.urgh).  Not long after that i
+was confronted with two other packages that lacked a  decent
+CMDS.  I realised that Lily's would be perfect, it's modular
+and easy.  The only problem was to make a clean cut  between
+generic and Lily specific stuff.  The result was StepMake: a
+bunch of generic makefiles, found in:
+
+
+
+
+
+         stepmake/stepmake/*.make
+
+
+
+
+eneric helper scripts:
+
+
+         stepmake/bin/*.sh
+         stepmake/bin/*.py
+
+
+
+
+and modular configure functions:
+
+
+
+
+
+         stepmake/configure.in
+         stepmake/aclocal.m4
+         stepmake/config.hh.in
+         stepmake/config.make.in
+
+
+
+
+
+Of course, every package has its  own  configure-  and  make
+peculiarities.  The best way to create the configure scripts
+is to copy them from stepmake[1] into you package's toplevel
+directory.  For most packages, you'll only have  to  comment
+in/out some functions in configure.in.
+
+Package specific makefiles go in:
+
+
+
+
+
+         make/Targets.make
+         make/Rulese.make
+         make/Substitute.make
+
+
+
+
+and are included by the generic StepMake makefiles.
+
+
+MAINTAINING
+
+
+If  you want to make and manage (binary) distributions, cre-
+ate and apply patches, you'll  need  some  framework  that's
+outside of the package's sourcetree.  For a number of simple
+maintenance tasks, StepMake will therefore assume  the  fol-
+lowing directory structure:
+-----------
+[1] Actually, stepmake/bin/stepmakeise.sh will  do
+that for you.
+
+
+         doos/                        # gnu/windows32 build and binary releases
+         harmonia -> harmonia-x.y.z
+         harmonia-x.y.z/
+         lilypond -> lilypond-x.y.z   # symlink to development directory
+         lilypond-x.y.z/              # current development
+         patches/                 # patches between different releases
+         RedHat/BUILD                 # RedHat build and binary releases
+         RedHat/RPMS
+         RedHat/SPECS
+         releases/                    # .tar.gz releases
+         test/                        # tarballs and diffs from current version
+         yodl -> yodl-1.30.17
+         yodl-1.30.17
+
+
+
+
+with  prefix  $HOME/usr/src  and (for building rpms only) in
+$HOME/.rpmrc:
+
+
+
+
+
+         topdir: /home/fred/usr/src/RedHat
+
+
+
+
+
+Check and update the layout with the command:
+
+
+
+
+
+         ./stepmake/bin/stepdirs.sh
+
+
+
+
+
+
+SEE ALSO
+
+
+../PATCHES.txt
+
+
+CONFIGURING
+
+
+Stepmake comes with a number of  precooked  configure  func-
+tions  for  general  needs,  such as AC_STEPMAKE_COMPILE for
+
+
+simple C development and AC_STEPMAKE_CXX for C++.
+
+See configure.in and comment in/out the functions that  your
+package  needs.   For specific needs, you can write your own
+autoconf code, see info autoconf.
+
+
+AUTHORS
+
+
+Jan Nieuwenhuizen <janneke@gnu.org>
+
+Han-Wen Nienhuys <hanwen@cs.uu.nl>
+
+Have fun!
diff --git a/stepmake/NEWS b/stepmake/NEWS
index 3b27f3db08..7e0a1e72bf 100644
--- a/stepmake/NEWS
+++ b/stepmake/NEWS
@@ -1,3 +1,20 @@
+pl 59
+	- bf: package-diff (remove missing automatic)
+	- install templates, (urg) INSTALL*1,2 INSTALL_OUT*1,2
+
+pl 58
+	- distribute formatted txt files: no yodl needed for operation!
+	- guile 1.2 and 1.3 support
+
+pl 57
+	- yodl first build script fixes
+	- uninstall fixes, but, urg, still have to uninstall twice
+	  to get rid of all subdirs
+	- installed stepmake
+	  * install not required
+	  * only installs on explicit make install from toplevel stepdir
+	  * rather urg, 'make dist' needs absolute distdir!
+
 pl 56
 	- crude metapost stuff
 
diff --git a/stepmake/VERSION b/stepmake/VERSION
index 57fd582a8e..e24ec2af87 100644
--- a/stepmake/VERSION
+++ b/stepmake/VERSION
@@ -1,7 +1,7 @@
 PACKAGE_NAME=StepMake
 MAJOR_VERSION=0
 MINOR_VERSION=1
-PATCH_LEVEL=56
+PATCH_LEVEL=59
 MY_PATCH_LEVEL=
 
 # use the above to send patches, always empty for released version:
diff --git a/stepmake/aclocal.m4 b/stepmake/aclocal.m4
index ebbe27e3c7..8041121141 100644
--- a/stepmake/aclocal.m4
+++ b/stepmake/aclocal.m4
@@ -153,6 +153,16 @@ AC_DEFUN(AC_STEPMAKE_GXX, [
     fi
 ])
 
+AC_DEFUN(AC_STEPMAKE_GUILE, [
+    # urg, must check for different functions in libguile
+    # to force new check iso reading from cache
+    AC_CHECK_LIB(guile, scm_shell, \
+      LIBS="-lguile $LIBS" AC_DEFINE(HAVE_LIBGUILE), \
+      AC_CHECK_LIB(readline, readline) \
+      AC_CHECK_LIB(dl, dlopen) \
+      AC_CHECK_LIB(guile, scm_boot_guile))
+])
+
 AC_DEFUN(AC_STEPMAKE_INIT, [
 
     . $srcdir/VERSION
@@ -167,16 +177,44 @@ AC_DEFUN(AC_STEPMAKE_INIT, [
     package=`echo $PACKAGE_NAME | tr '[A-Z]' '[a-z]'`
     changequote([, ])dnl
 
+    # No versioning on directory names of sub-packages 
+    # urg, urg
+    stepmake=${datadir}/stepmake
+    presome=${prefix}
+    if test "$prefix" = "NONE"; then
+	    presome=${ac_default_prefix}
+    fi
+    stepmake=`echo ${stepmake} | sed "s!\\\${prefix}!$presome!"`
+
     if test "x$PACKAGE" = "xSTEPMAKE"; then
         echo Stepmake package!
 	(cd stepmake; rm -f stepmake; ln -s ../stepmake .)
 	(cd stepmake; rm -f bin; ln -s ../bin .)
 	AC_CONFIG_AUX_DIR(bin)
+	stepmake=stepmake
     else
         echo Package: $PACKAGE
-	AC_CONFIG_AUX_DIR(stepmake/bin)
+	# Check for installed stepmake
+	if test -d $stepmake; then
+	    echo Using installed stepmake: $stepmake
+	else
+	    stepmake='$(depth)'/stepmake
+	    echo Using local stepmake: $datadir/stepmake not found
+	fi
+	AC_CONFIG_AUX_DIR(\
+	  $HOME/usr/local/share/stepmake/bin\
+	  $HOME/usr/local/lib/stepmake/bin\
+	  $HOME/usr/share/stepmake/bin\
+	  $HOME/usr/lib/stepmake/bin\
+	  /usr/local/share/stepmake/bin\
+	  /usr/local/lib/stepmake/bin\
+	  /usr/share/stepmake/bin\
+	  /usr/lib/stepmake/bin\
+	  stepmake/bin\
+	)
     fi
 
+    AC_SUBST(stepmake)
     AC_SUBST(package)
     AC_SUBST(PACKAGE)
     AC_SUBST(PACKAGE_NAME)
@@ -191,10 +229,6 @@ AC_DEFUN(AC_STEPMAKE_INIT, [
     absolute_builddir="`pwd`"
     AC_SUBST(absolute_builddir)
 
-    # No versioning on directory names of sub-packages 
-    stepmake=stepmake
-    AC_SUBST(stepmake)
-
     STATE_VECTOR=`ls make/STATE-VECTOR 2>/dev/null`
     if test "x$STATE_VECTOR" != "x"; then
     	STATE_VECTOR="\$(depth)/$STATE_VECTOR"
@@ -249,14 +283,14 @@ dnl    fi
 	DOTEXE=.exe
        DIRSEP='\\'
  	PATHSEP=';'
-       INSTALL="\$(stepdir)/../bin/install-dot-exe.sh -c"
+       INSTALL="\$(SHELL) \$(stepdir)/../bin/install-dot-exe.sh -c"
     else
 	DIRSEP='/'
 	PATHSEP=':'
 	LN=ln
 	LN_S='ln -s'
 	ZIP="zip -r -9"
-        INSTALL="\$(stepdir)/../bin/install-sh -c"
+        INSTALL="\$(SHELL) \$(stepdir)/../bin/install-sh -c"
     fi
     AC_SUBST(DOTEXE)
     AC_SUBST(ZIP)
@@ -461,11 +495,13 @@ AC_DEFUN(AC_STEPMAKE_YODL, [
 	AC_CHECK_PROGS(YODL2MSLESS, yodl2msless, -echo no yodl)
 	AC_CHECK_PROGS(YODL2TEXINFO, yodl2texinfo, -echo no yodl)
 	AC_CHECK_PROGS(YODL2TXT, yodl2txt, -echo no yodl)
+	YODL2LESS_DIR='$(bindir)/'
     else
 	AC_SUBST(STRIPROFF)
 	AC_SUBST(YODL)
 	AC_SUBST(YODL2HTML)
 	AC_SUBST(YODL2LATEX)
+	AC_SUBST(YODL2LESS_DIR)
 	AC_SUBST(YODL2MAN)
 	AC_SUBST(YODL2MSLESS)
 	AC_SUBST(YODL2TEXINFO)
diff --git a/stepmake/bin/GNUmakefile b/stepmake/bin/GNUmakefile
index 36d16462ca..4ca8cd1a8f 100644
--- a/stepmake/bin/GNUmakefile
+++ b/stepmake/bin/GNUmakefile
@@ -1,10 +1,11 @@
 # bin/Makefile
 
 depth = ..
-
 EXTRA_DIST_FILES = install-sh config.sub config.guess
-STEPMAKE_TEMPLATES=script
+STEPMAKE_TEMPLATES=script install
 
 include $(depth)/make/stepmake.make 
 
-
+POST_INSTALL=chmod 755 $(datadir)/bin/*
+INSTALLATION_DIR=$(datadir)/bin
+INSTALLATION_FILES=$(DIST_FILES)
diff --git a/stepmake/bin/package-diff.py b/stepmake/bin/package-diff.py
index 0d1aba2820..e8e28f1bab 100644
--- a/stepmake/bin/package-diff.py
+++ b/stepmake/bin/package-diff.py
@@ -35,7 +35,7 @@ def help ():
 	sys.stdout.write (
 		'Generate a patch to go to current version\n'
 		'  -f, --from=FROM      old is FROM\n'
-		'  -h, --help	        print this help\n'
+		'  -h, --help           print this help\n'
 		'  -p, --package=DIR    specify package\n'
 		'  -r, --release        diff against latest release\n'  
 		'  -t, --to=TO          to version TO\n'  
@@ -58,7 +58,10 @@ def remove_automatic (dirnames):
 	for d in dirs:
 		files = files + multiple_find (['*'], [d])
 	for f in files:
-		os.remove (f)
+		try:
+			os.remove (f)
+		except:
+			sys.stderr.write ("can't remove: `" + f + "'\n'")
 
 def dirname (v):
 	# urg, again?
diff --git a/stepmake/config.make.in b/stepmake/config.make.in
index 292783aab0..a2a43b481f 100644
--- a/stepmake/config.make.in
+++ b/stepmake/config.make.in
@@ -59,6 +59,7 @@ TROFF = @TROFF@
 YODL= @YODL@
 YODL2HTML= @YODL2HTML@
 YODL2LATEX= @YODL2LATEX@
+YODL2LESS_DIR= @YODL2LESS_DIR@
 YODL2MAN= @YODL2MAN@
 YODL2MSLESS= @YODL2MSLESS@
 YODL2TEXINFO= @YODL2TEXINFO@
diff --git a/stepmake/configure b/stepmake/configure
index 13f46dff90..34691c9722 100755
--- a/stepmake/configure
+++ b/stepmake/configure
@@ -593,6 +593,15 @@ fi
         PACKAGE=`echo $PACKAGE_NAME | tr '[a-z]' '[A-Z]'`
     package=`echo $PACKAGE_NAME | tr '[A-Z]' '[a-z]'`
     
+    # No versioning on directory names of sub-packages 
+    # urg, urg
+    stepmake=${datadir}/stepmake
+    presome=${prefix}
+    if test "$prefix" = "NONE"; then
+	    presome=${ac_default_prefix}
+    fi
+    stepmake=`echo ${stepmake} | sed "s!\\\${prefix}!$presome!"`
+
     if test "x$PACKAGE" = "xSTEPMAKE"; then
         echo Stepmake package!
 	(cd stepmake; rm -f stepmake; ln -s ../stepmake .)
@@ -616,10 +625,38 @@ ac_config_guess=$ac_aux_dir/config.guess
 ac_config_sub=$ac_aux_dir/config.sub
 ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
 
+	stepmake=stepmake
     else
         echo Package: $PACKAGE
+	# Check for installed stepmake
+	if test -d $stepmake; then
+	    echo Using installed stepmake: $stepmake
+	else
+	    stepmake='$(depth)'/stepmake
+	    echo Using local stepmake: $datadir/stepmake not found
+	fi
 	ac_aux_dir=
-for ac_dir in stepmake/bin $srcdir/stepmake/bin; do
+for ac_dir in \
+	  $HOME/usr/local/share/stepmake/bin\
+	  $HOME/usr/local/lib/stepmake/bin\
+	  $HOME/usr/share/stepmake/bin\
+	  $HOME/usr/lib/stepmake/bin\
+	  /usr/local/share/stepmake/bin\
+	  /usr/local/lib/stepmake/bin\
+	  /usr/share/stepmake/bin\
+	  /usr/lib/stepmake/bin\
+	  stepmake/bin\
+	 $srcdir/\
+	  $HOME/usr/local/share/stepmake/bin\
+	  $HOME/usr/local/lib/stepmake/bin\
+	  $HOME/usr/share/stepmake/bin\
+	  $HOME/usr/lib/stepmake/bin\
+	  /usr/local/share/stepmake/bin\
+	  /usr/local/lib/stepmake/bin\
+	  /usr/share/stepmake/bin\
+	  /usr/lib/stepmake/bin\
+	  stepmake/bin\
+	; do
   if test -f $ac_dir/install-sh; then
     ac_aux_dir=$ac_dir
     ac_install_sh="$ac_aux_dir/install-sh -c"
@@ -631,7 +668,27 @@ for ac_dir in stepmake/bin $srcdir/stepmake/bin; do
   fi
 done
 if test -z "$ac_aux_dir"; then
-  { echo "configure: error: can not find install-sh or install.sh in stepmake/bin $srcdir/stepmake/bin" 1>&2; exit 1; }
+  { echo "configure: error: can not find install-sh or install.sh in \
+	  $HOME/usr/local/share/stepmake/bin\
+	  $HOME/usr/local/lib/stepmake/bin\
+	  $HOME/usr/share/stepmake/bin\
+	  $HOME/usr/lib/stepmake/bin\
+	  /usr/local/share/stepmake/bin\
+	  /usr/local/lib/stepmake/bin\
+	  /usr/share/stepmake/bin\
+	  /usr/lib/stepmake/bin\
+	  stepmake/bin\
+	 $srcdir/\
+	  $HOME/usr/local/share/stepmake/bin\
+	  $HOME/usr/local/lib/stepmake/bin\
+	  $HOME/usr/share/stepmake/bin\
+	  $HOME/usr/lib/stepmake/bin\
+	  /usr/local/share/stepmake/bin\
+	  /usr/local/lib/stepmake/bin\
+	  /usr/share/stepmake/bin\
+	  /usr/lib/stepmake/bin\
+	  stepmake/bin\
+	" 1>&2; exit 1; }
 fi
 ac_config_guess=$ac_aux_dir/config.guess
 ac_config_sub=$ac_aux_dir/config.sub
@@ -642,6 +699,7 @@ ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
     
     
     
+    
     cat >> confdefs.h <<EOF
 #define PACKAGE "${PACKAGE_NAME}"
 EOF
@@ -659,10 +717,6 @@ EOF
     absolute_builddir="`pwd`"
     
 
-    # No versioning on directory names of sub-packages 
-    stepmake=stepmake
-    
-
     STATE_VECTOR=`ls make/STATE-VECTOR 2>/dev/null`
     if test "x$STATE_VECTOR" != "x"; then
     	STATE_VECTOR="\$(depth)/$STATE_VECTOR"
@@ -691,7 +745,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
 fi
 
 echo $ac_n "checking host system type""... $ac_c" 1>&6
-echo "configure:695: checking host system type" >&5
+echo "configure:749: checking host system type" >&5
 
 host_alias=$host
 case "$host_alias" in
@@ -716,7 +770,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:720: checking for $ac_word" >&5
+echo "configure:774: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_MAKE'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -750,7 +804,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:754: checking for $ac_word" >&5
+echo "configure:808: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_FIND'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -787,7 +841,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:791: checking for $ac_word" >&5
+echo "configure:845: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_TAR'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -821,7 +875,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:825: checking for $ac_word" >&5
+echo "configure:879: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_BASH'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -854,7 +908,7 @@ test -n "$BASH" || BASH="/bin/sh"
     # Extract the first word of "${PYTHON:-python}", so it can be a program name with args.
 set dummy ${PYTHON:-python}; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:858: checking for $ac_word" >&5
+echo "configure:912: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_PYTHON'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -923,14 +977,14 @@ fi
 	DOTEXE=.exe
        DIRSEP='\\'
  	PATHSEP=';'
-       INSTALL="\$(stepdir)/../bin/install-dot-exe.sh -c"
+       INSTALL="\$(SHELL) \$(stepdir)/../bin/install-dot-exe.sh -c"
     else
 	DIRSEP='/'
 	PATHSEP=':'
 	LN=ln
 	LN_S='ln -s'
 	ZIP="zip -r -9"
-        INSTALL="\$(stepdir)/../bin/install-sh -c"
+        INSTALL="\$(SHELL) \$(stepdir)/../bin/install-sh -c"
     fi
     
     
@@ -1004,7 +1058,7 @@ fi
 
 
     echo $ac_n "checking language""... $ac_c" 1>&6
-echo "configure:1008: checking language" >&5    
+echo "configure:1062: checking language" >&5    
     case "$language" in
       En* | en* | Am* | am* | US* | us*)
 	    lang=English;;
@@ -1037,7 +1091,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1041: checking for $ac_word" >&5
+echo "configure:1095: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_STRIPROFF'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1071,7 +1125,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1075: checking for $ac_word" >&5
+echo "configure:1129: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_YODL'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1105,7 +1159,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1109: checking for $ac_word" >&5
+echo "configure:1163: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_YODL2HTML'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1139,7 +1193,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1143: checking for $ac_word" >&5
+echo "configure:1197: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_YODL2LATEX'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1172,7 +1226,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1176: checking for $ac_word" >&5
+echo "configure:1230: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_YODL2MAN'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1206,7 +1260,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1210: checking for $ac_word" >&5
+echo "configure:1264: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_YODL2MSLESS'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1240,7 +1294,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1244: checking for $ac_word" >&5
+echo "configure:1298: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_YODL2TEXINFO'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1274,7 +1328,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1278: checking for $ac_word" >&5
+echo "configure:1332: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_YODL2TXT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1303,6 +1357,7 @@ test -n "$YODL2TXT" && break
 done
 test -n "$YODL2TXT" || YODL2TXT="-echo no yodl"
 
+	YODL2LESS_DIR='$(bindir)/'
     else
 	
 	
@@ -1312,6 +1367,7 @@ test -n "$YODL2TXT" || YODL2TXT="-echo no yodl"
 	
 	
 	
+	
 	export STRIPROFF YODL YODL2HTML YODL2LATEX YODL2MAN YODL2MSLESS YODL2TEXINFO YODL2TXT
     fi
     if test "x$YODL" = "-echo no yodl"; then
@@ -1330,7 +1386,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1334: checking for $ac_word" >&5
+echo "configure:1390: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_MAKEINFO'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1493,13 +1549,13 @@ s%@includedir@%$includedir%g
 s%@oldincludedir@%$oldincludedir%g
 s%@infodir@%$infodir%g
 s%@mandir@%$mandir%g
+s%@stepmake@%$stepmake%g
 s%@package@%$package%g
 s%@PACKAGE@%$PACKAGE%g
 s%@PACKAGE_NAME@%$PACKAGE_NAME%g
 s%@package_depth@%$package_depth%g
 s%@AUTOGENERATE@%$AUTOGENERATE%g
 s%@absolute_builddir@%$absolute_builddir%g
-s%@stepmake@%$stepmake%g
 s%@STATE_VECTOR@%$STATE_VECTOR%g
 s%@CONFIGSUFFIX@%$CONFIGSUFFIX%g
 s%@host@%$host%g
@@ -1528,6 +1584,7 @@ s%@YODL2MAN@%$YODL2MAN%g
 s%@YODL2MSLESS@%$YODL2MSLESS%g
 s%@YODL2TEXINFO@%$YODL2TEXINFO%g
 s%@YODL2TXT@%$YODL2TXT%g
+s%@YODL2LESS_DIR@%$YODL2LESS_DIR%g
 s%@MAKEINFO@%$MAKEINFO%g
 
 CEOF
diff --git a/stepmake/make/GNUmakefile b/stepmake/make/GNUmakefile
index c204b04dc2..fab275e872 100644
--- a/stepmake/make/GNUmakefile
+++ b/stepmake/make/GNUmakefile
@@ -1,7 +1,7 @@
 # file	   make/Makefile 
 
 depth = ..
-STEPMAKE_TEMPLATES=makedir
+STEPMAKE_TEMPLATES=makedir install
 BLURBS=BLURB # COPERTINA FLAPTEKST
 
 ifneq ($(strip $(state-vector)),)
@@ -10,4 +10,5 @@ endif
 
 include $(depth)/make/stepmake.make 
 
-
+INSTALLATION_DIR=$(datadir)/make
+INSTALLATION_FILES=$(DIST_FILES)
diff --git a/stepmake/make/out/stepmake.lsm b/stepmake/make/out/stepmake.lsm
index c5f611a824..004a96b08c 100644
--- a/stepmake/make/out/stepmake.lsm
+++ b/stepmake/make/out/stepmake.lsm
@@ -1,15 +1,15 @@
 Begin3
 Title: StepMake
-Version: 0.1.56
-Entered-date: 14OCT98
+Version: 0.1.59
+Entered-date: 23OCT98
 Description: 
 Keywords: music notation typesetting midi fonts engraving
 Author: janneke@gnu.org (Jan Nieuwenhuizen)
 	hanwen@cs.ruu.nl (Han-Wen Nienhuys)
 Maintained-by: janneke@gnu.org (Jan Nieuwenhuizen)
 Primary-site: sunsite.unc.edu /pub/Linux/apps/sound/convert
-	40k stepmake-0.1.56.tar.gz 
+	40k stepmake-0.1.59.tar.gz 
 Original-site: pcnov095.win.tue.nl /pub/lilypond/development/
-	40k stepmake-0.1.56.tar.gz 
+	40k stepmake-0.1.59.tar.gz 
 Copying-policy: GPL
 End
diff --git a/stepmake/make/out/stepmake.spec b/stepmake/make/out/stepmake.spec
index bc6591be30..5131d881e9 100644
--- a/stepmake/make/out/stepmake.spec
+++ b/stepmake/make/out/stepmake.spec
@@ -1,9 +1,9 @@
 Name: stepmake
-Version: 0.1.56
+Version: 0.1.59
 Release: 1
 Copyright: GPL
 Group: Development
-Source0: pcnov095.win.tue.nl:/pub/lilypond/development/stepmake-0.1.56.tar.gz
+Source0: pcnov095.win.tue.nl:/pub/lilypond/development/stepmake-0.1.59.tar.gz
 Summary: generic make package
 Packager: janneke@gnu.org (Jan Nieuwenhuizen)
 Buildroot: /tmp/stepmake-install
diff --git a/stepmake/make/toplevel.make.in b/stepmake/make/toplevel.make.in
index 4541064055..f471aaee77 100644
--- a/stepmake/make/toplevel.make.in
+++ b/stepmake/make/toplevel.make.in
@@ -8,11 +8,11 @@ depth = .
 
 # descent order into subdirectories:
 #
+ifeq ($(PACKAGE),STEPMAKE)
 SUBDIRS = bin make stepmake Documentation
-#
-
-# bootstrap stepmake:
-#
+else
+SUBDIRS =
+endif
 #
 
 # list of distribution files:
@@ -22,7 +22,6 @@ README_FILES = NEWS README TODO
 README_TXT_FILES = AUTHORS.txt INSTALL.txt
 EXTRA_DIST_FILES = $(IN_FILES) VERSION $(README_FILES)  $(SCRIPTS) 
 NON_ESSENTIAL_DIST_FILES = $(README_TXT_FILES)
-
 #
 
 # bootstrap stepmake:
@@ -31,3 +30,21 @@ STEPMAKE_TEMPLATES=toplevel
 include $(depth)/make/stepmake.make 
 #
 
+# descent order into subdirectories:
+#
+ifeq ($(PACKAGE),STEPMAKE)
+SUBDIRS = bin make stepmake Documentation
+else
+SUBDIRS =
+endif
+#
+
+#urg urg
+stepmake/aclocal.m4:
+	-$(LN) aclocal.m4 $@
+
+ifeq ($(PACKAGE),STEPMAKE)
+INSTALLATION_DIR=$(datadir)
+INSTALLATION_FILES=$(DIST_FILES) $(NON_ESSENTIAL_DIST_FILES) GNUmakefile config.make config.status
+include $(stepdir)/install-targets.make
+endif
diff --git a/stepmake/stepmake/GNUmakefile b/stepmake/stepmake/GNUmakefile
index 72d8b8047a..7bdbd3c278 100644
--- a/stepmake/stepmake/GNUmakefile
+++ b/stepmake/stepmake/GNUmakefile
@@ -10,9 +10,12 @@ depth = ..
 SUBDIRS =
 #
 
-STEPMAKE_TEMPLATES=makedir
-
+STEPMAKE_TEMPLATES=makedir install
 
 # bootstrap stepmake:
 #
 -include $(depth)/make/stepmake.make 
+
+INSTALLATION_DIR=$(datadir)/stepmake
+INSTALLATION_FILES=GNUmakefile $(MAKE_FILES)
+
diff --git a/stepmake/stepmake/documentation-targets.make b/stepmake/stepmake/documentation-targets.make
index 862eebf7f7..59c1b1ecc0 100644
--- a/stepmake/stepmake/documentation-targets.make
+++ b/stepmake/stepmake/documentation-targets.make
@@ -30,7 +30,7 @@ $(outdir)/$(package).info: $(outdir)/topinfo.texinfo $(OUTTEXINFO_FILES)
 # what to do here?
 ifneq ($(strip $(INFO_FILES)),)
 
-INFOINSTALL=$(MAKE) INSTALLATION_OUT_DIR=$(infodir) depth=$(depth) INSTALLATION_OUT_FILES="$(INFO_FILES)" -f $(stepdir)/install-outfiles.sub.make $@
+INFOINSTALL=$(MAKE) INSTALLATION_OUT_DIR=$(infodir) depth=$(depth) INSTALLATION_OUT_FILES="$(INFO_FILES)" -f $(stepdir)/install-out.sub.make $@
 
 localinstall: # $(INFO_FILES)
 	-$(INSTALL) -d $(infodir)
diff --git a/stepmake/stepmake/executable-vars.make b/stepmake/stepmake/executable-vars.make
index 1bb8bf6d7f..fb32b06344 100644
--- a/stepmake/stepmake/executable-vars.make
+++ b/stepmake/stepmake/executable-vars.make
@@ -1 +1,5 @@
 # empty
+LDFLAGS = $(ILDFLAGS) $(USER_LDFLAGS) $(EXTRA_LDFLAGS) $(MODULE_LDFLAGS) $($(PACKAGE)_LDFLAGS)
+
+MODULE_LIBES=$(addsuffix /$(outdir)/library.a, $(MODULE_LIBS))
+LOADLIBES = $(MODULE_LIBES) $($(PACKAGE)_LIBES) $(EXTRA_LIBES) $(BLA_LIBES)#u8gh
diff --git a/stepmake/stepmake/generic-targets.make b/stepmake/stepmake/generic-targets.make
index 3ca5d629f1..1d368b0a4b 100644
--- a/stepmake/stepmake/generic-targets.make
+++ b/stepmake/stepmake/generic-targets.make
@@ -86,6 +86,9 @@ doc++:
 
 
 local-dist: $(DIST_FILES) $(OUT_DIST_FILES) $(NON_ESSENTIAL_DIST_FILES)
+#	echo topdir=$(topdir)
+#	echo distdir=$(distdir)
+#	echo locladir=$(localdir)
 	mkdir -p $(distdir)/$(localdir)
 	$(LN) $(DIST_FILES) $(distdir)/$(localdir)
 
@@ -99,7 +102,9 @@ local-dist: $(DIST_FILES) $(OUT_DIST_FILES) $(NON_ESSENTIAL_DIST_FILES)
 		mkdir $(distdir)/$(localdir)/out; \
 		$(LN) $(OUT_DIST_FILES) $(distdir)/$(localdir)/out;; \
 	esac
-	$(foreach i, $(SUBDIRS), $(MAKE) distdir=../$(distdir) localdir=$(localdir)/$(i) -C $(i) local-dist &&) true
+#	$(foreach i, $(SUBDIRS), $(MAKE) distdir=../$(distdir) localdir=$(localdir)/$(i) -C $(i) local-dist &&) true
+# absolute for installed stepmake
+	$(foreach i, $(SUBDIRS), $(MAKE) topdir=$(topdir) distdir=$(distdir) localdir=$(localdir)/$(notdir $(i)) -C $(i) local-dist &&) true
 
 
 
@@ -118,7 +123,7 @@ $(outdir)/VERSION: $(depth)/VERSION
 	cp $< $@
 
 $(outdir)/version.hh: $(outdir)/VERSION
-	sh ./$(step-bindir)/make-version.sh $< > $@
+	sh $(step-bindir)/make-version.sh $< > $@
 
 # should this be in Rules?
 configure: configure.in aclocal.m4
diff --git a/stepmake/stepmake/generic-vars.make b/stepmake/stepmake/generic-vars.make
index 223c59d093..811dd0d3a2 100644
--- a/stepmake/stepmake/generic-vars.make
+++ b/stepmake/stepmake/generic-vars.make
@@ -13,20 +13,21 @@
 # not eh, normally used
 DEPTH = $(depth)/$(package-depth)
 
+# topdir := $(shell cd $(depth); pwd)
+ifeq ($(topdir),)
 topdir := $(shell cd $(depth); pwd)
+endif
 pwd := $(shell pwd)
 
-
 # derived names
 ifeq ($(distdir),)
-  distdir = $(depth)/$(outdir)/$(DIST_NAME)
+#  distdir = $(depth)/$(outdir)/$(DIST_NAME)
+# must be absolute for 'make dist' with installed stepmake
+  distdir = $(topdir)/$(outdir)/$(DIST_NAME)
   DIST_NAME = $(package)-$(TOPLEVEL_VERSION)
 endif
 distname = $(package)-$(TOPLEVEL_VERSION)
 
-
-
-
 # obsolete?
 makeout = $(depth)/make/$(outdir)
 docout = $(depth)/Documentation/$(outdir)
@@ -38,8 +39,9 @@ po-dir = $(depth)/po
 # sort-out which of these are still needed
 #
 $(package)_bindir = $(depth)/bin
-step-bindir = $(depth)/$(stepmake)/bin
-abs-step-bindir = $(topdir)/$(stepmake)/bin
+step-bindir = $(stepmake)/bin
+# deprecated
+# abs-step-bindir = $(topdir)/$(stepmake)/bin
 #
 group-dir = $(shell cd $(DEPTH)/..; pwd)
 release-dir = $(group-dir)/releases
@@ -83,10 +85,7 @@ date := $(shell date +%x)	#duplicated?
 ARFLAGS = ru
 
 INCLUDES =  include $(outdir) $($(PACKAGE)_INCLUDES)
-LDFLAGS = $(ILDFLAGS) $(USER_LDFLAGS) $(EXTRA_LDFLAGS) $(MODULE_LDFLAGS) $($(PACKAGE)_LDFLAGS)
 
-MODULE_LIBES=$(addsuffix /$(outdir)/library.a, $(MODULE_LIBS))
-LOADLIBES = $(MODULE_LIBES) $($(PACKAGE)_LIBES) $(EXTRA_LIBES)
 # urg: for windows ?
 # LOADLIBES = $(MODULE_LIBES) $($(PACKAGE)_LIBES) $(EXTRA_LIBES) -lstdc++
 #
@@ -134,7 +133,7 @@ endif
 
 # substitute $(STRIP) in Site.make if you want stripping
 DO_STRIP=true
-LOOP=$(foreach i,  $(SUBDIRS),  $(MAKE) -C $(i) $@ &&) true
+LOOP=$(foreach i,  $(SUBDIRS), $(MAKE) PACKAGE=$(PACKAGE) -C $(i) $@ &&) true
 
 
 include $(stepdir)/files.make
diff --git a/stepmake/stepmake/install-out-rules.make b/stepmake/stepmake/install-out-rules.make
new file mode 100644
index 0000000000..841db19676
--- /dev/null
+++ b/stepmake/stepmake/install-out-rules.make
@@ -0,0 +1,2 @@
+
+#empty
diff --git a/stepmake/stepmake/install-out-targets.make b/stepmake/stepmake/install-out-targets.make
new file mode 100644
index 0000000000..eb445927a9
--- /dev/null
+++ b/stepmake/stepmake/install-out-targets.make
@@ -0,0 +1,41 @@
+# install-out-targets.make
+
+localinstall: localinstall-files localinstall-outfiles
+
+localinstall-files:
+
+# urg, parameterise
+localinstall-outfiles: $(INSTALLATION_OUT_FILES) $(INSTALLATION_OUT_FILES1) $(INSTALLATION_OUT_FILES2)
+	-$(INSTALL) -d $(INSTALLATION_OUT_DIR)
+	$(foreach i, $(INSTALLATION_OUT_FILES), \
+		$(INSTALL) -m 644 $(i) $(INSTALLATION_OUT_DIR) && )true
+ifneq ($(strip $(INSTALLATION_OUT_FILES1)),)
+	-$(INSTALL) -d $(INSTALLATION_OUT_DIR1)
+	$(foreach i, $(INSTALLATION_OUT_FILES1), \
+		$(INSTALL) -m 644 $(i) $(INSTALLATION_OUT_DIR1) && )true
+endif
+ifneq ($(strip $(INSTALLATION_OUT_FILES2)),)
+	-$(INSTALL) -d $(INSTALLATION_OUT_DIR2)
+	$(foreach i, $(INSTALLATION_OUT_FILES2), \
+		$(INSTALL) -m 644 $(i) $(INSTALLATION_OUT_DIR2) && )true
+endif
+
+localuninstall: localuninstall-outfiles localuninstall-files 
+
+localuninstall-files:
+
+localuninstall-outfiles:
+	$(foreach  i, $(notdir $(INSTALLATION_OUT_FILES)), \
+		rm -f $(INSTALLATION_OUT_DIR)/$(i) && ) true
+	-rmdir $(INSTALLATION_OUT_DIR)
+ifneq ($(strip $(INSTALLATION_OUT_FILES1)),)
+	$(foreach  i, $(notdir $(INSTALLATION_OUT_FILES1)), \
+		rm -f $(INSTALLATION_OUT_DIR1)/$(i) && ) true
+	-rmdir $(INSTALLATION_OUT_DIR1)
+endif
+ifneq ($(strip $(INSTALLATION_OUT_FILES2)),)
+	$(foreach  i, $(notdir $(INSTALLATION_OUT_FILES2)), \
+		rm -f $(INSTALLATION_OUT_DIR2)/$(i) && ) true
+	-rmdir $(INSTALLATION_OUT_DIR2)
+endif
+#	-(cd $(INSTALLATION_OUT_DIR)/..; dir=`dirname \`pwd\`` cd ..; rmdir $$dir)
diff --git a/stepmake/stepmake/install-out-vars.make b/stepmake/stepmake/install-out-vars.make
new file mode 100644
index 0000000000..841db19676
--- /dev/null
+++ b/stepmake/stepmake/install-out-vars.make
@@ -0,0 +1,2 @@
+
+#empty
diff --git a/stepmake/stepmake/install-out.sub.make b/stepmake/stepmake/install-out.sub.make
new file mode 100644
index 0000000000..cd95c35f5b
--- /dev/null
+++ b/stepmake/stepmake/install-out.sub.make
@@ -0,0 +1,5 @@
+# install-out.sub.make
+
+include $(depth)/make/stepmake.make
+include $(stepdir)/install-out-targets.make
+
diff --git a/stepmake/stepmake/install-outfiles.make b/stepmake/stepmake/install-outfiles.make
deleted file mode 100644
index b4f2539f8c..0000000000
--- a/stepmake/stepmake/install-outfiles.make
+++ /dev/null
@@ -1,15 +0,0 @@
-# Initial_outfiles.make
-
-localinstall: localinstall-files
-
-localinstall-files: $(INSTALLATION_OUT_FILES)
-	-$(INSTALL) -d $(INSTALLATION_OUT_DIR)
-	$(foreach i, $(INSTALLATION_OUT_FILES), \
-		$(INSTALL) -m 644 $(i) $(INSTALLATION_OUT_DIR) && )true
-
-localuninstall: localuninstall-files
-
-localuninstall-files:
-	$(foreach  i, $(notdir $(INSTALLATION_OUT_FILES)), \
-		rm -f $(INSTALLATION_OUT_DIR)/$(i) && ) true
-	-rmdir $(INSTALLATION_OUT_DIR)
diff --git a/stepmake/stepmake/install-outfiles.sub.make b/stepmake/stepmake/install-outfiles.sub.make
deleted file mode 100644
index a9a306bc0b..0000000000
--- a/stepmake/stepmake/install-outfiles.sub.make
+++ /dev/null
@@ -1,5 +0,0 @@
-# Initial_outfiles.sub.make
-
-include $(depth)/make/stepmake.make
-include $(stepdir)/install-outfiles.make
-
diff --git a/stepmake/stepmake/install-rules.make b/stepmake/stepmake/install-rules.make
new file mode 100644
index 0000000000..841db19676
--- /dev/null
+++ b/stepmake/stepmake/install-rules.make
@@ -0,0 +1,2 @@
+
+#empty
diff --git a/stepmake/stepmake/install-targets.make b/stepmake/stepmake/install-targets.make
new file mode 100644
index 0000000000..aa648c3541
--- /dev/null
+++ b/stepmake/stepmake/install-targets.make
@@ -0,0 +1,49 @@
+# install-targets.make
+
+localinstall: localinstall-files localinstall-outfiles
+
+localinstall-outfiles:
+
+# urg, parameterise
+localinstall-files:
+	$(PRE_INSTALL)
+	-$(INSTALL) -d $(INSTALLATION_DIR)
+	$(foreach i,  $(INSTALLATION_FILES),\
+		$(INSTALL) -m 644 $(i) $(INSTALLATION_DIR) &&)true
+	$(POST_INSTALL)
+ifneq ($(strip $(INSTALLATION_FILES1)),)
+	$(PRE_INSTALL1)
+	-$(INSTALL) -d $(INSTALLATION_DIR1)
+	$(foreach i,  $(INSTALLATION_FILES1),\
+		$(INSTALL) -m 644 $(i) $(INSTALLATION_DIR1) &&)true
+	$(POST_INSTALL1)
+endif
+ifneq ($(strip $(INSTALLATION_FILES2)),)
+	$(PRE_INSTALL2)
+	-$(INSTALL) -d $(INSTALLATION_DIR2)
+	$(foreach i,  $(INSTALLATION_FILES2),\
+		$(INSTALL) -m 644 $(i) $(INSTALLATION_DIR2) &&)true
+	$(POST_INSTALL2)
+endif
+
+localuninstall: localuninstall-outfiles localuninstall-files 
+
+localuninstall-outfiles:
+
+localuninstall-files:
+	$(foreach i,  $(INSTALLATION_FILES),\
+		rm -f $(INSTALLATION_DIR)/$(i) && ) true
+	-$(foreach i, $(SUBDIRS), rmdir $(INSTALLATION_DIR)/$(i); )
+	-rmdir $(INSTALLATION_DIR)
+ifneq ($(strip $(INSTALLATION_FILES1)),)
+	$(foreach i,  $(INSTALLATION_FILES1),\
+		rm -f $(INSTALLATION_DIR1)/$(i) && ) true
+	-$(foreach i, $(SUBDIRS), rmdir $(INSTALLATION_DIR1)/$(i); )
+	-rmdir $(INSTALLATION_DIR1)
+endif
+ifneq ($(strip $(INSTALLATION_FILES2)),)
+	$(foreach i,  $(INSTALLATION_FILES2),\
+		rm -f $(INSTALLATION_DIR2)/$(i) && ) true
+	-$(foreach i, $(SUBDIRS), rmdir $(INSTALLATION_DIR2)/$(i); )
+	-rmdir $(INSTALLATION_DIR2)
+endif
diff --git a/stepmake/stepmake/install-vars.make b/stepmake/stepmake/install-vars.make
new file mode 100644
index 0000000000..841db19676
--- /dev/null
+++ b/stepmake/stepmake/install-vars.make
@@ -0,0 +1,2 @@
+
+#empty
diff --git a/stepmake/stepmake/install.sub.make b/stepmake/stepmake/install.sub.make
new file mode 100644
index 0000000000..7a4dc59e2b
--- /dev/null
+++ b/stepmake/stepmake/install.sub.make
@@ -0,0 +1,5 @@
+# install.sub.make
+
+include $(depth)/make/stepmake.make
+include $(stepdir)/install-targets.make
+
diff --git a/stepmake/stepmake/installfiles.make b/stepmake/stepmake/installfiles.make
deleted file mode 100644
index 58d10e30cf..0000000000
--- a/stepmake/stepmake/installfiles.make
+++ /dev/null
@@ -1,15 +0,0 @@
-# Installfiles.make
-
-localinstall: localinstall-files
-
-localinstall-files:
-	-$(INSTALL) -d $(INSTALLATION_DIR)
-	$(foreach i,  $(INSTALLATION_FILES),\
-		$(INSTALL) -m 644 $(i) $(INSTALLATION_DIR) &&)true
-
-localuninstall: localuninstall-files
-
-localuninstall-files:
-	$(foreach i,  $(INSTALLATION_FILES),\
-		rm -f $(INSTALLATION_DIR)/$(i) && ) true
-	-rmdir $(INSTALLATION_DIR)
diff --git a/stepmake/stepmake/metapost-rules.make b/stepmake/stepmake/metapost-rules.make
index 866786d15b..a33b8cdd52 100644
--- a/stepmake/stepmake/metapost-rules.make
+++ b/stepmake/stepmake/metapost-rules.make
@@ -4,7 +4,7 @@ $(outdir)/%.pfa: %.mf
 # i've got no idea what this scaling could be for, on both sides...
 # it seems that 'low_res', which should be all we ever need according
 # to the metapost mfplain guru, really does 200dpi, iso 600dpi (minimun)
-	$(METAPOST) "&mfplain \mode=lowres; \mag=100.0; batchmode; input $<"
+	-$(METAPOST) "&mfplain \mode=lowres; \mag=100.0; batchmode; input $<"
 #	-$(METAPOST) "&mfmp \mode=ljfour; \mag=100.0; batchmode; input $<"
 	$(PYTHON) $(depth)/buildscripts/ps-to-pfa.py $<
 	rm -f $(basename $(@F)).[0-9]*
diff --git a/stepmake/stepmake/toplevel-targets.make b/stepmake/stepmake/toplevel-targets.make
index b5423aa25d..32e734cba2 100644
--- a/stepmake/stepmake/toplevel-targets.make
+++ b/stepmake/stepmake/toplevel-targets.make
@@ -13,9 +13,10 @@ local-maintainerclean:
 GNUmakefile: make/toplevel.make.in
 	$(MAKE) INFILE=$< OUTFILE=$@ -f $(stepdir)/automatically-generated.sub.make
 
-aclocal.m4: $(stepdir)/../aclocal.m4
+ifneq ($(PACKAGE),STEPMAKE)
+aclocal.m4: $(stepmake)/aclocal.m4
 	$(MAKE) INFILE=$< OUTFILE=$@ LINECOMMENT=dnl -f $(stepdir)/automatically-generated.sub.make
-
+endif
 
 local-WWW: #index.html 
 
@@ -35,7 +36,7 @@ dist:
 # ugh.
 # Can't compare "stage1" dist with "stage2" dist in this way?
 	-ln -f $(depth)/$(outdir)/$(distname).tar.gz $(release-dir)
-	rm -rf ./$(distdir)/
+	rm -rf $(distdir)/
 
 local-help:
 	@echo -e "\
diff --git a/tex/GNUmakefile b/tex/GNUmakefile
index 86bf7797b0..1befb1f496 100644
--- a/tex/GNUmakefile
+++ b/tex/GNUmakefile
@@ -6,10 +6,10 @@ depth = ..
 TEX_FILES = $(wildcard *.tex)
 
 EXTRA_DIST_FILES =  $(TEX_FILES) lilyponddefs.ps
+STEPMAKE_TEMPLATES=install
 
 INSTALLATION_DIR=$(datadir)/tex/
 INSTALLATION_FILES=$(TEX_FILES)
 
 include $(depth)/make/stepmake.make
-include $(stepdir)/installfiles.make
 
diff --git a/tex/lilyponddefs.ps b/tex/lilyponddefs.ps
index b3ba94564e..467dc4589a 100644
--- a/tex/lilyponddefs.ps
+++ b/tex/lilyponddefs.ps
@@ -15,7 +15,8 @@
 {
 	/object exch def
 	gsave
-	exch translate
+	%exch translate
+	translate
 	0 0 moveto
 	object
 	grestore
@@ -67,7 +68,7 @@
 	stafflinethickness 1.6 mul widthbar
 } bind def
 
-/maatstreep
+/maatstreep % height
 {
 	thinbar
 } bind def
@@ -77,8 +78,9 @@
 	thickbar
 } bind def
 
-/generalmeter
+/generalmeter % num den
 {
+	pop pop
 } bind def
 
 /pianobrace
@@ -110,7 +112,8 @@
 	yoffset staffheight 8 mul sub /yoffset exch def
 } bind def
 
-/unknown {} bind def
+/unknown { (U) show} bind def
+/empty {(E) show} bind def
 
 /turnOnExperimentalFeatures { } bind def
 
-- 
2.39.5