From: Han-Wen Nienhuys <hanwen@xs4all.nl>
Date: Mon, 12 May 1997 22:32:15 +0000 (+0200)
Subject: release: 0.0.61
X-Git-Tag: release/0.0.61
X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=52102901e53611ad7bad111c2f9d414d2e593bc3;p=lilypond.git

release: 0.0.61
---

diff --git a/.version b/.version
index d3c588005d..6ede8d6ba5 100644
--- a/.version
+++ b/.version
@@ -1,6 +1,6 @@
 TOPLEVEL_MAJOR_VERSION = 0
 TOPLEVEL_MINOR_VERSION = 0
-TOPLEVEL_PATCH_LEVEL = 60
+TOPLEVEL_PATCH_LEVEL = 61
 # use to send patches, always empty for released version:
 # include separator: ".postfix", "-pl" makes rpm barf
 
diff --git a/Documentation/faq.pod b/Documentation/faq.pod
index 4aeef3751f..01445ded16 100644
--- a/Documentation/faq.pod
+++ b/Documentation/faq.pod
@@ -6,6 +6,15 @@ FAQ - GNU LilyPond FAQs
 
 Some questions that have been answered before.
 
+=head2 Installing
+
+Q: I get all kinds of errors while  compiling parser.cc
+
+A: LilyPond uses features of bison version 1.25. Please confirm that
+you are using a version 1.25 or better. If the problem persists, then
+please mail me.
+
+
 =head2 Language: mudela
 
 Q: Why can't you type C<#c> in stead of C<cis> ?
diff --git a/Documentation/lilypond.pod b/Documentation/lilypond.pod
index 1de734b053..2d71f9971f 100644
--- a/Documentation/lilypond.pod
+++ b/Documentation/lilypond.pod
@@ -244,6 +244,13 @@ http://www.stack.nl/~hanwen/lilypond/index.html. This webpage contains
 the MIDI, GIF and PS files for some standard music files. It also has
 the complete LilyPond documentation
 
+A mailing list for GNU LilyPond has been setup, it's at
+lilypond@gnu.ai.mit.edu. To subscribe, send mail to
+lilypond-request@gnu.ai.mit.edu.
+
+For discussions concerning the GNU Music project, 
+gnu-music-discuss@vanderbilt. .edu
+
 =head1  REMARKS
 
 GNU LilyPond has no connection with the music package Rosegarden, other
diff --git a/NEWS b/NEWS
index b44d208d44..f21cc70d03 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,24 @@
+pl 61
+	- scales.ly bugfix: dimensions default to ((0,0),(0,0))
+	- naming: PointerList->Pointer_list
+	- tied notes don't get accidental
+	- bf: crescendo size
+	- fixes: make_patch,
+	- bf: _"text" direction
+	- mailing list into lilypond.pod
+
+pl 60.mb
+	- set_flower_debug: Warning if -d is used when NPRINT is defined.
+	- Fixed several TeX details. vcenter renamed since it interfered
+	  with LaTeX. Position of accents changed.
+	- New example; scriptS.ly
+	- table_sixteen: added scriptdefinition (Lilypond breaks if a
+	  script is defined without dimensions).
+	- bf: ifndef typos in p-score.cc, choleski.cc
+	- bf: Slur::do_post_processing(), whole notes caused SIGSEGV.
+
+
+*******
 pl 60
 	- Request_register::get_feature(), tie direction, Slur direction
 	- lilypond output is now directly texable. 
@@ -13,6 +34,14 @@ pl 59
 
 ******
 may 2
+pl 58.jnc1
+	- bf: toccata-fuga-E.ly
+
+pl 57.jcn4
+ 	- mi2mu handles rests (quantified only)
+ 	- fixed configure buglet
+        - "!date" Fri May  2 02:18:12 MET DST 1997
+ 
 pl 58
 	- lexer cleanup
 	- national chars in lyrics
diff --git a/TODO b/TODO
index b65304f456..e4b56d2381 100644
--- a/TODO
+++ b/TODO
@@ -24,8 +24,7 @@ IMPORTANT
 
 	* a Hands on tutorial [HKN]
 
-
-PROJECT:
+PROJECTS
 
 	* Output class, handles 
 	- help text /(c) notice?
@@ -34,21 +33,35 @@ PROJECT:
 	- quiet/ignore-version options
 	- logfile output
 
-
 	* elaborate Staff_side baseclass:
-	 - scripts
-	 - text
-	 - slur start/end
+	- scripts
+	- text
+	- slur start/end
 
 	* Output an output format independent (ofi) typeset file; and 
 	  make ofi2 TeX, MusixTex, PostScript, Ascii... interpreters.
 	- poor man's ascii output possible?
-	- MusixTeX output possible?
+	- MusixTeX output possible? (would have to be done before break calc.)
+	- NIFF ?
 	- PostScript output (esp. Beams, Slurs, etc)
 
+	* TeX spanners , use texbeam.cc as an example
+	- Glissando
+	- trill
+	- bracket
+
+	* Rewrite Beam and Rhythmic_grouping
+	- [c8. c32 c32]
+	- interbeam height
+	- general shaving
+	- use plet grouping
+	- abbreviations [c2 c2]1/2
+	- separate visual from rhythmic info
+
 PARSER
-	* Duration-> Musical_duration, typedef Rational Duration?
+	* Duration -> Musical_duration, typedef Rational Duration?
 
+**********************
 HKN buglist:
 
 \bar || ook dunne streepjes? Sluit de balk niet af! (soms met de
@@ -60,21 +73,12 @@ Hele rusten ook in andere maatsoort dan 4/4 (en centreren in de maat)
 barcheck failed in lyric mode -> assert (zie barcheck.ly) (0.0.57)
 ------------------------/
 
-optie om te stoppen na eerste barcheck fail? (en wellicht in eerder
-stadium van preprocessing)
-
 noten staan vaak te dicht aan de rechterkant van de maatstreep.
 
 optie om nummers/markers boven maatstrepen te zetten
 
 tekst staat erg ver van notenbalken af
 
-barcheck her-synchroniseren? (evt met optie)
-
-script ^"3" onder ondanks boven?
-
-symbolen voor triller? (dus "tr---")
-
 waarom geen ; achter dingen in \paper? (\textwidth 180\mm)
 (sowieso: wanneer wel en geen ; ?)
 
@@ -88,18 +92,6 @@ midi: instrumenten definieren?
 midi: tempo halverwege het stuk wijzigen?
 midi: gebonden noten niet herhalen?
 
---------/\
-De beam van de triool klopt niet.
-        <[d8. b8.> \duration 32; <e'32*2/3 cis'32*2/3> <d'32*2/3 b32*2/3>
-        <cis'32*2/3 a32*2/3> \duration 16; <b gis> <d' fis> <cis' e>
-<b d]> |
-(zie ook ergens in lacidarem-pianoI.ly)
---------/
-scales.ly compileert niet meer (vanwege transpose?)
-
-Lengte van de stokken klopt vaak niet, zie bijv. de eerste maat van
-langestok.ly.
-
 Triolen enzo: het zou handig zijn als je het cijfer "3" ook _tussen_
 twee noten kon plaatsen. Dat is bijvoorbeeld nodig in
 c4*2/3 c8*2/3
@@ -107,27 +99,23 @@ c4*2/3 c8*2/3
 ---------------\
 \bar "||" \meter 6/8; op het eind van de regel staat door elkaar
 gedrukt.
-
+****************
 
 BUGS
 
 	* detect -pipe
 	
+	* staccato dot positions.
+
+	* stacked scripts.
+
 	* redo timing stuff <-> pulk to allow \meter 2/4; e2. to work
 	out correctly
 
 	* key transposition.
 
-	* hairpin width
-
 	* help-lines for rests
 
-	* [c8. c32 c32]
-
-	* \duration 8; e*2/3
-
-	* cis ( | ) cis
-
 	* lilypond - -> crash
 
 	* chlapik balk ruimte 
@@ -155,6 +143,9 @@ INPUTLANGUAGE
 
 	* relative mode for pitch entering
 
+	* \duration 8; e*2/3
+
+
 	* configure pitch_byte
 
 	* special key.
@@ -169,6 +160,8 @@ INPUTLANGUAGE
 
 SMALLISH PROJECTS
 
+	* write Dynamic_line (to group dynamics horizontally)
+
 	* write Rest_collision
 
 	* use Real for y positions.
@@ -218,9 +211,6 @@ SMALLISH PROJECTS
 
 	* stafftypes: voice names/ instrument names.
 
-	* Lookup::tex_glissando, Lookup::tex_bracket,  (use texbeam.cc as an
-	example.)
-
 	* Decent TeX titledefs (\tempo, \metron, etc. )
 
 	* C meter iso 4/4
@@ -263,8 +253,6 @@ FUTURE
 
 	* put scripts on bars
 
-	* glissando
-
 	* guitar chord
 
 	* Junk Staff_column, and find the requests while walking the Voices.?
@@ -301,10 +289,11 @@ IDEAS
 
 	* move MIDI stuff (including Quantization) to a ANSI C libmidi library.
 
-	* use an embedded language: scheme, lisp, S-lang, Perl, GUILE, ?
+	* use an embedded language: Python, Scheme?
 	for : 
 		- Items/Spanners
 		- Registers
+		- Complex mudela
 
 	* y -dims in internote?
 
@@ -350,3 +339,4 @@ IDEAS
 	    %  --|---         --|---
           (where "to" is a tiny bow)
 
+	* move towards incremental algorithms.
diff --git a/bin/make_patch b/bin/make_patch
index 8ec7326f7b..a70faaeea5 100755
--- a/bin/make_patch
+++ b/bin/make_patch
@@ -35,8 +35,10 @@ then
    tar zfx $oldarc
 fi
 
-#(cd $nm$old; touch depend; make clean)
-#(cd $nm$new; touch depend; make clean)
+# not interested in auto generated files.
+for a in lilypond.lsm INSTALL.text AUTHORS.text lilypond.spec configure; do
+    rm `find  $nm$old $nm$new  -name $a`
+done    
 
 echo 'use cd source-dir; patch -E -p0 < this_patch'> patch-$new
 
diff --git a/bin/make_website b/bin/make_website
index 380a5cbca1..0f9ad202fc 100755
--- a/bin/make_website
+++ b/bin/make_website
@@ -67,10 +67,12 @@ sub gen_examples
 	    "dvips -o $a.ps $texfile;";
 
 	}
+
+	my_system "mv lelie.midi $a.midi; " 	if ( -f "lelie.midi" );
+
 	# generate the pixmap at twice the size, then rescale (for antialiasing)
 	if ( ! -f "$a.gif" ) {
-	    my_system "mv lelie.midi $a.midi; ",
-	     "gs -q -sDEVICE=ppmraw -sOutputFile=- -r200 -dNOPAUSE  $a.ps -c quit |pnmscale 0.5| ppmtogif > $a.gif",
+	    my_system "gs -q -sDEVICE=ppmraw -sOutputFile=- -r200 -dNOPAUSE  $a.ps -c quit |pnmscale 0.5| ppmtogif > $a.gif",
 	     "gzip $a.ps";
 	}   
     }
diff --git a/configure b/configure
index ce276ad5d6..9e35706c4f 100755
--- a/configure
+++ b/configure
@@ -535,7 +535,13 @@ fi
 
 
 
-
+# if given here, these vars are initted at the checking point.
+printing_b=no
+checking_b=yes
+debug_b=yes
+optimise_b=no
+profile_b=no
+    
 ac_ext=C
 # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
 ac_cpp='$CXXCPP $CPPFLAGS'
@@ -634,7 +640,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:638: checking for $ac_word" >&5
+echo "configure:644: 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
@@ -665,7 +671,7 @@ test -n "$CXX" || CXX="gcc"
 
 
 echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:669: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
+echo "configure:675: 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.
@@ -675,11 +681,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 679 "configure"
+#line 685 "configure"
 #include "confdefs.h"
 main(){return(0);}
 EOF
-if { (eval echo configure:683: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:689: \"$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
@@ -699,12 +705,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:703: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:709: 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:708: checking whether we are using GNU C++" >&5
+echo "configure:714: 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
@@ -713,7 +719,7 @@ else
   yes;
 #endif
 EOF
-if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:717: \"$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:723: \"$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
@@ -728,7 +734,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:732: checking whether ${CXX-g++} accepts -g" >&5
+echo "configure:738: 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
@@ -758,7 +764,7 @@ fi
 # 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:762: checking for $ac_word" >&5
+echo "configure:768: 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
@@ -814,7 +820,7 @@ ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
 # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
 # ./install, which can be erroneously created by make from ./install.sh.
 echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:818: checking for a BSD compatible install" >&5
+echo "configure:824: checking for a BSD compatible install" >&5
 if test -z "$INSTALL"; then
 if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -868,7 +874,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:872: checking for $ac_word" >&5
+echo "configure:878: 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
@@ -918,7 +924,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:922: checking for $ac_word" >&5
+echo "configure:928: 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
@@ -952,7 +958,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:956: checking for $ac_word" >&5
+echo "configure:962: 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
@@ -986,7 +992,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:990: checking for $ac_word" >&5
+echo "configure:996: 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
@@ -1020,7 +1026,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:1024: checking for $ac_word" >&5
+echo "configure:1030: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_PODMAN'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1056,7 +1062,7 @@ if test "x$TEXPREFIX" = xauto ; then
     
 
     echo $ac_n "checking TeX/MF root dir directory""... $ac_c" 1>&6
-echo "configure:1060: checking TeX/MF root dir directory" >&5    
+echo "configure:1066: checking TeX/MF root dir directory" >&5    
 
     find_root_prefix="$prefix"
     
@@ -1094,7 +1100,7 @@ if test "x$TEXDIR" = xauto ; then
     
     
     echo $ac_n "checking TeX input directory""... $ac_c" 1>&6
-echo "configure:1098: checking TeX input directory" >&5    
+echo "configure:1104: checking TeX input directory" >&5    
     find_dirdir=`(cd $find_texprefix; 
       $FIND ./ -type d -a -name tex -print |sort|head -1|sed 's#^\./##')`
     
@@ -1116,7 +1122,7 @@ if test "x$MFDIR" = xauto; then
     
     
     echo $ac_n "checking MF input directory""... $ac_c" 1>&6
-echo "configure:1120: checking MF input directory" >&5    
+echo "configure:1126: checking MF input directory" >&5    
     find_dirdir=`(cd $find_texprefix; 
       $FIND ./ -type d -a -name source -print |sort|head -1|sed 's#^\./##')`
     
@@ -1167,7 +1173,7 @@ else
 fi
 
 echo $ac_n "checking how to run the C++ preprocessor""... $ac_c" 1>&6
-echo "configure:1171: checking how to run the C++ preprocessor" >&5
+echo "configure:1177: 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
@@ -1180,12 +1186,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 1184 "configure"
+#line 1190 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1189: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1195: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   :
@@ -1205,17 +1211,17 @@ echo "$ac_t""$CXXCPP" 1>&6
 
 ac_safe=`echo "FlexLexer.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for FlexLexer.h""... $ac_c" 1>&6
-echo "configure:1209: checking for FlexLexer.h" >&5
+echo "configure:1215: 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 1214 "configure"
+#line 1220 "configure"
 #include "confdefs.h"
 #include <FlexLexer.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1219: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1225: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -1619,7 +1625,7 @@ fi
 eval "DIR_DATADIR=$datadir"
 DIR_DATADIR="$DIR_DATADIR/lilypond"
 echo $ac_n "checking ""... $ac_c" 1>&6
-echo "configure:1623: checking " >&5
+echo "configure:1629: checking " >&5
 
 cat << EOF > lib/out/config.hh
 
diff --git a/configure.in b/configure.in
index 7bb5c5d999..fbf2c3d8d8 100644
--- a/configure.in
+++ b/configure.in
@@ -3,12 +3,7 @@ dnl  Process this file with autoconf to produce a configure script.
 
 dnl should cache result.
 dnl should  look in $prefix first.
-printing_b=no
-checking_b=yes
-debug_b=yes
-optimise_b=no
-profile_b=no
-#shared_b=no
+
 
 AC_DEFUN(AC_TEX_PREFIX, [
     
@@ -79,7 +74,13 @@ dnl     AC_REQUIRE([AC_TEX_PREFIX])
    
 AC_INIT(flower/choleski.cc)
 
-
+# if given here, these vars are initted at the checking point.
+printing_b=no
+checking_b=yes
+debug_b=yes
+optimise_b=no
+profile_b=no
+    
 AC_LANG_CPLUSPLUS
 
 AC_ARG_ENABLE(printing,
diff --git a/flower/.version b/flower/.version
index 6a81adeb2e..0801c617c1 100644
--- a/flower/.version
+++ b/flower/.version
@@ -1,6 +1,6 @@
 MAJOR_VERSION = 1
 MINOR_VERSION = 1
-PATCH_LEVEL = 14
+PATCH_LEVEL = 15
 # use to send patches, always empty for released version:
 MY_PATCH_LEVEL = # include separator: "-1" or ".a"
 #
diff --git a/flower/NEWS b/flower/NEWS
index 3910ba6ccd..2da3968aa2 100644
--- a/flower/NEWS
+++ b/flower/NEWS
@@ -1,3 +1,7 @@
+pl 1.1.15
+	- #ifndef fixes (MB)
+	- Dstream::clear ()
+
 pl 1.1.14
 	- interval methods
 pl 1.1.13
diff --git a/flower/choleski.cc b/flower/choleski.cc
index 1d64f949ac..d10372fdfd 100644
--- a/flower/choleski.cc
+++ b/flower/choleski.cc
@@ -55,7 +55,7 @@ Choleski_decomposition::Choleski_decomposition(Matrix P)
 	D(k) = d;
     }
 
-#ifdef NDEBUG
+#ifndef NDEBUG
     assert((original()-P).norm() / P.norm() < EPS);
 #endif
 }
@@ -81,10 +81,10 @@ Choleski_decomposition::inverse() const
 	    invm(i,j) = inv(j);
     }
     
-#ifdef NDEBUG
+#ifndef NDEBUG
     Matrix I1(n), I2(original());
     I1.unit();
-    assert((I1-original()*invm).norm()/original.norm() < EPS);
+    assert((I1-I2*invm).norm()/I2.norm() < EPS);
 #endif
     
     return invm;
diff --git a/flower/dstream.cc b/flower/dstream.cc
index 73416a4e46..23b77bbbc4 100644
--- a/flower/dstream.cc
+++ b/flower/dstream.cc
@@ -1,4 +1,10 @@
+/*
+  dstream.cc -- implement Dstream
+
+  source file of the Flower Library
 
+  (c) 1996,1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
 
 #include <fstream.h>
 #include "assoc.hh"
@@ -6,7 +12,7 @@
 #include "scalar.hh"
 #include "text-db.hh"
 #include "string-convert.hh"
-
+#include "assoc-iter.hh"
 /// indent of each level 
 const INDTAB = 2;
 
@@ -38,25 +44,25 @@ strip_member(String pret)
 Dstream&
 Dstream::identify_as(String name)
 {
-    if (!os)
+    if (!os_l_)
 	return *this;
     
     String mem(strip_pretty(name));
     String cl(strip_member(mem));
     String idx = cl;
     
-    if (silent->elt_b(mem))
+    if (silent_assoc_p_->elt_b(mem))
 	idx  = mem;
-    else if (silent->elt_b(cl))
+    else if (silent_assoc_p_->elt_b(cl))
 	idx = cl;
     else {
-	(*silent)[idx] = false;
+	(*silent_assoc_p_)[idx] = false;
     }
-    local_silence = (*silent)[idx];
-    if (classname != idx && !local_silence) {
-	classname=idx;
-	if (!(*silent)["Dstream"])
-	    *os << "[" << classname << ":]"; // messy.
+    local_silence_b_ = (*silent_assoc_p_)[idx];
+    if (current_classname_str_ != idx && !local_silence_b_) {
+	current_classname_str_=idx;
+	if (!(*silent_assoc_p_)["Dstream"])
+	    *os_l_ << "[" << current_classname_str_ << ":]"; // messy.
     }
     return *this;
 }
@@ -64,9 +70,9 @@ Dstream::identify_as(String name)
 bool
 Dstream::silence(String s)
 {
-    if (!silent->elt_b(s))
+    if (!silent_assoc_p_->elt_b(s))
 	return false;
-    return (*silent)[s];
+    return (*silent_assoc_p_)[s];
 }
 
 /** Output a string via the Dstream. This is the only output
@@ -95,31 +101,31 @@ Dstream::operator<<(char const *ch_l)
 void
 Dstream::output(String s)
 {
-    if (local_silence|| !os)
+    if (local_silence_b_|| !os_l_)
 	return ;
     
     for (char const *cp = s  ; *cp; cp++)
 	switch(*cp) {
 	    case '{':
 	    case '[':
-	    case '(': indentlvl += INDTAB;
-		*os << *cp;		
+	    case '(': indent_level_i_ += INDTAB;
+		*os_l_ << *cp;		
 		break;
 		
 	    case ')':
 	    case ']':
 	    case '}':
-		indentlvl -= INDTAB;
-		*os << *cp		;
+		indent_level_i_ -= INDTAB;
+		*os_l_ << *cp		;
 		
-		assert  (indentlvl>=0) ;
+		assert  (indent_level_i_>=0) ;
 		break;
 		
 	    case '\n':
-		*os << '\n' << String (' ', indentlvl) << flush;
+		*os_l_ << '\n' << String (' ', indent_level_i_) << flush;
 		break;	      
 	    default:
-		*os << *cp;
+		*os_l_ << *cp;
 		break;
 	    }
     return ;    
@@ -128,10 +134,10 @@ Dstream::output(String s)
 
 Dstream::Dstream(ostream *r, char const * cfg_nm )
 {
-    os = r;
-    silent = new Assoc<String,bool>;
-    indentlvl = 0;
-    if (!os)
+    os_l_ = r;
+    silent_assoc_p_ = new Assoc<String,bool>;
+    indent_level_i_ = 0;
+    if (!os_l_)
 	return;
     
     char const * fn =cfg_nm ? cfg_nm : ".dstreamrc";
@@ -148,7 +154,7 @@ Dstream::Dstream(ostream *r, char const * cfg_nm )
 	     r.message("not enough fields in Dstream init.");
 	     continue;
 	 }
-	 (*silent)[r[0]] = (bool)(int)(Scalar(r[1]));
+	 (*silent_assoc_p_)[r[0]] = (bool)(int)(Scalar(r[1]));
     }
 
 }
@@ -156,6 +162,15 @@ Dstream::Dstream(ostream *r, char const * cfg_nm )
 
 Dstream::~Dstream()
 {    
-    delete silent;
-    assert(!indentlvl) ;
+    delete silent_assoc_p_;
+    assert(!indent_level_i_) ;
+}
+
+void
+Dstream::clear_silence() 
+{
+    for (Assoc_iter<String, bool> i(*silent_assoc_p_); i.ok(); i++) {
+	i.val() = 0;
+    }
+			
 }
diff --git a/flower/flower-debug.cc b/flower/flower-debug.cc
index 7617faaa24..702304e71f 100644
--- a/flower/flower-debug.cc
+++ b/flower/flower-debug.cc
@@ -12,6 +12,9 @@ Dstream *flower_dstream  = &default_flower_stream;
  */
 void set_flower_debug(Dstream&ds, bool b)
 {
+#ifdef NPRINT
+    cout << "Debug printout disabled, see the installation guide." << endl;
+#endif
     flower_check_debug = b;
     flower_dstream = &ds;
 }
diff --git a/flower/include/dstream.hh b/flower/include/dstream.hh
index 64cb612026..63130d1204 100644
--- a/flower/include/dstream.hh
+++ b/flower/include/dstream.hh
@@ -1,3 +1,10 @@
+/*
+  dstream.hh -- declare Dstream
+
+  source file of the Flower Library
+
+  (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
 
 #ifndef DSTREAM_HH
 #define DSTREAM_HH
@@ -27,14 +34,14 @@ struct Assoc;
   */
 class Dstream
 {
-    ostream *os;
-    int indentlvl;
-    bool local_silence;
-    String classname;
+    ostream *os_l_;
+    int indent_level_i_;
+    bool local_silence_b_;
+    String current_classname_str_;
     void output(String s);
-    Assoc<String, bool> *silent;
+    Assoc<String, bool> *silent_assoc_p_;
 public:
-
+    void clear_silence();
     bool silence(String);
     
     /**
diff --git a/flower/include/fproto.hh b/flower/include/fproto.hh
index 5f3bdfcff4..ef4c6422b2 100644
--- a/flower/include/fproto.hh
+++ b/flower/include/fproto.hh
@@ -21,8 +21,8 @@ template<class T> struct Array;
 template<class T> struct sstack;
 template<class T,class K> struct Assoc;
 template<class T> struct List;
-template<class T> struct PointerList;
-template<class T> struct IPointerList;
+template<class T> struct Pointer_list;
+template<class T> struct IPointer_list;
 template<class T> struct Cursor;
 template<class T> struct PCursor;
 template<class T> struct Link;
diff --git a/flower/include/list.hh b/flower/include/list.hh
index a7389ed489..cdf57ced99 100644
--- a/flower/include/list.hh
+++ b/flower/include/list.hh
@@ -15,7 +15,7 @@ template<class T> class Link;
    items are always stored as copies in List, but:
    #List<String># :  copies of #String# stored 
    #List<String*># : copies of #String*# stored! 
-   (do not use, use \Ref{PointerList} #<String*># instead.)
+   (do not use, use \Ref{Pointer_list} #<String*># instead.)
  
    {\bf note:} 
    retrieving "invalid" cursors, i.e. 
diff --git a/flower/include/parray.hh b/flower/include/parray.hh
new file mode 100644
index 0000000000..ed12074055
--- /dev/null
+++ b/flower/include/parray.hh
@@ -0,0 +1,34 @@
+/*
+  parray.hh -- declare Pointer_array
+
+  source file of the Flower Library
+
+  (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef PARRAY_HH
+#define PARRAY_HH
+
+#include "varray.hh"
+
+template<class T>
+class Pointer_array : public Array<T>
+{
+public:
+    int find_i (T t) const{
+	for (int i=0; i < size(); i++)
+	    if (elem(i) == t)
+		return i;
+	return -1;
+    }
+    T find_l(T t)const
+    {
+	int i = find_i(t);
+	if (i >= 0)
+	    return elem(i);
+	else
+	    return 0;
+    }
+};
+#endif // PARRAY_HH
diff --git a/flower/include/pcursor.hh b/flower/include/pcursor.hh
index 459977a471..dffe02b9ef 100644
--- a/flower/include/pcursor.hh
+++ b/flower/include/pcursor.hh
@@ -10,14 +10,14 @@
 #include "plist.hh"
 #include "cursor.hh"
 
-/**  cursor to go with PointerList. 
-  don't create PointerList<void*>'s.
+/**  cursor to go with Pointer_list. 
+  don't create Pointer_list<void*>'s.
   This cursor is just an interface class for Cursor. It takes care of the
   appropriate type casts
  */
 template<class T>
 class PCursor : private Cursor<void *> {
-    friend class IPointerList<T>;
+    friend class IPointer_list<T>;
 
     /// delete contents
     void junk();
@@ -36,14 +36,14 @@ public:
 	return remove_p();
     }
     
-    PointerList<T> &list() { return (PointerList<T>&)Cursor<void*>::list(); }
+    Pointer_list<T> &list() { return (Pointer_list<T>&)Cursor<void*>::list(); }
     PCursor<T> operator++(int) { return Cursor<void*>::operator++(0);}
     PCursor<T> operator--(int) { return Cursor<void*>::operator--(0); }
     PCursor<T> operator+=(int i) { return Cursor<void*>::operator+=(i);}
     PCursor<T> operator-=(int i) { return Cursor<void*>::operator-=(i); }    
     PCursor<T> operator -(int no) const { return Cursor<void*>::operator-(no);}
     int operator -(PCursor<T> op) const { return Cursor<void*>::operator-(op);}
-    PCursor<T> operator +( int no) const {return Cursor<void*>::operator+(no);}    PCursor(const PointerList<T> & l) : Cursor<void*> (l) {}
+    PCursor<T> operator +( int no) const {return Cursor<void*>::operator+(no);}    PCursor(const Pointer_list<T> & l) : Cursor<void*> (l) {}
     PCursor() : Cursor<void*> () {}
     PCursor( const Cursor<void*>& cursor ) : Cursor<void*>(cursor) { }
     void* vptr() const { return *((Cursor<void*> &) *this); }
diff --git a/flower/include/plist.hh b/flower/include/plist.hh
index 80d780e3d6..afbf942c73 100644
--- a/flower/include/plist.hh
+++ b/flower/include/plist.hh
@@ -12,14 +12,14 @@
 /**
   A list of pointers.
   
-  Use for list of pointers, e.g. PointerList<AbstractType*>. 
+  Use for list of pointers, e.g. Pointer_list<AbstractType*>. 
   This class does no deletion of the pointers, but it knows how to
   copy itself (shallow copy). We could have derived it from List<T>,
-  but this design saves a lot of code dup; for all PointerLists in the
+  but this design saves a lot of code dup; for all Pointer_lists in the
   program only one parent List<void*> is instantiated.
   */
 template<class T>
-class PointerList : public List<void *>
+class Pointer_list : public List<void *>
 {
  public:
     PCursor<T> top() const{
@@ -29,11 +29,11 @@ class PointerList : public List<void *>
 	return PCursor<T> (List<void*>::bottom());
     }
     PCursor<T> find(T) const;
-    void concatenate(PointerList<T> const &s) { List<void*>::concatenate(s); }
-    PointerList() {}
+    void concatenate(Pointer_list<T> const &s) { List<void*>::concatenate(s); }
+    Pointer_list() {}
 };
 
-/**   PointerList which deletes pointers given to it. 
+/**   Pointer_list which deletes pointers given to it. 
   NOTE:
   
   The copy constructor doesn't do what you'd want:
@@ -41,25 +41,25 @@ class PointerList : public List<void *>
 
     new T(*cursor)
 
-  You have to copy this yourself, or use the macro PointerList__copy
+  You have to copy this yourself, or use the macro Pointer_list__copy
   
   */
 template<class T>
-class IPointerList : public PointerList<T> {
+class IPointer_list : public Pointer_list<T> {
 public:
-    IPointerList(IPointerList const &) { set_empty(); }
-    IPointerList() { }
-    ~IPointerList();
+    IPointer_list(IPointer_list const &) { set_empty(); }
+    IPointer_list() { }
+    ~IPointer_list();
 };
 
-#define IPointerList__copy(T, to, from, op)   \
+#define IPointer_list__copy(T, to, from, op)   \
   for (PCursor<T> _pc_(from); _pc_.ok(); _pc_++)\
       to.bottom().add(_pc_->op)\
   \
 
 
 template<class T>
-void PL_copy(IPointerList<T*> &dst,IPointerList<T*> const&src);
+void PL_copy(IPointer_list<T*> &dst,IPointer_list<T*> const&src);
 
 
 
diff --git a/flower/include/plist.icc b/flower/include/plist.icc
index 8b5f8eea56..f24e0ddf45 100644
--- a/flower/include/plist.icc
+++ b/flower/include/plist.icc
@@ -9,7 +9,7 @@
 
 template<class T>
 void
-PL_copy(IPointerList<T*> &to, IPointerList<T*> const&src)
+PL_copy(IPointer_list<T*> &to, IPointer_list<T*> const&src)
 {
     for (PCursor<T*> pc(src); pc.ok(); pc++) {
 	T *q = pc;
diff --git a/flower/include/plist.tcc b/flower/include/plist.tcc
index d18e01f902..7129cdbe3d 100644
--- a/flower/include/plist.tcc
+++ b/flower/include/plist.tcc
@@ -1,12 +1,12 @@
 #include "plist.hh"
 
-#define PL_instantiate(a)  template class PointerList<a*>; \
+#define PL_instantiate(a)  template class Pointer_list<a*>; \
 	template class PCursor<a*>;
 #define IPL_instantiate(a) PL_instantiate(a); \
-	template class IPointerList<a*>
+	template class IPointer_list<a*>
 	
 template<class T>
-IPointerList<T>::~IPointerList()
+IPointer_list<T>::~IPointer_list()
 {
     PCursor<T> c( *this );
     while (c.ok()) {
@@ -16,7 +16,7 @@ IPointerList<T>::~IPointerList()
 
 template<class T>
 PCursor<T> 
-PointerList<T>::find(T what ) const
+Pointer_list<T>::find(T what ) const
 {
     PCursor<T> i(*this);
     for (; i.ok(); i++)
diff --git a/init/table_sixteen.ini b/init/table_sixteen.ini
index 82364493b7..a1beff522b 100644
--- a/init/table_sixteen.ini
+++ b/init/table_sixteen.ini
@@ -13,16 +13,16 @@ table_sixteen=
     "scripts" = \table {
 	    "fermata" "\fermata"		0\pt 0\pt	0\pt 6\pt
 	    "-fermata" "\ifermata"		0\pt 0\pt	-6\pt 0\pt
-	    "portato" "\portato"
-	    "-portato" "\iportato"
-	    "tenuto" "\tenuto"	
-	    "-tenuto" "\itenuto"
+	    "portato" "\portato"		0\pt 4.8\pt	0\pt 2\pt
+	    "-portato" "\iportato"		0\pt 4.8\pt	-2\pt 0\pt
+	    "tenuto" "\tenuto"			0\pt 4.8\pt	0\pt 1\pt
+	    "-tenuto" "\itenuto"		0\pt 4.8\pt	-1\pt 0\pt
 	    "sforzato" "\sforzato"		-0.8\pt 4.8\pt	-1.92\pt 1.92\pt
 	    "marcato" "\marcato"		0\pt 4.8\pt	0\pt 4\pt
 	    "-marcato" "\imarcato"		0\pt 4.8\pt	-4\pt 0\pt
 	    "staccato" "\staccato"		0\pt 0\pt 	 0\pt 5\pt
-	    "staccatissimo" "\staccatissimo"	0\pt 0\pt	0\pt 7.5\pt
-	    "-staccatissimo" "\istaccatissimo"	0\pt 0\pt 	-7.5\pt 0\pt
+	    "staccatissimo" "\staccatissimo"	0\pt 0\pt	0\pt 1\pt
+	    "-staccatissimo" "\istaccatissimo"	0\pt 0\pt 	0\pt 1\pt
 	    "upbow" "\upbow"			-1\pt 6\pt	0\pt 5\pt
 	    "downbow" "\downbow"		0\pt 5\pt	0\pt 7.5\pt
 	    "back" "\backorfront"		0\pt 6\pt	0\pt 3\pt
diff --git a/input/keys.ly b/input/keys.ly
new file mode 100644
index 0000000000..c215a574af
--- /dev/null
+++ b/input/keys.ly
@@ -0,0 +1,31 @@
+%{MudelaHeader
+
+ filename: keys.ly
+ title:
+ description: 
+ composers:
+ entered-by:
+ copyright:
+
+ Tested Features: local key, key
+EndMudelaHeader
+%}
+\version "0.0.57";
+
+
+blah = \melodic{
+	\duration 4;
+	\meter 4/4;
+	\octave c';
+	cis c cis cis |
+	<cis dis eis fes ges> cis dis2 ~ | 
+		\meter 2/4 ;
+	dis dis ~ | c cis~ | c 
+}
+
+\score{
+	\staff { 
+		melodicregs
+		blah
+	}
+}
diff --git a/input/scripts.ly b/input/scripts.ly
new file mode 100644
index 0000000000..4890522195
--- /dev/null
+++ b/input/scripts.ly
@@ -0,0 +1,75 @@
+%{MudelaHeader
+
+ filename: scripts.ly
+ title:
+ description: 
+ composers:
+ entered-by:HWN, MB
+ copyright:
+
+ Tested Features: scripts, text.
+EndMudelaHeader
+%}
+\version "0.0.57";
+
+
+blah = \staff{  melodicregs
+
+	\melodic {
+	\octave c';
+	'c ->-.-\fermata-"text"
+	c ->-.-\fermata-"text"
+	c' ->-.-\fermata-"text"
+	c'' ->-.-\fermata-"text"
+
+	'd ->-.-\fermata-"text"
+	d ->-.-\fermata-"text"
+	d' ->-.-\fermata-"text"
+	d'' ->-.-\fermata-"text"
+
+	'c ^>^.^\fermata^"text"
+	c ^>^.^\fermata^"text"
+	c' ^>^.^\fermata^"text"
+	c'' ^>^.^\fermata^"text"
+
+	'd ^>^.^\fermata^"text"
+	d ^>^.^\fermata^"text"
+	d' ^>^.^\fermata^"text"
+	d'' ^>^.^\fermata ^"text"
+
+	'c _>_._\fermata _"text"
+	c _>_._\fermata _"text"
+	c' _>_._\fermata _"text"
+	c'' _>_._\fermata _"text"
+
+	'd _>_._\fermata _"text"
+	d _>_._\fermata _"text"
+	d' _>_._\fermata _"text"
+	d'' _>_._\fermata _"text"
+			
+      \meter 4/4;
+	\duration  8;
+	\octave c';
+	[c \< d e \! f][d' \> e' f' \! g'] 
+	[c-> \< d-> e-> \! f->][d'-> \> e'-> f'-> \! g'->] 
+	[c-^ \< d-^ e-^ \! f-^][d'-^ \> e'-^ f'-^ \! g'-^] 
+	[c-. \< d-. e-. \! f-.][d'-. \> e'-. f'-. \! g'-.]
+	[c-- \< d-- e-- \! f--][d'-- \> e'-- f'-- \! g'--] 
+	[c-\portato \< d-\portato e-\portato \! f-\portato]
+		[d'-\portato \> e'-\portato f'-\portato \! g'-\portato]
+	[c-\upbow \< d-\upbow e-\upbow \! f-\upbow]
+		[d'-\upbow \> e'-\upbow f'-\upbow \! g'-\upbow] 
+	[c-| \< d-| e-| \! f-|][d'-| \> e'-| f'-| \! g'-|]
+	[c-\fermata \< d-\fermata e-\fermata \! f-\fermata]
+		[d'-\fermata \> e'-\fermata f'-\fermata \! g'-\fermata] 
+	[c-\lheel \< d-\lheel e-\lheel \! f-\lheel]
+		[d'-\lheel \> e'-\lheel f'-\lheel \! g'-\lheel]
+}
+}
+
+\score{
+	blah
+	\paper{
+		\symboltables {table_sixteen}
+	}
+}
diff --git a/input/toccata-fuga-E.ly b/input/toccata-fuga-E.ly
index 4cdeb0a2f2..dade648ae5 100644
--- a/input/toccata-fuga-E.ly
+++ b/input/toccata-fuga-E.ly
@@ -1,17 +1,24 @@
-% toccata-fuga-E.ly
-% 
-% toccata and fuga in E-major
-% Johann Sebastian Bach (1685-1750)
-% bwv 566
-%
-% toccata: 3 bar excerpt
-% 2nd fuga: transposed subject --- 4 bar except
-%
-% purpose of this file is testing: 
-%     * real-life collisions
-%     * multi-voice input --- splitting?
-%     * organ staff...
-%
+%{MudelaHeader
+
+ filename: toccata-fuga-E.ly
+ title: toccata and fuga in E-major bwv 566
+ description:  
+ toccata: 3 bar excerpt
+ 2nd fuga: transposed subject --- 4 bar excerpt
+
+ composers: Johann Sebastian Bach (1685-1750)
+ entered-by: JCN
+ copyright:
+
+ Tested Features:
+ purpose of this file is testing: 
+     * real-life collisions
+     * multi-voice input --- splitting?
+     * organ staff...
+
+EndMudelaHeader
+%}
+
 
 \version "0.0.57";
 
@@ -53,9 +60,9 @@ toccata_pedal = \melodic{
 	% 13
 	r4 'fis4-\ltoe 'e4.-\lheel e8-\rheel | 
 	% 14
-	fis4.-\rtoe fis8-.-\rtoe fis4-\rtoe [e8-\ltoe ais8-\rtoe] | 
+	fis4.-\rtoe fis8-.-\rtoe fis4-\rtoe [e8-\ltoe a8-\rtoe] | 
 	% 15
-	dis4-\ltoe gis4-\rtoe [cis8-\ltoe 'b8-\lheel 'ais8-\rtoe 'gis8-\ltoe] |
+	dis4-\ltoe gis4-\rtoe [cis8-\ltoe 'b8-\lheel 'a8-\rtoe 'gis8-\ltoe] |
 	% 16
 }
 
diff --git a/lib/include/source.hh b/lib/include/source.hh
index 05890f1310..58ac1e7ae4 100644
--- a/lib/include/source.hh
+++ b/lib/include/source.hh
@@ -19,7 +19,7 @@ public:
 private:
     const File_path * path_C_;
     void add( Source_file* sourcefile_p );
-    IPointerList<Source_file*> sourcefile_p_iplist_;
+    IPointer_list<Source_file*> sourcefile_p_iplist_;
     bool binary_b_ ;
 };
 
diff --git a/lily/.version b/lily/.version
index 4a6628d2a9..cc03f17df4 100644
--- a/lily/.version
+++ b/lily/.version
@@ -1,6 +1,6 @@
 MAJOR_VERSION = 0
 MINOR_VERSION = 0
-PATCH_LEVEL = 60
+PATCH_LEVEL = 61
 
 # use to send patches, always empty for released version:
 # include separator: ".postfix", "-pl" makes rpm barf
diff --git a/lily/crescendo.cc b/lily/crescendo.cc
index 09b775f8de..f520106c19 100644
--- a/lily/crescendo.cc
+++ b/lily/crescendo.cc
@@ -27,8 +27,9 @@ Crescendo::do_break_at(PCol*, PCol*)const
 
 
 Molecule*
-Crescendo::brew_molecule_p() const return m_p ;
+Crescendo::brew_molecule_p() const
 {
+    Molecule* m_p =0;
     Real x_off_dim=0.0;
     Real absdyn_dim = 10 PT;	// ugh
     
@@ -46,10 +47,14 @@ Crescendo::brew_molecule_p() const return m_p ;
 	error("Crescendo too small");
 	w_dim = 0;
     }
-    Symbol s( paper()->lookup_l()->hairpin(w_dim, grow_dir_i_ < 0) );
+    Real lookup_wid = w_dim * 0.9; // make it slightly smaller.
+
+    Symbol s( paper()->lookup_l()->hairpin( lookup_wid, grow_dir_i_ < 0) );
     m_p->add(Atom(s));
     int pos = get_position_i(s.dim.y);
-    m_p->translate(Offset(x_off_dim,pos * paper()->internote()));
+    m_p->translate(Offset(x_off_dim + 0.05 * w_dim, 
+			  pos * paper()->internote()));
+    return m_p;
 }
 
 IMPLEMENT_STATIC_NAME(Crescendo);
diff --git a/lily/include/beam.hh b/lily/include/beam.hh
index a85858bad8..f1ac0c1eaa 100644
--- a/lily/include/beam.hh
+++ b/lily/include/beam.hh
@@ -14,7 +14,7 @@
   make sure that they reach the beam and that point in the correct
   direction */
 struct Beam:  public Directional_spanner {
-    PointerList<Stem*> stems;
+    Pointer_list<Stem*> stems;
     /// the slope of the beam in posns / point (dimension)   
     Real slope;
 
diff --git a/lily/include/input-music.hh b/lily/include/input-music.hh
index 7102ed35eb..b34fedc183 100644
--- a/lily/include/input-music.hh
+++ b/lily/include/input-music.hh
@@ -12,7 +12,7 @@
 #include "voice.hh"
 #include "moment.hh"
 
-struct Voice_list : public PointerList<Voice*> {
+struct Voice_list : public Pointer_list<Voice*> {
     void translate_time(Moment dt);
 };
 
@@ -67,7 +67,7 @@ struct Simple_music : Input_music {
 
 /// Complex_music consists of multiple voices
 struct Complex_music : Input_music {
-    IPointerList<Input_music*> elts;
+    IPointer_list<Input_music*> elts;
     /* *************** */
     virtual void transpose(Melodic_req const&) const ;
     virtual void set_default_group(String g);
diff --git a/lily/include/input-register.hh b/lily/include/input-register.hh
index 6149121e29..bf945ab100 100644
--- a/lily/include/input-register.hh
+++ b/lily/include/input-register.hh
@@ -16,7 +16,7 @@
 #include "input.hh"
 
 struct Input_register : Input { 
-    IPointerList<Input_register*> ireg_list_;
+    IPointer_list<Input_register*> ireg_list_;
     String name_str_;
     
     void add(Input_register*);
diff --git a/lily/include/input-score.hh b/lily/include/input-score.hh
index a55b7a4378..6e6a3ceaaf 100644
--- a/lily/include/input-score.hh
+++ b/lily/include/input-score.hh
@@ -24,7 +24,7 @@ public:
     /// paper_, staffs_ and commands_ form the problem definition.
     Paper_def *paper_p_;
     Midi_def* midi_p_;
-    IPointerList<Input_staff*> staffs_;
+    IPointer_list<Input_staff*> staffs_;
 
     
     /* *************************************************************** */
diff --git a/lily/include/input-staff.hh b/lily/include/input-staff.hh
index 0a35b460b6..0bbdc13266 100644
--- a/lily/include/input-staff.hh
+++ b/lily/include/input-staff.hh
@@ -16,7 +16,7 @@
 class Input_staff:public Input {
 public:
     
-    IPointerList<Input_music*> music_;
+    IPointer_list<Input_music*> music_;
     Input_register * ireg_p_;
     
     /* *************** */
diff --git a/lily/include/local-key-reg.hh b/lily/include/local-key-reg.hh
index 2ab094b3b3..4921bd03aa 100644
--- a/lily/include/local-key-reg.hh
+++ b/lily/include/local-key-reg.hh
@@ -9,11 +9,15 @@
 #define LOCALKEYREG_HH
 #include "register.hh"
 #include "key.hh"
+#include "parray.hh"
 
 struct Local_key_register : Request_register {
     Key local_key_;
-    Local_key_item* key_item_p_;
     Key const *key_C_;
+    Array<Note_req* > mel_l_arr_;
+    Array<Item* > support_l_arr_;
+    Pointer_array<Item * > forced_l_arr_;
+    Pointer_array<Item *> tied_l_arr_;
     /* *************** */
     virtual void process_requests();
     virtual void acknowledge_element(Staff_elem_info);
diff --git a/lily/include/molecule.hh b/lily/include/molecule.hh
index 084321ce4e..312111bff2 100644
--- a/lily/include/molecule.hh
+++ b/lily/include/molecule.hh
@@ -30,7 +30,7 @@ struct Atom {
 /** a group of individually translated symbols. You can add molecules
     to the top, to the right, etc.  */
 struct Molecule {
-    IPointerList<Atom*> ats;	// change to List<Atom>? 
+    IPointer_list<Atom*> ats;	// change to List<Atom>? 
 
     /* *************** */
     
diff --git a/lily/include/musical-request.hh b/lily/include/musical-request.hh
index eaba302d2b..721b2ff51c 100644
--- a/lily/include/musical-request.hh
+++ b/lily/include/musical-request.hh
@@ -114,6 +114,7 @@ struct Melodic_req :virtual Musical_req
     /// return pitch from central c (in halfnotes)
     int pitch()const; 
     Melodic_req();
+    static int compare(Melodic_req const&, Melodic_req const&);
    
     REQUESTMETHODS(Melodic_req,melodic);
 };
diff --git a/lily/include/p-col.hh b/lily/include/p-col.hh
index 2a2dd92afc..58206b4306 100644
--- a/lily/include/p-col.hh
+++ b/lily/include/p-col.hh
@@ -22,8 +22,8 @@
 
 class PCol { 
 public:
-    PointerList<Item const *> its;
-    PointerList<Spanner const *> stoppers, starters;
+    Pointer_list<Item const *> its;
+    Pointer_list<Spanner const *> stoppers, starters;
     
     /** prebreak is put before end of line.
     if broken here, then (*this) column is discarded, and prebreak
diff --git a/lily/include/p-score.hh b/lily/include/p-score.hh
index 3177613ec5..0cc7a2bc15 100644
--- a/lily/include/p-score.hh
+++ b/lily/include/p-score.hh
@@ -18,25 +18,25 @@ struct PScore {
     Paper_def *paper_l_;
     
     /// the columns, ordered left to right
-    IPointerList<PCol *> cols;
+    IPointer_list<PCol *> cols;
 
     /// the idealspacings, no particular order
-    IPointerList<Idealspacing*> suz;
+    IPointer_list<Idealspacing*> suz;
 
     /// the staffs ordered top to bottom
-    IPointerList<PStaff*> staffs;
+    IPointer_list<PStaff*> staffs;
 
     /// all symbols in score. No particular order.
-    IPointerList<Item*> its;
+    IPointer_list<Item*> its;
 
     /// if broken, the different lines
-    IPointerList<Line_of_score*> lines;
+    IPointer_list<Line_of_score*> lines;
 
     /// crescs etc; no particular order
-    IPointerList<Spanner *> spanners;
+    IPointer_list<Spanner *> spanners;
 
     /// broken spanners
-    IPointerList<Spanner*> broken_spans;
+    IPointer_list<Spanner*> broken_spans;
 
     /* *************** */
     /* CONSTRUCTION */
diff --git a/lily/include/p-staff.hh b/lily/include/p-staff.hh
index c95834c2fb..a1c5fb4daa 100644
--- a/lily/include/p-staff.hh
+++ b/lily/include/p-staff.hh
@@ -11,8 +11,8 @@ struct PStaff {
     PScore * pscore_l_;
     
     
-    PointerList<Spanner const *> spans;
-    PointerList<Item*> its;
+    Pointer_list<Spanner const *> spans;
+    Pointer_list<Item*> its;
 
     /* *************** */
     void add(Item*i);
diff --git a/lily/include/pulk-voices.hh b/lily/include/pulk-voices.hh
index 2cc5a48831..e871517388 100644
--- a/lily/include/pulk-voices.hh
+++ b/lily/include/pulk-voices.hh
@@ -34,15 +34,15 @@ int compare(Voice_l const &p1, Voice_l const &p2);
 class Pulk_voices
 {
 PQueue< Voice_l > voice_pq_;
-    IPointerList< Pulk_voice * > pulk_p_list_;
-    PointerList<Staff *> staff_l_list_;
+    IPointer_list< Pulk_voice * > pulk_p_list_;
+    Pointer_list<Staff *> staff_l_list_;
     Moment next_mom_;
 
 public:
     Moment last_;
     bool ok() const;
     Moment next_mom() { return next_mom_; }
-    Pulk_voices(PointerList<Staff*> const&);
+    Pulk_voices(Pointer_list<Staff*> const&);
     void get_aligned_request(Request_column *col_l );
 };
 
diff --git a/lily/include/register-group.hh b/lily/include/register-group.hh
index fcfc4ba5c6..be21d7fd5e 100644
--- a/lily/include/register-group.hh
+++ b/lily/include/register-group.hh
@@ -21,7 +21,7 @@
   */
 class Register_group_register : public Request_register {
 protected:
-    IPointerList<Request_register*> reg_list_;
+    IPointer_list<Request_register*> reg_list_;
     virtual void do_print()const;
 public:
 
diff --git a/lily/include/request-column.hh b/lily/include/request-column.hh
index 32a6f63773..e3d5d3184e 100644
--- a/lily/include/request-column.hh
+++ b/lily/include/request-column.hh
@@ -18,12 +18,12 @@
  */
 class Request_column 
 {
-    IPointerList<Staff_column*> staff_cols_;
+    IPointer_list<Staff_column*> staff_cols_;
     Array<Staff_column*> staff_col_l_arr_;
     
 public:
     Score_column *musical_column_l_, *command_column_l_;
-    Request_column(PointerList<Staff*> const& );
+    Request_column(Pointer_list<Staff*> const& );
     bool used_b()const;
     Moment when();
     void add_reqs(int staff_idx, Array<Request*> const&);
diff --git a/lily/include/rest-column.hh b/lily/include/rest-column.hh
index 04e86e581a..a753c61d93 100644
--- a/lily/include/rest-column.hh
+++ b/lily/include/rest-column.hh
@@ -23,6 +23,7 @@ public:
     void add(Notehead *);
     NAME_MEMBERS(Rest_column);
     void translate_y(Real dy);
+    Rest_column();
 };
 
 #endif // REST_COLUMN_HH
diff --git a/lily/include/score.hh b/lily/include/score.hh
index e83540533b..7376e97976 100644
--- a/lily/include/score.hh
+++ b/lily/include/score.hh
@@ -24,12 +24,12 @@ struct Score {
     /// paper_, staffs_ and commands_ form the problem definition.
     Paper_def *paper_p_;
     Midi_def *midi_p_;
-    IPointerList<Staff*> staffs_;
+    IPointer_list<Staff*> staffs_;
     
     /// "runtime" fields for setting up spacing    
-    IPointerList<Request_column*> rcols_;
+    IPointer_list<Request_column*> rcols_;
     
-    IPointerList<Score_column*> cols_;
+    IPointer_list<Score_column*> cols_;
     PScore *pscore_p_;
 
     Input input_;
diff --git a/lily/include/scoreline.hh b/lily/include/scoreline.hh
index 9196a96ab3..33bbc4a2d8 100644
--- a/lily/include/scoreline.hh
+++ b/lily/include/scoreline.hh
@@ -13,10 +13,10 @@
 /// the columns of a score that form one line.
 struct
 Line_of_score {
-    PointerList<PCol *> cols;
+    Pointer_list<PCol *> cols;
 
     // need to store height of each staff.
-    IPointerList<Line_of_staff*> staffs;
+    IPointer_list<Line_of_staff*> staffs;
     PScore * pscore_l_;	// needed to generate staffs
 
     /* *************** */
diff --git a/lily/include/staff.hh b/lily/include/staff.hh
index e0613136f2..29f6839f73 100644
--- a/lily/include/staff.hh
+++ b/lily/include/staff.hh
@@ -20,9 +20,9 @@ class Staff {
 public:
     Input_register * ireg_p_;
     
-    PointerList<Voice*> voice_list_;
+    Pointer_list<Voice*> voice_list_;
     /// runtime field
-    PointerList<Staff_column*> cols_;
+    Pointer_list<Staff_column*> cols_;
 
     Score *score_l_;
     PScore *pscore_l_;
@@ -30,7 +30,7 @@ public:
     
     /* *************************************************************** */
 
-    void add(const PointerList<Voice*> &s);
+    void add(const Pointer_list<Voice*> &s);
 
     void add_voice(Voice *v_p);
     Paper_def*paper()const;
diff --git a/lily/include/tie-reg.hh b/lily/include/tie-reg.hh
index 082de4e70c..5a0028f83e 100644
--- a/lily/include/tie-reg.hh
+++ b/lily/include/tie-reg.hh
@@ -19,6 +19,8 @@ class Tie_register : public Request_register {
     Tie_req * req_l_;
     int dir_i_;
     Tie_req *end_req_l_;
+    Melodic_req * end_melodic_req_l_;
+    Melodic_req  * melodic_req_l_;
     
 protected:
     virtual ~Tie_register();
diff --git a/lily/include/tie.hh b/lily/include/tie.hh
index 972d2cf97e..7f03564866 100644
--- a/lily/include/tie.hh
+++ b/lily/include/tie.hh
@@ -18,9 +18,9 @@ class Tie : public Bow {
     virtual void do_post_processing();
     virtual void set_default_dir();
 public:
+    bool same_pitch_b_;
     Notehead * left_head_l_;
     Notehead * right_head_l_;
-
     void set_head(int, Notehead*head_l);
     Tie();
     
diff --git a/lily/include/voice-element.hh b/lily/include/voice-element.hh
index cd02239f5e..fc85b58e3b 100644
--- a/lily/include/voice-element.hh
+++ b/lily/include/voice-element.hh
@@ -24,7 +24,7 @@ public:
       Voice_element */
     Moment duration_;
     Voice const *voice_C_;
-    IPointerList<Request*> req_p_list_;
+    IPointer_list<Request*> req_p_list_;
     Request * principal_req_l_;
 
     /* *************** */
diff --git a/lily/include/voice.hh b/lily/include/voice.hh
index 5ddcc91933..475fc44668 100644
--- a/lily/include/voice.hh
+++ b/lily/include/voice.hh
@@ -18,7 +18,7 @@ struct Voice {
     /** the elements, earliest first.
       Please use the member #add()# to add a new element
       */
-    IPointerList<Voice_element *> elts_;
+    IPointer_list<Voice_element *> elts_;
     Moment start_;
 
     /* *************** */
diff --git a/lily/lexer.l b/lily/lexer.l
index d4435664ca..38adcc5fd9 100644
--- a/lily/lexer.l
+++ b/lily/lexer.l
@@ -63,7 +63,7 @@ KEYWORD		\\{WORD}
 WHITE		[ \n\t\f]
 BLACK		[^ \n\t\f]
 RESTNAME	[rs]
-NOTECOMMAND	\\{WORD}
+NOTECOMMAND	\\{A}+
 DOTS		\.+
 LYRICS		({AA}|{NATIONAL})[^0-9 \t\n\f]*
 
diff --git a/lily/local-key-reg.cc b/lily/local-key-reg.cc
index 84ec5baf69..2fac0d573d 100644
--- a/lily/local-key-reg.cc
+++ b/lily/local-key-reg.cc
@@ -12,52 +12,72 @@
 #include "key-reg.hh"
 #include "debug.hh"
 #include "key-item.hh"
+#include "tie.hh"
+#include "notehead.hh"
 
 Local_key_register::Local_key_register()
 {
-    key_item_p_ = 0;
     key_C_ = 0;
 }
 
 void
 Local_key_register::pre_move_processing()
 {
-    if (key_item_p_) {
-	typeset_element(key_item_p_);
-	key_item_p_ = 0;
+    if (mel_l_arr_.size()) {
+	Local_key_item *key_item_p = 0;
+	for (int i=0; i  < mel_l_arr_.size(); i++) {
+	    Item * support_l = support_l_arr_[i];
+
+	    Note_req * note_l = mel_l_arr_[i];
+	    if (tied_l_arr_.find_l(support_l) && !forced_l_arr_.find_l(support_l))
+		continue;
+	    
+	    if (!key_item_p)
+		key_item_p = new Local_key_item(*get_staff_info().c0_position_i_l_);
+	    key_item_p->add(note_l);
+	    key_item_p->add(support_l);
+	    local_key_.oct(note_l->octave_i_)
+		.set(note_l->notename_i_, note_l->accidental_i_);
+	}
+	if (key_item_p)
+	    typeset_element(key_item_p);
     }
+    mel_l_arr_.set_size(0);
+    tied_l_arr_.set_size(0);
+    support_l_arr_.set_size(0);
+    forced_l_arr_.set_size(0);	
 }
 
 void
 Local_key_register::acknowledge_element(Staff_elem_info info)
 {    
+    Staff_elem * elem_l = info.elem_l_;
     if (info.req_l_->note()) {
-	Note_req * note_l_ = info.req_l_->note();
+	Note_req * note_l = info.req_l_->note();
+	Item * item_l = info.elem_l_->item();
 
-	if( note_l_->forceacc_b_ ||
-	    local_key_.oct(note_l_->octave_i_).acc(note_l_->notename_i_)
-	    != note_l_->accidental_i_) {
-	    Item * support_l_ = info.elem_l_->item();
-	
-
-	    if (!key_item_p_) {
-		key_item_p_ = new Local_key_item(*get_staff_info().c0_position_i_l_);
-	    }
-	    
-	    key_item_p_->add(note_l_);
-	    key_item_p_->add(support_l_);
-	    local_key_.oct(note_l_->octave_i_)
-		.set(note_l_->notename_i_, note_l_->accidental_i_);
+	if( note_l->forceacc_b_ ||
+	    local_key_.oct(note_l->octave_i_).acc(note_l->notename_i_)
+	    != note_l->accidental_i_) {
+	    mel_l_arr_.push(note_l );
+	    support_l_arr_.push(item_l);
+	    if (note_l->forceacc_b_)
+		forced_l_arr_.push(item_l);
 	}
-    } else if (info.req_l_->command()  && info.req_l_->command()->keychange()) { 
+    } else if (info.req_l_->command()
+	       && info.req_l_->command()->keychange()) { 
 	Key_register * key_reg_l =
 	    (Key_register*)info.origin_reg_l_arr_[0];
 	key_C_ = &key_reg_l->key_;
 	local_key_ = *key_C_;
-    } else if (info.elem_l_->name() == Key_item::static_name()) {
+    } else if (elem_l->name() == Key_item::static_name()) {
 	Key_register * key_reg_l =
 	    (Key_register*)info.origin_reg_l_arr_[0];
 	key_C_ = &key_reg_l->key_;
+    } else if (elem_l->name() == Tie::static_name()) {
+	Tie * tie_l = (Tie*)elem_l;
+	if (tie_l->same_pitch_b_)
+	    tied_l_arr_.push(tie_l-> right_head_l_ );
     }
 }
 
@@ -69,7 +89,7 @@ Local_key_register::process_requests()
 	if (key_C_)
 	    local_key_= *key_C_;
 	else if( time_C_->when_ >Moment(0))
-	    warning ("Help me! can't figure  current key");
+	    warning ("Help me! can't figure out current key");
     }
 }
 
diff --git a/lily/musical-request.cc b/lily/musical-request.cc
index 5ed08aa996..9f65d8a88f 100644
--- a/lily/musical-request.cc
+++ b/lily/musical-request.cc
@@ -127,11 +127,23 @@ Melodic_req::transpose(Melodic_req const & delta)
 
 IMPLEMENT_STATIC_NAME(Melodic_req);
 
+int
+Melodic_req::compare(Melodic_req const&m1, Melodic_req const&m2)
+{
+    if (m1.octave_i_ != m2.octave_i_)
+	return m1.octave_i_ -m2.octave_i_;
+    else if (m1.notename_i_ != m2.notename_i_)
+	return m1.notename_i_ - m2.notename_i_;
+    else  if (m1.accidental_i_ != m2.accidental_i_)
+	return m1.accidental_i_ - m2.accidental_i_;
+    return 0;
+}
+
 void
 Melodic_req::do_print() const
 {
 #ifndef NPRINT
-	mtor << "notename: " << notename_i_ << " acc: " <<accidental_i_<<" oct: "<< octave_i_;
+    mtor << "notename: " << notename_i_ << " acc: " <<accidental_i_<<" oct: "<< octave_i_;
 #endif
 }
 
diff --git a/lily/note.cc b/lily/note.cc
index a939391bf3..6b00620958 100644
--- a/lily/note.cc
+++ b/lily/note.cc
@@ -49,6 +49,8 @@ get_scriptdef(char c)
 	break;
     case  '.' : s = "staccato";
 	break;
+    default:
+	assert(false);
     }
     return new String(s);
 }
diff --git a/lily/p-score.cc b/lily/p-score.cc
index ff3482097e..184e90db3f 100644
--- a/lily/p-score.cc
+++ b/lily/p-score.cc
@@ -150,7 +150,7 @@ PScore::select_items(PStaff*ps, PCol*pc)
 void
 PScore::OK()const
 {
-#ifdef NDEBUG
+#ifndef NDEBUG
     for (iter_top(cols,cc); cc.ok(); cc++)
 	cc->OK();
     for (iter_top(suz,i); i.ok(); i++)
diff --git a/lily/parser.y b/lily/parser.y
index 6ece45d55e..d92c970123 100644
--- a/lily/parser.y
+++ b/lily/parser.y
@@ -1093,7 +1093,7 @@ symboldef:
 		delete $2;
 	}
 	| STRING {
-		Box b;
+		Box b(Interval(0,0), Interval(0,0));
 		$$ = new Symbol(*$1, b);
 		delete $1;
 	}
diff --git a/lily/pulk-voices.cc b/lily/pulk-voices.cc
index 3fe5a30fbd..dc3c26604e 100644
--- a/lily/pulk-voices.cc
+++ b/lily/pulk-voices.cc
@@ -13,7 +13,7 @@
 #include "request-column.hh"
 #include "debug.hh"
 
-Pulk_voices::Pulk_voices(PointerList<Staff*> const& l)
+Pulk_voices::Pulk_voices(Pointer_list<Staff*> const& l)
     : staff_l_list_(l)
 {
     int staff_i = 0;
diff --git a/lily/request-column.cc b/lily/request-column.cc
index 4fd9d53ab9..47013d222a 100644
--- a/lily/request-column.cc
+++ b/lily/request-column.cc
@@ -23,7 +23,7 @@ Request_column::add_reqs(int idx , Array<Request*> const & req_l_arr)
     staff_col_l_arr_[idx]->add_reqs(req_l_arr);
 }
 
-Request_column::Request_column(PointerList<Staff*> const& list )
+Request_column::Request_column(Pointer_list<Staff*> const& list )
 {
     musical_column_l_ = command_column_l_ =0;
     iter(list.top(), j);
diff --git a/lily/rest-collision.cc b/lily/rest-collision.cc
index 2a6e1e755f..42f7bbbfe3 100644
--- a/lily/rest-collision.cc
+++ b/lily/rest-collision.cc
@@ -28,7 +28,7 @@ Rest_collision::add(Collision * c_l)
 void
 Rest_collision::do_post_processing()
 {
-    #if 0
+#if 0
         bool rest_b_a[4];
 	rest_b_a[j] = (col_l_a[j]) ? col_l_a[j]->rest_b_ : false;	
     do {
diff --git a/lily/rest-column.cc b/lily/rest-column.cc
index 5ab8b164da..f9543a2e01 100644
--- a/lily/rest-column.cc
+++ b/lily/rest-column.cc
@@ -25,3 +25,9 @@ Rest_column::translate_y(Real dy_f)
 }
 
 IMPLEMENT_STATIC_NAME(Rest_column);
+
+Rest_column::Rest_column()
+{
+    dir_i_ = 0;
+}
+    
diff --git a/lily/slur.cc b/lily/slur.cc
index 7de562215a..1b7bb0f76a 100644
--- a/lily/slur.cc
+++ b/lily/slur.cc
@@ -74,8 +74,14 @@ Slur::do_post_processing()
     if (!dir_i_)
 	set_default_dir();
     Real inter_f = paper()->internote();
-    left_pos_i_ = encompass_arr_[0]->stem_l_->height()[dir_i_]/inter_f;
-    right_pos_i_ = encompass_arr_.top()->stem_l_->height()[dir_i_]/inter_f;
+    if (encompass_arr_[0]->stem_l_)
+        left_pos_i_ = encompass_arr_[0]->stem_l_->height()[dir_i_]/inter_f;
+    else
+        left_pos_i_ = 0;
+    if (encompass_arr_.top()->stem_l_)
+        right_pos_i_ = encompass_arr_.top()->stem_l_->height()[dir_i_]/inter_f;
+    else
+        right_pos_i_ = 0;
 
     left_pos_i_ += dir_i_;
     right_pos_i_ += dir_i_;
diff --git a/lily/staff.cc b/lily/staff.cc
index 1226fce46a..a3f71b0be7 100644
--- a/lily/staff.cc
+++ b/lily/staff.cc
@@ -19,7 +19,7 @@
 
 
 void
-Staff::add(PointerList<Voice*> const &l)
+Staff::add(Pointer_list<Voice*> const &l)
 {
     for (iter_top(l,i); i.ok(); i++)
 	voice_list_.bottom().add(i);
diff --git a/lily/template4.cc b/lily/template4.cc
index d26e748e6f..399b9ed384 100644
--- a/lily/template4.cc
+++ b/lily/template4.cc
@@ -1,5 +1,5 @@
 /*
-  template4.cc -- instantiate PointerList baseclass.
+  template4.cc -- instantiate Pointer_list baseclass.
 
   source file of the LilyPond music typesetter
 
diff --git a/lily/text-def.cc b/lily/text-def.cc
index 55d04c85bf..a601d4367c 100644
--- a/lily/text-def.cc
+++ b/lily/text-def.cc
@@ -19,7 +19,7 @@ Text_def::width() const
 
 Text_def::Text_def()
 {   
-    align_i_ = -1;			// right
+    align_i_ = 1;			// right
     pdef_l_ = 0;
     style_str_ = "roman";
 }
diff --git a/lily/text-item.cc b/lily/text-item.cc
index 9972a36dc1..6d3b67d003 100644
--- a/lily/text-item.cc
+++ b/lily/text-item.cc
@@ -51,7 +51,7 @@ Text_item::do_pre_processing()
 void
 Text_item::do_post_processing()
 {
-        set_default_index();
+    set_default_index();
 }
 
     
diff --git a/lily/text-reg.cc b/lily/text-reg.cc
index 82e12d6cd7..a3231cec41 100644
--- a/lily/text-reg.cc
+++ b/lily/text-reg.cc
@@ -39,7 +39,7 @@ void
 Text_register::process_requests()
 {
     if (text_req_l_) {
-	text_p_ = new Text_item(text_req_l_->tdef_p_, 0); // ugh
+	text_p_ = new Text_item(text_req_l_->tdef_p_, text_req_l_->dir_i_); // ugh
 	announce_element(Staff_elem_info(text_p_, text_req_l_));
     }
 }
@@ -47,7 +47,8 @@ void
 Text_register::pre_move_processing()
 {
     if (text_p_) {
-	text_p_->dir_i_ = dir_i_;
+	if (dir_i_ && !text_p_->dir_i_)
+	    text_p_->dir_i_ = dir_i_;
 	Staff_symbol* s_l = get_staff_info().staff_sym_l_;
 	text_p_->set_staffsym(s_l);
 	typeset_element(text_p_);
diff --git a/lily/tie-reg.cc b/lily/tie-reg.cc
index af9c539803..c1c5b0bc83 100644
--- a/lily/tie-reg.cc
+++ b/lily/tie-reg.cc
@@ -19,6 +19,8 @@ Tie_register::Tie_register()
     req_l_ =0;
     end_req_l_ =0;
     end_mom_ = -1;
+    melodic_req_l_ = 0;
+    end_melodic_req_l_ =0;
 }
 
 void
@@ -34,6 +36,7 @@ Tie_register::post_move_processing()
     if (tie_p_ && get_staff_info().when() == end_mom_) {
 	end_tie_p_ = tie_p_;
 	end_req_l_ = req_l_;
+	end_melodic_req_l_ = melodic_req_l_;
 	tie_p_ =0;
 	req_l_ =0;
 	end_mom_ = -1;
@@ -71,11 +74,15 @@ void
 Tie_register::acknowledge_element(Staff_elem_info i)
 {
     if (i.elem_l_->name() == Notehead::static_name()) {
-	if (tie_p_)
+	if (tie_p_) {
 	    tie_p_->set_head(-1, (Notehead*)i.elem_l_);
-	
+	    melodic_req_l_ = i.req_l_->musical()->melodic();
+	}
+
 	if (end_tie_p_) {
 	    end_tie_p_->set_head(1, (Notehead*)i.elem_l_);
+	    if (!Melodic_req::compare ( *end_melodic_req_l_, *melodic_req_l_))
+		end_tie_p_->same_pitch_b_ = true;
 	    announce_element(Staff_elem_info(end_tie_p_,end_req_l_));
 	}
     }
diff --git a/lily/tie.cc b/lily/tie.cc
index 06c09a3b82..5c71c9d133 100644
--- a/lily/tie.cc
+++ b/lily/tie.cc
@@ -41,6 +41,7 @@ Tie::Tie()
 {
     right_head_l_ =0;
     left_head_l_ =0;
+    same_pitch_b_ =false;
 }
 
 void
diff --git a/make/Template.make b/make/Template.make
index f9246f92e3..7293362324 100644
--- a/make/Template.make
+++ b/make/Template.make
@@ -55,8 +55,9 @@ LOADLIBES +=
 
 # main target of this module:
 #
-MAINTARGET = $(EXECUTABLE)
+# MAINTARGET = $(EXECUTABLE)
 # MAINTARGET = $(LIBRARY)
+MAINTARGET = 
 
 default: $(MAINTARGET)
 #
diff --git a/make/lilypond.lsm b/make/lilypond.lsm
index 789c602b6d..00c79bcf92 100644
--- a/make/lilypond.lsm
+++ b/make/lilypond.lsm
@@ -2,8 +2,8 @@
 
 Begin3
 Title: LilyPond
-Version: 0.0.60
-Entered-date: 05/05/97
+Version: 0.0.61
+Entered-date: 05/12/97
 Description: LilyPond is a program which converts a music-script (mudela) into
 TeX output, or MIDI to produce multi-staff scores. Features include multiple
 meters, clefs, keys, lyrics, versatile input-language, cadenzas
@@ -13,7 +13,7 @@ Author: hanwen@stack.nl (Han-Wen Nienhuys)
 	jan@digicash.com (Jan Nieuwenhuizen)
 Maintained-by: hanwen@stack.nl (Han-Wen Nienhuys)
 Primary-site: pcnov095.win.tue.nl /pub/lilypond/  
-	300k lilypond-0.0.60.tar.gz
+	300k lilypond-0.0.61.tar.gz
 Alternate-site: 
 Original-site: 
 Platform: unix/win32, GNU C++
diff --git a/make/lilypond.spec b/make/lilypond.spec
index fb892b56f9..5e8fa68686 100644
--- a/make/lilypond.spec
+++ b/make/lilypond.spec
@@ -1,9 +1,9 @@
 Name: lilypond
-Version: 0.0.60
+Version: 0.0.61
 Release: 1
 Copyright: GPL
 Group: Applications/Publishing
-Source0: pcnov095.win.tue.nl:/pub/lilypond/lilypond-0.0.60.tar.gz
+Source0: pcnov095.win.tue.nl:/pub/lilypond/lilypond-0.0.61.tar.gz
 Summary: A preprocessor to make TeX typeset music.
 URL: http://www.stack.nl/~hanwen/lilypond
 Packager: Han-Wen Nienhuys <hanwen@stack.nl>
@@ -25,7 +25,7 @@ make all
 strip bin/lilypond bin/mi2mu
 make prefix="$RPM_BUILD_ROOT/usr" install
 %files
-%doc Documentation/out/AUTHORS.text Documentation/out/CodingStyle.text Documentation/out/INSTALL.text Documentation/out/MANIFESTO.text Documentation/out/convert-mudela.text Documentation/out/error.text Documentation/out/examples.text Documentation/out/faq.text Documentation/out/index.text Documentation/out/language.text Documentation/out/lilygut.text Documentation/out/lilypond.text Documentation/out/mi2mu.text Documentation/out/mudela.text input/cadenza.ly input/collisions.ly input/coriolan-alto.ly input/error.ly input/header.ly input/kortjakje.ly input/pedal.ly input/rhythm.ly input/scales.ly input/scsii-menuetto.ly input/scsii-menuetto.tex input/slurs.ly input/standchen.ly input/standchen.tex input/toccata-fuga-E.ly input/twinkle.ly input/wohltemperirt.ly Documentation/lelie_logo.gif
+%doc Documentation/out/AUTHORS.text Documentation/out/CodingStyle.text Documentation/out/INSTALL.text Documentation/out/MANIFESTO.text Documentation/out/convert-mudela.text Documentation/out/error.text Documentation/out/examples.text Documentation/out/faq.text Documentation/out/index.text Documentation/out/language.text Documentation/out/lilygut.text Documentation/out/lilypond.text Documentation/out/mi2mu.text Documentation/out/mudela.text input/cadenza.ly input/collisions.ly input/coriolan-alto.ly input/error.ly input/header.ly input/kortjakje.ly input/pedal.ly input/rhythm.ly input/scales.ly input/scripts.ly input/scsii-menuetto.ly input/scsii-menuetto.tex input/slurs.ly input/standchen.ly input/standchen.tex input/toccata-fuga-E.ly input/twinkle.ly input/wohltemperirt.ly Documentation/lelie_logo.gif
 /usr/bin/convert-mudela
 /usr/bin/lilypond
 /usr/lib/libflower.so
diff --git a/mf/Makefile b/mf/Makefile
index 3a2fb59ea8..ff0937ad8c 100644
--- a/mf/Makefile
+++ b/mf/Makefile
@@ -40,7 +40,7 @@ LOADLIBES +=
 
 # main target of this module:
 #
-MAINTARGET = $(EXECUTABLE)
+MAINTARGET = 
 
 default: $(MAINTARGET)
 #
diff --git a/tex/lilyponddefs.tex b/tex/lilyponddefs.tex
index 4725230860..ca18e61502 100644
--- a/tex/lilyponddefs.tex
+++ b/tex/lilyponddefs.tex
@@ -21,7 +21,7 @@
         \rationalmultiply\dimen0*#2%
         \raise\dimen0\hbox{#1}}
 \def\maccentdef#1#2#3{\def#1{\maccentraise{\mchar{#2}}{#3}}}
-\def\vcenter#1{\vbox to 0pt{\vss #1\vss}}
+\def\vertcenter#1{\vbox to 0pt{\vss #1\vss}}
 
 \def\mathdef#1#2{\def#1{\mathchar{#2}}}
 \def\mathchar#1{\mathfont\char#1}
@@ -110,15 +110,15 @@
 \def\kdynm{\dynfont m\kern-.15ex}
 \def\kdynp{\dynfont p\kern-.15ex}
 
-\def\dynppp{\dynfont\dynp\kdynp p}
 
-\def\dynpp{\dynfont p\kdynp}
 \def\dynp{\dynfont p}
+\def\dynpp{\dynp\kdynp}
+\def\dynppp{\dynpp\kdynp}
 \def\dynmp{\dynfont m\kdynp}
 \def\dynmf{\dynfont m\kdynf}
 \def\dynf{\dynfont f}
-\def\dynff{\dynfont f\kdynf}
-\def\dynfff{\dynfont f\kdynf \kdynf}
+\def\dynff{\dynf\kdynf}
+\def\dynfff{\dynff\kdynf}
 
 \def\slurcharh#1{{\slurhfont\char#1}}
 \def\slurcharu#1{{\slurufont\char#1}}
@@ -226,10 +226,10 @@
 \def\sixteenthflag{\topalign{\usixteenthflag}}
 \def\thirtysecondflag{\topalign{\uthirtysecondflag}}
 
-\def\cquartrest{\vcenter\quartrest}
-\def\ceighthrest{\vcenter\eighthrest}
-\def\csixteenthrest{\vcenter\sixteenthrest}
-\def\cthirtysecondrest{\vcenter\thirtysecondrest}
+\def\cquartrest{\vertcenter\quartrest}
+\def\ceighthrest{\vertcenter\eighthrest}
+\def\csixteenthrest{\vertcenter\sixteenthrest}
+\def\cthirtysecondrest{\vertcenter\thirtysecondrest}
 
 \def\lsingledot{\kern-\notewidth\singledot}
 \def\ldoubledot{\kern-\notewidth\doubledot}
@@ -238,14 +238,14 @@
 \maccentdef\sforzato{30}{-3/2}
 \maccentdef\marcato{20}{-1/1}
 \maccentdef\imarcato{21}{1/1}
-\maccentdef\staccato{24}{-1/1}
-\maccentdef\istaccato{25}{1/1}
-\maccentdef\staccatissimo{28}{-1/1}
-\maccentdef\istaccatissimo{29}{1/1}
-\maccentdef\portato{18}{-9/10}
-\maccentdef\iportato{19}{9/10}
-\maccentdef\tenuto{26}{0/1}
-\maccentdef\itenuto{27}{0/1}
+\maccentdef\staccato{24}{-1/3}
+\maccentdef\istaccato{25}{1/3}
+\maccentdef\staccatissimo{28}{-5/5}
+\maccentdef\istaccatissimo{29}{2/5}
+\maccentdef\portato{18}{-6/5}
+\maccentdef\iportato{19}{3/5}
+\maccentdef\tenuto{26}{-1/1}
+\maccentdef\itenuto{27}{1/1}
 \maccentdef\fermata{80}{-1/1}
 \maccentdef\ifermata{81}{1/1}
 
@@ -253,7 +253,6 @@
 \mdef\ispicato{29}
 \mdef\upbow{23}
 \mdef\downbow{22}
-\mdef\portato{26}
 
 \mathdef\cup{91} % \cup
 \mathdef\wedge{94} % \wedge