From: Han-Wen Nienhuys <hanwen@xs4all.nl>
Date: Thu, 6 Jul 2000 15:06:32 +0000 (+0200)
Subject: release: 1.3.71
X-Git-Tag: release/1.3.71
X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=bc1e5cfa4aef13a1b9bd2d251dd9cb25dbaf9d03;p=lilypond.git

release: 1.3.71

======
* Fixed: long standing problem in optical-illusion code.

* Fixed: stop beam if stem *has* a beam in auto-beam-engraver.

* Made interface of Multi_measure_rest, System_start_delimiter,
Spacing_spanner, Separating_group_spanner, Beam, Slur and
Rhythmic_head.

* Use properties for minimum distances and spring parameters.  Move
spacing related functions from Paper_column into Spaceable_element.

* Removed most Paper_column typecasts.

1.3
---

diff --git a/CHANGES b/CHANGES
index fd106120c2..659d970b22 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,18 @@
+* Small cleanups to bring down  compile time and binary ensmallment.
+
+* Made Lookup into a smob, and use guile alist iso. an STL map.
+
+* Changed repeated music semantics for relative octave: each
+alternative takes its inital octave from the body.
+
+* Fixed: parser accepts booleans for property values as well.
+
+* Added Scarlatti sonata test file to input/
+
+* kpathsea support, courtesy Carsten Block <carsten.block@gmx.de> 
+
+1.3.70
+======
 * Fixed: long standing problem in optical-illusion code.
 
 * Fixed: stop beam if stem *has* a beam in auto-beam-engraver. 
diff --git a/Documentation/regression-test.tely b/Documentation/regression-test.tely
index 57217c95a4..9cdf843841 100644
--- a/Documentation/regression-test.tely
+++ b/Documentation/regression-test.tely
@@ -43,7 +43,7 @@ a column.  The dots go along as rests are shifted to avoid collisions.
 
 @mudelafile{dots.ly}
 
-Accidentals worki: the second note does not get a sharp. The third and
+Accidentals work: the second note does not get a sharp. The third and
 fourth show forced and courtesy accidentals
 
 @mudelafile{accidental.ly}
@@ -208,11 +208,6 @@ second slur has slurDirection set to down, overriding the stemup  setting.
 
 @mudelafile{generic-property-override.ly}
 
-Paper column supports a special output property that allows you to force
-page breaks (among others).
-
-@mudelafile{between-systems.ly}
-
 @section Repeats
 
 LilyPond has three modes for repeats: folded, unfolded and
diff --git a/Documentation/topdocs/INSTALL.texi b/Documentation/topdocs/INSTALL.texi
index f7d9daed12..3ae43ce2fe 100644
--- a/Documentation/topdocs/INSTALL.texi
+++ b/Documentation/topdocs/INSTALL.texi
@@ -91,6 +91,9 @@ files.
 
 If you do not want to use PostScript output, edit @file{mf/GNUmakefile}.
 
+@item kpathsea, a library for searching (TeX) files.  @code{kpathsea} is
+usually included with your installation of TeX. 
+
 
 @end itemize
 
diff --git a/INSTALL.txt b/INSTALL.txt
index a5d6534d99..c7fcd32855 100644
--- a/INSTALL.txt
+++ b/INSTALL.txt
@@ -84,6 +84,9 @@ Prerequisites
 
      If you do not want to use PostScript output, edit `mf/GNUmakefile'.
 
+   * kpathsea, a library for searching (TeX) files.  `kpathsea' is
+     usually included with your installation of TeX.
+
 
 Running
 =======
diff --git a/VERSION b/VERSION
index 7da8041297..be67f6cfe8 100644
--- a/VERSION
+++ b/VERSION
@@ -1,7 +1,7 @@
 PACKAGE_NAME=LilyPond
 MAJOR_VERSION=1
 MINOR_VERSION=3
-PATCH_LEVEL=70
+PATCH_LEVEL=71
 MY_PATCH_LEVEL=
 
 # use the above to send patches: MY_PATCH_LEVEL is always empty for a
diff --git a/config.hh.in b/config.hh.in
index 833c0eec00..4272e0b1c7 100644
--- a/config.hh.in
+++ b/config.hh.in
@@ -31,5 +31,5 @@
 #define DIRSEP '@DIRSEP@'
 #define PATHSEP '@PATHSEP@'
 
-/* define GUILE-ification */
-#undef HAVE_LIBGUILE 
+/* define if no assert */
+#define HAVE_ASSERT_H 1
diff --git a/configure b/configure
index d35bdc4045..839124306e 100755
--- a/configure
+++ b/configure
@@ -1509,6 +1509,126 @@ fi
     
 
 # AC_HAVE_HEADERS(limits.h malloc.h string.h unistd.h values.h)
+echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
+echo "configure:1514: checking how to run the C preprocessor" >&5
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+    # This must be in double quotes, not single quotes, because CPP may get
+  # substituted into the Makefile and "${CC-cc}" will confuse make.
+  CPP="${CC-cc} -E"
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp.
+  cat > conftest.$ac_ext <<EOF
+#line 1529 "configure"
+#include "confdefs.h"
+#include <assert.h>
+Syntax Error
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1535: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  :
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  CPP="${CC-cc} -E -traditional-cpp"
+  cat > conftest.$ac_ext <<EOF
+#line 1546 "configure"
+#include "confdefs.h"
+#include <assert.h>
+Syntax Error
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1552: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  :
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  CPP="${CC-cc} -nologo -E"
+  cat > conftest.$ac_ext <<EOF
+#line 1563 "configure"
+#include "confdefs.h"
+#include <assert.h>
+Syntax Error
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1569: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  :
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  CPP=/lib/cpp
+fi
+rm -f conftest*
+fi
+rm -f conftest*
+fi
+rm -f conftest*
+  ac_cv_prog_CPP="$CPP"
+fi
+  CPP="$ac_cv_prog_CPP"
+else
+  ac_cv_prog_CPP="$CPP"
+fi
+echo "$ac_t""$CPP" 1>&6
+
+for ac_hdr in assert.h
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:1597: checking for $ac_hdr" >&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 1602 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1607: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+ 
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
 
 printing_b=no
 # Check whether --enable-printing or --disable-printing was given.
@@ -1536,7 +1656,7 @@ EOF
 fi
 
 echo $ac_n "checking how to run the C++ preprocessor""... $ac_c" 1>&6
-echo "configure:1540: checking how to run the C++ preprocessor" >&5
+echo "configure:1660: 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
@@ -1549,12 +1669,12 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
 cross_compiling=$ac_cv_prog_cxx_cross
   CXXCPP="${CXX-g++} -E"
   cat > conftest.$ac_ext <<EOF
-#line 1553 "configure"
+#line 1673 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1558: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1678: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -1591,7 +1711,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:1595: checking for $ac_word" >&5
+echo "configure:1715: 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
@@ -1623,7 +1743,7 @@ test -n "$CXX" || CXX="gcc"
 
 
 echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1627: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
+echo "configure:1747: 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.
@@ -1634,12 +1754,12 @@ cross_compiling=$ac_cv_prog_cxx_cross
 
 cat > conftest.$ac_ext << EOF
 
-#line 1638 "configure"
+#line 1758 "configure"
 #include "confdefs.h"
 
 int main(){return(0);}
 EOF
-if { (eval echo configure:1643: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1763: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; 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
@@ -1665,12 +1785,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:1669: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1789: 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:1674: checking whether we are using GNU C++" >&5
+echo "configure:1794: 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
@@ -1679,7 +1799,7 @@ else
   yes;
 #endif
 EOF
-if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:1683: \"$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:1803: \"$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
@@ -1698,7 +1818,7 @@ ac_test_CXXFLAGS="${CXXFLAGS+set}"
 ac_save_CXXFLAGS="$CXXFLAGS"
 CXXFLAGS=
 echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6
-echo "configure:1702: checking whether ${CXX-g++} accepts -g" >&5
+echo "configure:1822: 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
@@ -1732,17 +1852,17 @@ fi
 
     ac_safe=`echo "FlexLexer.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for FlexLexer.h""... $ac_c" 1>&6
-echo "configure:1736: checking for FlexLexer.h" >&5
+echo "configure:1856: 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 1741 "configure"
+#line 1861 "configure"
 #include "confdefs.h"
 #include <FlexLexer.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1746: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1866: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -1793,12 +1913,12 @@ fi
 
 
     echo $ac_n "checking whether explicit instantiation is needed""... $ac_c" 1>&6
-echo "configure:1797: checking whether explicit instantiation is needed" >&5
+echo "configure:1917: 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 1802 "configure"
+#line 1922 "configure"
 #include "confdefs.h"
 
     template <class T> struct foo { static int baz; };
@@ -1808,7 +1928,7 @@ int main() {
  return foo<int>::baz; 
 ; return 0; }
 EOF
-if { (eval echo configure:1812: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1932: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   lily_cv_need_explicit_instantiation=no
 else
@@ -1835,7 +1955,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:1839: checking for $ac_word" >&5
+echo "configure:1959: 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
@@ -1878,7 +1998,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:1882: checking for $ac_word" >&5
+echo "configure:2002: 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
@@ -1913,7 +2033,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:1917: checking for $ac_word" >&5
+echo "configure:2037: 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
@@ -1981,7 +2101,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:1985: checking for $ac_word" >&5
+echo "configure:2105: 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
@@ -2014,7 +2134,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:2018: checking for $ac_word" >&5
+echo "configure:2138: 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
@@ -2070,7 +2190,7 @@ fi
 
 
     echo $ac_n "checking language""... $ac_c" 1>&6
-echo "configure:2074: checking language" >&5    
+echo "configure:2194: checking language" >&5    
     case "$language" in
       En* | en* | Am* | am* | US* | us*)
 	    lang=English;;
@@ -2106,7 +2226,7 @@ EOF
 
 
     echo $ac_n "checking for gettext in -lintl""... $ac_c" 1>&6
-echo "configure:2110: checking for gettext in -lintl" >&5
+echo "configure:2230: 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
@@ -2114,7 +2234,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lintl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2118 "configure"
+#line 2238 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
@@ -2128,7 +2248,7 @@ int main() {
 gettext()
 ; return 0; }
 EOF
-if { (eval echo configure:2132: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2252: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2158,12 +2278,12 @@ fi
     for ac_func in gettext
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:2162: checking for $ac_func" >&5
+echo "configure:2282: 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 2167 "configure"
+#line 2287 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -2189,7 +2309,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:2193: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2313: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -2221,7 +2341,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:2225: checking for $ac_word" >&5
+echo "configure:2345: 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
@@ -2252,7 +2372,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:2256: checking whether msgfmt accepts -o" >&5
+echo "configure:2376: 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
@@ -2280,7 +2400,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:2284: checking for $ac_word" >&5
+echo "configure:2404: 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
@@ -2316,7 +2436,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:2320: checking for $ac_word" >&5
+echo "configure:2440: 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
@@ -2354,7 +2474,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:2358: checking for $ac_word" >&5
+echo "configure:2478: 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
@@ -2390,7 +2510,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:2394: checking for $ac_word" >&5
+echo "configure:2514: 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
@@ -2429,7 +2549,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:2433: checking for $ac_word" >&5
+echo "configure:2553: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_INIMETAFONT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2465,7 +2585,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:2469: checking for $ac_word" >&5
+echo "configure:2589: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_INIMFONT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2503,7 +2623,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:2507: checking for $ac_word" >&5
+echo "configure:2627: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_INIMETAPOST'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2539,7 +2659,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:2543: checking for $ac_word" >&5
+echo "configure:2663: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_INIMPOST'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2573,7 +2693,7 @@ test -n "$INIMPOST" || INIMPOST="-echo no inimp or inimpost"
     fi
 
     echo $ac_n "checking for working metafont mode""... $ac_c" 1>&6
-echo "configure:2577: checking for working metafont mode" >&5
+echo "configure:2697: checking for working metafont mode" >&5
     modelist='ljfour lj4 lj3 lj2 ljet laserjet'
     for MFMODE in $modelist; do
     	$METAFONT "\mode:=$MFMODE; mode_setup; end." > /dev/null 2>&1
@@ -2619,7 +2739,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:2623: checking for $ac_word" >&5
+echo "configure:2743: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_KPSEWHICH'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2650,7 +2770,7 @@ done
 test -n "$KPSEWHICH" || KPSEWHICH="no"
 
     echo $ac_n "checking for tfm path""... $ac_c" 1>&6
-echo "configure:2654: checking for tfm path" >&5
+echo "configure:2774: checking for tfm path" >&5
 
     TFM_FONTS="cmr msam"
 
@@ -2678,13 +2798,13 @@ echo "configure:2654: checking for tfm path" >&5
 
     ## First, let's just see if we can find Guile at all.
     echo $ac_n "checking "for guile-config"""... $ac_c" 1>&6
-echo "configure:2682: checking "for guile-config"" >&5
+echo "configure:2802: checking "for guile-config"" >&5
     for guile_config in guile-config $target-guile-config $build-guile-config; do
 	echo "$ac_t"""$guile_config"" 1>&6
 	if ! $guile_config --version > /dev/null 2>&1 ; then
 	    echo "configure: warning: "cannot execute $guile_config"" 1>&2
 	    echo $ac_n "checking "if we are cross compiling"""... $ac_c" 1>&6
-echo "configure:2688: checking "if we are cross compiling"" >&5
+echo "configure:2808: checking "if we are cross compiling"" >&5
 	    guile_config=error
 	else
 	    break
@@ -2695,7 +2815,7 @@ echo "configure:2688: checking "if we are cross compiling"" >&5
 	exit 1
     fi
     echo $ac_n "checking "Guile version"""... $ac_c" 1>&6
-echo "configure:2699: checking "Guile version"" >&5
+echo "configure:2819: checking "Guile version"" >&5
     need_guile_version="1.3.4"
     guile_version=`expr "\`$guile_config --version 2>&1\`" : ".*\($need_guile_version\).*"`
     echo "$ac_t"""$guile_version"" 1>&6
@@ -2708,7 +2828,7 @@ echo "configure:2699: checking "Guile version"" >&5
     
 ## The GUILE_FLAGS macro.
   echo $ac_n "checking for Guile""... $ac_c" 1>&6
-echo "configure:2712: checking for Guile" >&5
+echo "configure:2832: checking for Guile" >&5
   if ! $guile_config link > /dev/null ; then
       echo "$ac_t"""cannot execute $guile_config"" 1>&6
       { echo "configure: error: "cannot find guile-config; is Guile installed?"" 1>&2; exit 1; }
@@ -2723,7 +2843,7 @@ echo "configure:2712: checking for Guile" >&5
     # Extract the first word of "guile", so it can be a program name with args.
 set dummy guile; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2727: checking for $ac_word" >&5
+echo "configure:2847: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_GUILE'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2761,7 +2881,7 @@ fi
 
 
 echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6
-echo "configure:2765: checking for 8-bit clean memcmp" >&5
+echo "configure:2885: 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
@@ -2769,7 +2889,7 @@ else
   ac_cv_func_memcmp_clean=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 2773 "configure"
+#line 2893 "configure"
 #include "confdefs.h"
 #ifdef __cplusplus
 extern "C" void exit(int);
@@ -2782,7 +2902,7 @@ main()
 }
 
 EOF
-if { (eval echo configure:2786: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:2906: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_func_memcmp_clean=yes
 else
@@ -2800,12 +2920,12 @@ echo "$ac_t""$ac_cv_func_memcmp_clean" 1>&6
 test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.${ac_objext}"
 
 echo $ac_n "checking for vprintf""... $ac_c" 1>&6
-echo "configure:2804: checking for vprintf" >&5
+echo "configure:2924: 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 2809 "configure"
+#line 2929 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char vprintf(); below.  */
@@ -2831,7 +2951,7 @@ vprintf();
 
 ; return 0; }
 EOF
-if { (eval echo configure:2835: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2955: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_vprintf=yes"
 else
@@ -2855,12 +2975,12 @@ fi
 
 if test "$ac_cv_func_vprintf" != yes; then
 echo $ac_n "checking for _doprnt""... $ac_c" 1>&6
-echo "configure:2859: checking for _doprnt" >&5
+echo "configure:2979: 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 2864 "configure"
+#line 2984 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char _doprnt(); below.  */
@@ -2886,7 +3006,7 @@ _doprnt();
 
 ; return 0; }
 EOF
-if { (eval echo configure:2890: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3010: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func__doprnt=yes"
 else
@@ -2913,12 +3033,12 @@ fi
 for ac_func in memmem snprintf vsnprintf gettext isinf
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:2917: checking for $ac_func" >&5
+echo "configure:3037: 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 2922 "configure"
+#line 3042 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -2944,7 +3064,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:2948: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3068: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -2983,7 +3103,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:2987: checking for $ac_word" >&5
+echo "configure:3107: 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
@@ -3016,7 +3136,7 @@ test -n "$MAKEINFO" || MAKEINFO="error"
 # Extract the first word of "perl", so it can be a program name with args.
 set dummy perl; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3020: checking for $ac_word" >&5
+echo "configure:3140: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_PERL'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3219,6 +3339,7 @@ s%@ICFLAGS@%$ICFLAGS%g
 s%@ILDFLAGS@%$ILDFLAGS%g
 s%@DEFINES@%$DEFINES%g
 s%@EXTRA_LIBES@%$EXTRA_LIBES%g
+s%@CPP@%$CPP%g
 s%@CXX@%$CXX%g
 s%@CXXCPP@%$CXXCPP%g
 s%@YACC@%$YACC%g
@@ -3566,3 +3687,4 @@ fi
     fi
 
 
+# ugh, hack.
diff --git a/configure.in b/configure.in
index 9d2b9cc58b..07ca6f4bc4 100644
--- a/configure.in
+++ b/configure.in
@@ -14,6 +14,7 @@ AC_CONFIG_SUBDIRS(stepmake)
 # Uncomment the configuration options your package needs.
 AC_STEPMAKE_COMPILE
 # AC_HAVE_HEADERS(limits.h malloc.h string.h unistd.h values.h)
+AC_HAVE_HEADERS(assert.h)
 
 printing_b=no
 AC_ARG_ENABLE(printing,
@@ -61,3 +62,4 @@ AC_PATH_PROG(PERL, perl, error)
 
 AC_STEPMAKE_END
 
+# ugh, hack.
diff --git a/flower/axis.cc b/flower/axis.cc
index ed55fddc49..8814f7723e 100644
--- a/flower/axis.cc
+++ b/flower/axis.cc
@@ -8,6 +8,7 @@
 
 #include <assert.h>
 #include "axes.hh"
+#include "string.hh"
 
 String
 axis_name_str (Axis a)
diff --git a/flower/binary-source-file.cc b/flower/binary-source-file.cc
index eb6cbbb0ba..a551244489 100644
--- a/flower/binary-source-file.cc
+++ b/flower/binary-source-file.cc
@@ -10,7 +10,7 @@
 #include <limits.h>		// INT_MAX
 #include <assert.h>
 
-#include "proto.hh"
+#include "flower-proto.hh"
 #include "string.hh"
 #include "source-file.hh"
 #include "binary-source-file.hh"
diff --git a/flower/direction.cc b/flower/direction.cc
index aeddc311a2..f28077dc85 100644
--- a/flower/direction.cc
+++ b/flower/direction.cc
@@ -8,6 +8,7 @@
  */
 
 #include "direction.hh"
+#include "string.hh"
 
 String
 direction_str (Direction d, Axis a)
diff --git a/flower/include/axes.hh b/flower/include/axes.hh
index a1f290f8a9..c863fdda1f 100644
--- a/flower/include/axes.hh
+++ b/flower/include/axes.hh
@@ -17,7 +17,7 @@ enum Axis {
 };
 
 
-#include "string.hh"		// ugh
+class String;
 
 String axis_name_str (Axis);
 
diff --git a/flower/include/file-storage.hh b/flower/include/file-storage.hh
index 7fbcccad58..5af256f710 100644
--- a/flower/include/file-storage.hh
+++ b/flower/include/file-storage.hh
@@ -10,7 +10,7 @@
 #ifndef FILE_STORAGE_HH
 #define FILE_STORAGE_HH
 
-#include "proto.hh"
+#include "flower-proto.hh"
 
 
 /**
diff --git a/flower/include/flower-proto.hh b/flower/include/flower-proto.hh
index a900c33dc9..cad9bff1f2 100644
--- a/flower/include/flower-proto.hh
+++ b/flower/include/flower-proto.hh
@@ -1,6 +1,6 @@
 
 /*
-  fproto.hh -- typenames in flowerlib
+  fflower-proto.hh -- typenames in flowerlib
 
   (c) 1996 Han-Wen Nienhuys
 */
@@ -52,6 +52,16 @@ typedef long long I64;
 
 typedef unsigned char Byte;
 
+struct Duration;
+struct Duration_iterator;
+struct Source_file;
+struct Binary_source_file;
+struct Sources;
+struct File_storage;
+struct Mapped_file_storage;
+struct Simple_file_storage;
+
+
 
 #endif // FPROTO_HH
 
diff --git a/flower/include/input.hh b/flower/include/input.hh
index 1c9e61ccbf..44f2bb90da 100644
--- a/flower/include/input.hh
+++ b/flower/include/input.hh
@@ -10,7 +10,7 @@
 #ifndef INPUT_HH
 #define INPUT_HH
 
-#include "proto.hh"
+#include "flower-proto.hh"
 
 /**
   Base class for anything that records its poisition in the parse file.
diff --git a/flower/include/proto.hh b/flower/include/proto.hh
index 7ddc874434..65296f8106 100644
--- a/flower/include/proto.hh
+++ b/flower/include/proto.hh
@@ -1,22 +1,2 @@
 
-/*
-  proto.hh -- part of LilyPond
-
-  (c) 1996,97 Han-Wen Nienhuys
-*/
-
-#ifndef PROTO_HH
-#define PROTO_HH
-
-#include "flower-proto.hh"
-#include "real.hh"
-struct Duration;
-struct Duration_iterator;
-struct Source_file;
-struct Binary_source_file;
-struct Sources;
-struct File_storage;
-struct Mapped_file_storage;
-struct Simple_file_storage;
-
-#endif // PROTO_HH
+#error
diff --git a/flower/include/rational.hh b/flower/include/rational.hh
index 1058d784c4..69a9ab1bd2 100644
--- a/flower/include/rational.hh
+++ b/flower/include/rational.hh
@@ -14,7 +14,7 @@
 #include "compare.hh"
 #include "arithmetic-operator.hh"
 #include "flower-proto.hh"
-#include "string.hh"
+class String;
 
 /**
    Rational numbers.  Included is support for + and - infinity.
diff --git a/flower/include/source-file.hh b/flower/include/source-file.hh
index 560ab09ed9..26c0b021f4 100644
--- a/flower/include/source-file.hh
+++ b/flower/include/source-file.hh
@@ -6,7 +6,7 @@
 #ifndef SOURCE_FILE_HH
 #define SOURCE_FILE_HH
 
-#include "proto.hh"
+#include "flower-proto.hh"
 #include "string.hh"
 #include "interval.hh"
 
diff --git a/flower/include/source.hh b/flower/include/source.hh
index 711f453c05..20ebdb02f3 100644
--- a/flower/include/source.hh
+++ b/flower/include/source.hh
@@ -6,7 +6,7 @@
 #ifndef SOURCE_HH
 #define SOURCE_HH
 #include "cons.hh"
-#include "proto.hh"
+#include "flower-proto.hh"
 
 /**
    a set of sourcefiles.
diff --git a/flower/input.cc b/flower/input.cc
index a33552ec8a..7483606ba0 100644
--- a/flower/input.cc
+++ b/flower/input.cc
@@ -6,7 +6,7 @@
  (c) 1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 */
 #include <iostream.h>
-#include "proto.hh"
+#include "flower-proto.hh"
 #include "input.hh"
 #include "string.hh"
 #include "source.hh"
diff --git a/flower/mapped-file-storage.cc b/flower/mapped-file-storage.cc
index 2c5ad32708..ebc81fca30 100644
--- a/flower/mapped-file-storage.cc
+++ b/flower/mapped-file-storage.cc
@@ -30,7 +30,7 @@
 #endif
 
 #include "string.hh"
-#include "proto.hh"
+#include "flower-proto.hh"
 #include "warn.hh"
 #include "file-storage.hh"
 
diff --git a/flower/source-file.cc b/flower/source-file.cc
index c5e5b1dd34..65e4674b46 100644
--- a/flower/source-file.cc
+++ b/flower/source-file.cc
@@ -12,7 +12,7 @@
 #include <strstream.h>
 
 #include "string.hh"
-#include "proto.hh"
+#include "flower-proto.hh"
 #include "warn.hh"
 #include "source-file.hh"
 #include "simple-file-storage.hh"
diff --git a/flower/source.cc b/flower/source.cc
index f3b5874547..8623548e25 100644
--- a/flower/source.cc
+++ b/flower/source.cc
@@ -11,7 +11,7 @@
 #include "killing-cons.tcc"
 #include "binary-source-file.hh"
 #include "string.hh"
-#include "proto.hh"
+#include "flower-proto.hh"
 #include "source-file.hh"
 #include "source.hh"
 #include "file-path.hh"
diff --git a/input/GNUmakefile b/input/GNUmakefile
index 2ea52dadf8..b4ad54448b 100644
--- a/input/GNUmakefile
+++ b/input/GNUmakefile
@@ -4,7 +4,7 @@ depth = ..
 
 SUBDIRS=test bugs tutorial
 
-examples=trip  star-spangled-banner paddy
+examples=trip  star-spangled-banner paddy scarlatti-edited
 flexamples=
 
 LOCALSTEPMAKE_TEMPLATES=mutopia
diff --git a/input/scarlatti-edited.ly b/input/scarlatti-edited.ly
new file mode 100644
index 0000000000..1bea1212a0
--- /dev/null
+++ b/input/scarlatti-edited.ly
@@ -0,0 +1,274 @@
+% test.ly LilyPond 1.3.70 -- 6 July 2000
+
+\header {
+	title = "Scarlatti test";
+	composer = "D. Scarlatti and J. D. S. Sankey";
+}
+
+\version "1.3.70";
+
+\include "scarlatti-properties.ly"
+\include "scarlatti-paper.ly"
+
+\score{
+	\notes \context PianoStaff <
+	\context Staff=up <
+	\key d \major ;
+	\time 3/8;
+	\clef treble;
+	\autochange Staff
+	\context Voice=va< \zs
+	\su
+	\context Thread=ta{ \n
+		\rh \sm [ \times 2/3{a'32 d'' fis''}\n a''16] a'8 g'|
+		%a2
+		\times 2/3{\lh d'16 \rh fis' g' a' b' cis'' d'' fis'' g''}|
+		%a3
+		a''8 a' g'|
+		%a4
+		a'8 s \lh d''|
+		%a5
+		s8 \rh fis'' s|
+		%a6
+		a''32 s fis'' s d'' s a' s d' s a s|
+		%a7
+		r16 a' fis'8. d'16~
+		%a8
+		d'16 g' e'8. cis'16|
+		%a9
+		r16 a' fis'8. d'16~
+		%a10
+		d'16 g' e'8. cis'16|
+		%a11
+		r16 fis' d'8. g'16~
+		%a12
+		g'16 fis'8 e' b'16~
+		%a13
+		b'16 a' fis'8. d''16~
+		%a14
+		d''16 cis'' a'8. fis''16~
+		%a15
+		\sd fis''16 e''8 cis'' a'16~
+		%a16
+		\su a'8 d'' b''16 s|
+		%a17
+		\lh \sd r16 e''8 cis'' a'16~
+		%a18
+		\su a'8 d'' b''16 s|
+		%a19
+		s8 a''^"M" s4
+		%a20
+		a''8 s4
+		%a21
+		fis''8 s4
+		%a22
+		b''8^"M" a''|
+		%a23
+		gis''8 \rh[b' c'']|
+		%a24
+		gis'8 f''32 d'' ais' b' e'' c'' gis' a'|
+		%a25
+		d''32 b' fis' gis' c'' a' dis' e' b' gis' dis' e'|
+		%a26
+		a'8~a'32 gis' a' b' c'' gis' a' b'|
+		%a27
+		r8 a'4~
+		%a28
+		a'8 a'4~
+		%a29
+		a'8 cis''4^\prall~
+		%a30
+		cis''4.^\prall~
+		%a31
+		cis''4._\prall~
+		%a32
+		cis''4._\prall
+		%a33
+		\times 12/15{a''16 \sm gis''32 fis'' e'' d'' cis'' b' a' gis' fis' e' d' cis' b \n}
+		%a34
+		\lh a32 \rh[e' cis' a]\lh cis' \rh[a' e' cis']\lh e' \rh[cis'' a' e']|
+		%a35
+		\lh a'32 \rh[e'' cis'' a']\lh cis'' \rh[a'' e'' cis'']\lh a' \rh[e'' cis'' a']|
+		%a36
+		\lh e'32 \rh[cis'' a' e']\lh cis' \rh[a' e' cis']\lh a \rh[e' cis' a]|
+		%a37
+		\lh a,16 d32 e \rh a4 \bar "||";
+	}
+	 \context Thread=tb{ \n
+		 \rh s8 fis' e'|
+		 s4.
+		 %a3
+		 s8 fis' e'|
+		 %a4
+		 fis'8 s \lh a'|
+		 %a5
+		 s8 \rh d'' s|
+		 \skip \longa*35/64;
+		 %a11
+		 e'16~
+		 %a12
+		 e'16 s s4|
+		 s4.*10
+		 %a23
+		 s8 gis' a'|
+		 %a24
+		 b'8 s4|
+		 s4.*6
+		 %a31
+		 s8 e''4^\prall~e''4.^\prall
+	 }
+	  \context Thread=tc{ \n
+	  \rh s8 d' cis'|
+	  s4.
+	  %a3
+	  s8 d' cis'
+	  %a4
+	  d'8 s \lh fis'|
+	  %a5
+	  s8 \rh a'
+	  }>
+	\autochange Staff
+	\context Voice=vb< \zs
+	\sd
+	\context Thread=td{ \n
+		\lh \sm[\times 2/3{d32 fis a}\n d'16]a8 a|
+		%b2
+		d4 s8|
+		%b3
+		s8 a a|
+		%b4
+		r32[d fis a][d' fis' a' d'']r \rh[d fis a]
+		%b5
+		[d'32 fis' a' d'']r32 \lh[d fis a][d' fis' a' d'']
+		%b6
+		s a''32 s fis'' s d'' s a' s d' s a|
+		%b7
+		\su r8. fis16 b8|
+		%b8
+		r8. g16 a8~
+		%b9
+		a16 r8 fis16 b8|
+		%b10
+		r8. g16 b8|
+		s4.
+		%b12
+		r8 a b|
+		%b13
+		\sd r8 d'4|
+		%b14
+		e'8 fis'4|
+		%b15
+		\su s8 a''^"M" s|
+		%b16
+		\sd b8 d' gis'|
+		%b17
+		\rh \su s8 a'' s|
+		%b18
+		\sd b8 d' gis'|
+		%b19
+		\times 2/3{a'16 c'' b' a' c'' d'' e'' c'' b'}|
+		%b20
+		\times 2/3{a'16 c'' b' a' c'' d'' e'' c'' b'}|
+		%b21
+		\times 2/3{a'16 c'' b' a' b' c''}dis''32 c'' b' a'|
+		%b22
+		b'32 gis' dis' e' d''8 cis''|
+		%b23
+		b'32 gis' dis' e' s4|
+		%b24
+		s8 \lh d' cis'|
+		%b25
+		b8 a gis|
+		%b26
+		a32 d' c' b c' \rs f' \zs e' d' c' e' fis' gis'|
+		%b27
+		[\su a8 \sd a' \su b]|
+		%b28
+		[a8 \sd a' \su b]|
+		%b29
+		[a8 \sd a' \su b]|
+		%b30
+		[a8 \sd a' \su b]|
+		%b31
+		[a8 \sd a' \su b]|
+		%b32
+		[a8 \sd a' \su b]|
+		}
+	 \context Thread=te{ \n
+		 \lh s4.*24
+		 %b25
+		 b,8 a, gis,|
+		 s4.
+		 %b27
+		 s4 d'8|
+		 %b28
+		 cis'8 s d'|
+		 %b29
+		 cis'8 s d'|
+		 %b30
+		 cis'8 s d'|
+		 %b31
+		 cis'8 s d'|
+		 %b32
+		 cis'8
+	 }>
+	\autochange Staff
+	\context Voice=vc< \zs
+	\sd
+	\context Thread=tf{ \n
+		\lh s4.*6
+		%c7
+		d4.|
+		%c8
+		e4.|
+		%c9
+		d4.|
+		%c10
+		e4.|
+		%c11
+		d8 fis cis|
+		%c12
+		d4 g8|
+		%c13
+		fis4 b8|
+		%c14
+		a4 d'8|
+		%c15
+		a8 s a_"M"|
+		%c16
+		s4 s16 \rh e|
+		%c17
+		a8 s a|
+		%c18
+		s4 s16 \lh e|
+		%c19
+		a8_"M" s a|
+		%c20
+		g8 s g|
+		%c21
+		dis8 s dis|
+		%c22
+		e8 s4|
+		%c23
+		s8 e dis|
+		%c24
+		e8 d cis
+		}
+	 \context Thread=tg{ \n
+		 \lh s4.*10
+	 %c11
+	 s4 a8
+	 }>
+	 >
+	\context Staff=down<
+	\clef bass;
+	\key d \major;
+	s4.*37
+	>>
+	\paper { 
+		%sonata-specific settings
+		\translator{\VoiceContext beamAutoBegin=0;beamAutoEnd_8="3/8";
+		beamAutoEnd_16="3/8";beamAutoEnd_24="1/8";beamAutoEnd_32="1/8";}
+	}
+}
+
diff --git a/input/scarlatti-paper.ly b/input/scarlatti-paper.ly
new file mode 100644
index 0000000000..8ed8e1e2a7
--- /dev/null
+++ b/input/scarlatti-paper.ly
@@ -0,0 +1,25 @@
+\paper{
+	%my standard paper block
+	0=\font "feta19"
+	-1=\font "feta16"
+	arithmetic_multiplier=7.\pt;
+	indent=0.;
+	linewidth=188.\mm;
+	forced_stem_shorten0=0.;
+	forced_stem_shorten1=0.;
+	forced_stem_shorten2=0.;
+	forced_stem_shorten3=0.;
+	\translator{
+		\PianoStaffContext
+		maxVerticalAlign=42.\pt;
+		minVerticalAlign=42.\pt;
+	}
+	\translator{\StaffContext
+	timeSignatureStyle="C";}
+	\translator{\VoiceContext
+		noStemExtend = ##t
+		tupletVisibility = ##f
+	}
+}
+
+
diff --git a/input/scarlatti-properties.ly b/input/scarlatti-properties.ly
new file mode 100644
index 0000000000..3a86facf1c
--- /dev/null
+++ b/input/scarlatti-properties.ly
@@ -0,0 +1,15 @@
+
+
+rh=\property Thread.noteHeadStyle=##f 
+lh=\property Thread.noteHeadStyle = #'diamond
+n=\property Thread.fontSize=#0  
+sm=\property Thread.fontSize=#-1 
+su=\property Voice.verticalDirection=#1  
+sd=\property Voice.verticalDirection=#-1
+zs=\property Voice.forceHorizontalShift=#0.0
+ls=\property Voice.forceHorizontalShift=#-0.6
+sls=\property Voice.forceHorizontalShift=#-0.22
+rs=\property Voice.forceHorizontalShift=#0.6
+srs=\property Voice.forceHorizontalShift=#0.22
+ab=\property Voice.noAutoBeaming=##f
+xb=\property Voice.noAutoBeaming=##t
diff --git a/lily/GNUmakefile b/lily/GNUmakefile
index 16218df88e..7699304769 100644
--- a/lily/GNUmakefile
+++ b/lily/GNUmakefile
@@ -6,15 +6,16 @@ depth = ..
 NAME = lilypond
 SUBDIRS = include
 
+EXTRA_LIBES=-lkpathsea
 MODULE_LIBS=$(depth)/flower 
-MODULE_INCLUDES= $(depth)/flower/include 
+MODULE_INCLUDES= $(depth)/flower/include
 MODULE_CXXFLAGS=
 HELP2MAN_EXECS = lilypond
 
 STEPMAKE_TEMPLATES= c++ executable po help2man
 
 include $(depth)/make/stepmake.make 
-
+EXTRA_LIBES=-lkpathsea
 # force these: Make can't know these have to be generated in advance
 $(outdir)/my-lily-parser.o: $(outdir)/parser.hh
 $(outdir)/my-lily-lexer.o: $(outdir)/parser.hh
diff --git a/lily/all-font-metrics.cc b/lily/all-font-metrics.cc
index f8e2c0cee1..9cff0e2b28 100644
--- a/lily/all-font-metrics.cc
+++ b/lily/all-font-metrics.cc
@@ -16,6 +16,10 @@
 #include "lily-guile.hh"
 #include "tfm-reader.hh"
 
+extern "C" {
+#include <kpathsea/kpathsea.h>
+}
+
 const char * default_font_sz_ = "cmr10";
 
 All_font_metrics::All_font_metrics (String path)
@@ -29,11 +33,19 @@ All_font_metrics::find_afm (String name)
   SCM sname = ly_symbol2scm (name.ch_C ());
   if (!afm_p_dict_.elem_b (sname))
     {
-      String path = name  + ".afm";
-      path = search_path_.find (path);
+      String path;
       if (path.empty_b ())
+	{
+	  char  * p = kpse_find_file(name.ch_C(), kpse_afm_format, true);
+	  if (p)
+	    path = p;
+	}
+      
+      if (path.empty_b())
+	path = search_path_.find (name  + ".afm");
+      if (path.empty_b())
 	return 0;
-
+      
       if (verbose_global_b)
 	progress_indication ("[" + path);
       Adobe_font_metric * afm_p = read_afm_file (path);
@@ -76,10 +88,18 @@ All_font_metrics::find_tfm (String name)
   SCM sname = ly_symbol2scm (name.ch_C ());  
   if (!tfm_p_dict_.elem_b (sname))
     {
-      String path = name  + ".tfm";
-      path = search_path_.find (path);
-      if (path.empty_b ())
+      String path;
+      
+      if (path.empty_b())
+	{
+	  char * p = kpse_find_tfm(name.ch_C());
+	  path = p;
+	}
+      if (path.empty_b())
+	path = search_path_.find (name  + ".tfm");
+      if (path.empty_b())
 	return 0;
+
       if (verbose_global_b)
 	progress_indication ("[" + path);
       Tex_font_metric	* tfm_p = Tex_font_metric_reader::read_file (path);
diff --git a/lily/beam.cc b/lily/beam.cc
index 9e59ec6485..32bffce8dc 100644
--- a/lily/beam.cc
+++ b/lily/beam.cc
@@ -10,6 +10,7 @@
 
 /*
   [TODO]
+  * shorter! (now +- 1000 lines)
     * less hairy code
     * move paper vars to scm
 
diff --git a/lily/engraver-group-engraver.cc b/lily/engraver-group-engraver.cc
index a3e71087cd..db7a7d79dd 100644
--- a/lily/engraver-group-engraver.cc
+++ b/lily/engraver-group-engraver.cc
@@ -6,7 +6,7 @@
   (c)  1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 */
 
-#include "proto.hh"
+#include "flower-proto.hh"
 #include "engraver-group-engraver.hh"
 #include "engraver.hh"
 #include "debug.hh"
diff --git a/lily/extender-engraver.cc b/lily/extender-engraver.cc
index 4be468180c..21a246d713 100644
--- a/lily/extender-engraver.cc
+++ b/lily/extender-engraver.cc
@@ -6,7 +6,7 @@
   
 */
 
-#include "proto.hh"
+#include "flower-proto.hh"
 #include "musical-request.hh"
 #include "lyric-extender.hh"
 #include "paper-column.hh"
diff --git a/lily/font-metric.cc b/lily/font-metric.cc
index 220eb2a469..4443aa6399 100644
--- a/lily/font-metric.cc
+++ b/lily/font-metric.cc
@@ -13,6 +13,7 @@
 
 #include "ly-smobs.icc"
 #include "font-metric.hh"
+#include "string.hh"
 
 Box
 Font_metric::text_dimension (String text) const
diff --git a/lily/hyphen-engraver.cc b/lily/hyphen-engraver.cc
index cb276bcf4e..9625b16f02 100644
--- a/lily/hyphen-engraver.cc
+++ b/lily/hyphen-engraver.cc
@@ -4,7 +4,7 @@
   (c) 1999 Glen Prideaux <glenprideaux@iname.com>
 */
 
-#include "proto.hh"
+#include "flower-proto.hh"
 #include "musical-request.hh"
 #include "hyphen-spanner.hh"
 #include "paper-column.hh"
diff --git a/lily/idealspacing.cc b/lily/idealspacing.cc
deleted file mode 100644
index 90cfa1dbae..0000000000
--- a/lily/idealspacing.cc
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
-  idealspacing.cc -- implement Idealspacing
-
-  source file of the GNU LilyPond music typesetter
-
-  (c) 1996--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-*/
-
-#include "idealspacing.hh"
-#include "paper-column.hh"
-#include "paper-score.hh"
-#include "debug.hh"
-
-
-Idealspacing::Idealspacing()
-{
-  space_f_ = 0.0;
-  hooke_f_ = 0.0;
-  cols_drul_[LEFT] = cols_drul_[RIGHT] = -1;
-}
diff --git a/lily/identifier.cc b/lily/identifier.cc
index c35350b07d..c82598ed5e 100644
--- a/lily/identifier.cc
+++ b/lily/identifier.cc
@@ -6,6 +6,7 @@
   (c)  1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 */
 
+
 /*
   JUNKTHIS!
  */
@@ -19,6 +20,7 @@
 #include "translator-group.hh"
 #include "ly-smobs.icc"
 
+
 IMPLEMENT_UNSMOB(Identifier, identifier);
 IMPLEMENT_SMOBS(Identifier);
 
diff --git a/lily/include/all-font-metrics.hh b/lily/include/all-font-metrics.hh
index 02d59dae09..b01ad19119 100644
--- a/lily/include/all-font-metrics.hh
+++ b/lily/include/all-font-metrics.hh
@@ -10,7 +10,7 @@
 #ifndef ALL_FONTS_HH
 #define ALL_FONTS_HH
 
-#include "dictionary.hh"
+
 #include "file-path.hh"
 #include "lily-proto.hh"
 #include "font-metric.hh"
diff --git a/lily/include/audio-column.hh b/lily/include/audio-column.hh
index 5b6f8d4d8a..fb7e150d67 100644
--- a/lily/include/audio-column.hh
+++ b/lily/include/audio-column.hh
@@ -7,7 +7,7 @@
 #ifndef AUDIO_COLUMN_HH
 #define AUDIO_COLUMN_HH
 
-#include "proto.hh"
+#include "flower-proto.hh"
 #include "lily-proto.hh"
 #include "moment.hh"
 #include "parray.hh"
diff --git a/lily/include/audio-staff.hh b/lily/include/audio-staff.hh
index 89d701b81f..0413ad0508 100644
--- a/lily/include/audio-staff.hh
+++ b/lily/include/audio-staff.hh
@@ -7,7 +7,6 @@
 #ifndef AUDIO_STAFF_HH
 #define AUDIO_STAFF_HH
 
-#include "proto.hh"
 #include "parray.hh"
 #include "lily-proto.hh"
 #include "audio-element.hh"
diff --git a/lily/include/beam.hh b/lily/include/beam.hh
index b83254e1c5..5a434fd9ed 100644
--- a/lily/include/beam.hh
+++ b/lily/include/beam.hh
@@ -36,7 +36,6 @@ public:
   static Real rest_collision_callback (Score_element *,Axis);
   Beam (SCM);
   static void add_stem (Score_element*,Score_element*);
-  static void set_grouping (Score_element*,Rhythmic_grouping def, Rhythmic_grouping current);
   static void set_beaming (Score_element*,Beaming_info_list *);
   static void set_stemlens (Score_element*);
   static int get_multiplicity (Score_element*me);
diff --git a/lily/include/dimensions.hh b/lily/include/dimensions.hh
index 896af5dc42..8fe9487fcd 100644
--- a/lily/include/dimensions.hh
+++ b/lily/include/dimensions.hh
@@ -2,7 +2,7 @@
 #define DIMENSIONS_HH
 
 #include "real.hh"
-#include "string.hh"
+class String;
 
 const Real INCH_TO_PT=72.270;
 const Real CM_TO_PT=INCH_TO_PT/2.54;
diff --git a/lily/include/header.hh b/lily/include/header.hh
deleted file mode 100644
index c027fc3958..0000000000
--- a/lily/include/header.hh
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
-  header.hh -- declare Header
-
-  source file of the GNU LilyPond music typesetter
-
-  (c)  1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-*/
-
-
-#ifndef HEADER_HH
-#define HEADER_HH
-
-#include "string.hh"
-#include "dictionary.hh"
-#include "scope.hh"
-
-
-
-#endif // HEADER_HH
diff --git a/lily/include/idealspacing.hh b/lily/include/idealspacing.hh
deleted file mode 100644
index 3e9585d145..0000000000
--- a/lily/include/idealspacing.hh
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
-  idealspacing.hh -- part of GNU LilyPond
-
-  (c) 1996--2000 Han-Wen Nienhuys
-*/
-
-#ifndef IDEALSPACING_HH
-#define IDEALSPACING_HH
-#include "lily-proto.hh"
-#include "drul-array.hh"
-
-/// ideal spacing between two columns
-struct Idealspacing {
-
-  /// the ideal distance
-  Real space_f_;
-
-  /// Hooke's constant: how strong are the "springs" attached to columns
-  Real hooke_f_;
-
-  /// the two columns
-  Drul_array<int> cols_drul_;
-    
-  Idealspacing();
-};
-
-
-#endif // IDEALSPACING_HH
-
diff --git a/lily/include/identifier.hh b/lily/include/identifier.hh
index adceafb6c9..cb9b8b6fdf 100644
--- a/lily/include/identifier.hh
+++ b/lily/include/identifier.hh
@@ -77,7 +77,6 @@ struct Class ## _identifier : Identifier {\
 
 DECLARE_ID_CLASS(Translator_group);
 DECLARE_ID_CLASS(Duration);
-DECLARE_ID_CLASS(General_script_def);
 DECLARE_ID_CLASS(Music);
 DECLARE_ID_CLASS(Score);
 DECLARE_ID_CLASS(Request);
diff --git a/lily/include/includable-lexer.hh b/lily/include/includable-lexer.hh
index 6b54d9a573..1be193910a 100644
--- a/lily/include/includable-lexer.hh
+++ b/lily/include/includable-lexer.hh
@@ -14,8 +14,7 @@
 
 #include "string.hh"
 #include "parray.hh"
-#include "flower-proto.hh"
-#include "proto.hh"
+#include "lily-proto.hh"
 
 // GIGA urg!
 typedef struct yy_buffer_state *YY_BUFFER_STATE;
diff --git a/lily/include/item.hh b/lily/include/item.hh
index 16f298f7f2..3a84af0def 100644
--- a/lily/include/item.hh
+++ b/lily/include/item.hh
@@ -10,7 +10,6 @@
 
 
 #include "box.hh"
-#include "string.hh"
 #include "score-element.hh"
 #include "drul-array.hh"
 #include "protected-scm.hh"
diff --git a/lily/include/keyword.hh b/lily/include/keyword.hh
index 2db22765e0..6edecf9c52 100644
--- a/lily/include/keyword.hh
+++ b/lily/include/keyword.hh
@@ -14,6 +14,9 @@ struct Keyword_ent
   int     tokcode;
 };
 
+/*
+  junkme, use  hash table.
+ */
 struct Keyword_table
 {
   Keyword_ent *table;
diff --git a/lily/include/lily-guile.hh b/lily/include/lily-guile.hh
index 89ff1a2c29..3dc1f64f16 100644
--- a/lily/include/lily-guile.hh
+++ b/lily/include/lily-guile.hh
@@ -9,11 +9,10 @@
 #ifndef LILY_GUILE_HH
 #define LILY_GUILE_HH
 
-#include  "string.hh"
-
 #include <guile/gh.h>
 #include <libguile.h>
 #include "direction.hh"
+#include "flower-proto.hh"
 
 #ifndef SCM_PACK
 #define SCM_PACK(x) ((SCM) x)
diff --git a/lily/include/lily-proto.hh b/lily/include/lily-proto.hh
index e2c3393a5b..b63843e6d1 100644
--- a/lily/include/lily-proto.hh
+++ b/lily/include/lily-proto.hh
@@ -1,274 +1,192 @@
 /*
-  lily-proto.hh -- declare class names.
+ lily-proto.hh -- declare class names.
 
-  source file of the GNU LilyPond music typesetter
+ source file of the GNU LilyPond music typesetter
 
-  (c)  1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+ (c) 1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 */
 
 #ifndef LILY_PROTO_HH
 #define LILY_PROTO_HH
-#include "proto.hh"
+#include "flower-proto.hh"
 
 
 
-struct Absolute_dynamic_req;
-struct Adobe_font_char_metric;
-struct Adobe_font_metric;
-struct Align_element;
-struct All_font_metrics;
-struct Articulation_req;
-struct Audio_column;
-struct Audio_dynamic;
-struct Audio_element;
-struct Audio_element_info;
-struct Audio_instrument;
-struct Audio_item;
-struct Audio_key;
-struct Audio_note;
-struct Audio_note_off;
-struct Audio_staff;
-struct Audio_tempo;
-struct Audio_text;
-struct Audio_tie;
-struct Audio_time_signature;
-struct Auto_beam_engraver;
-struct Axis_align_item;
-struct Bar;
-struct Bar_column;
-struct Bar_column_engraver;
-struct Bar_engraver;
-struct Bar_req;
-struct Barcheck_req;
-struct Bass_req;
-struct Beam;
-struct Beam_engraver;
-struct Beaming_info;
-struct Beaming_info_list;
-struct Bezier;
-struct Bezier_bow;
-struct Blank_req;
-struct Bow;
-struct Box;
-struct Bracket_req;
-struct Break_align_item;
-struct Break_req;
-struct CHyphen_req;
-struct Cadenza_req;
-struct Change_iterator;
-struct Change_translator;
-struct Chord;
-struct Chord_name;
-struct Chord_name_engraver;
-struct Chord_tremolo_engraver;
-struct Clef_change_req;
-struct Clef_engraver;
-struct Clef_item;
-struct Clef_performer;
-struct Collision;
-struct Collision_engraver;
-struct Column_info;
-struct Column_spring;
-struct Column_x_positions;
-struct Command_req;
-struct Command_script_req;
-struct Command_tie_engraver;
-struct Crescendo ;
-struct Dimension_cache;
-struct Dynamic_performer;
-struct Spanner;
-struct Dot_column;
-struct Dots;
-struct Durational_req;
-struct Dynamic;
-struct Dynamic_req;
-struct Element_group;
-struct Element_group_item;
-struct Engraver;
-struct Engraver_group_engraver;
-struct Extender;
-struct Extender_req;
-struct Folded_repeat_iterator;
-struct Font_metric;
-struct General_script_def;
-struct Global_translator;
-struct Grace_align_item;
-struct Hara_kiri_group_spanner;
-struct Hara_kiri_line_group_engraver;
-struct Head_column;
-struct Idealspacing;
-struct Identifier;
-struct Input_file;
-struct Inversion_req;
-struct Item;
-struct Key;
-struct Key_change_req;
-struct Key_engraver;
-struct Key_item;
-struct Key_performer;
-struct Keyword;
-struct Keyword_table;
-struct Left_edge_item;
-struct Lily_stream;
-struct Line_group_engraver;
-struct Line_of_score;
-struct Line_of_staff;
-struct Linestaff;
-struct Local_key;
-struct Local_key_engraver;
-struct Local_key_item;
-struct Lookup;
-struct Lyric_item;
-struct Lyric_req;
-struct Mark_req;
-struct Measure_grouping_req;
-struct Melodic_req;
-struct Midi_def;
-struct Midi_duration;
-struct Midi_dynamic;
-struct Midi_header;
-struct Midi_item;
-struct Midi_key;
-struct Midi_note;
-struct Midi_note_event;
-struct Midi_note_off;
-struct Midi_output;
-struct Midi_score;
-struct Midi_stream;
-struct Midi_tempo;
-struct Midi_time_signature;
-struct Midi_track;
-struct Midi_walker;
-struct Mixed_qp;
-struct Molecule;
-struct Multi_measure_rest;
-struct Multi_measure_rest_engraver;
-struct Multi_measure_rest_req;
-struct Music;
-struct Music_iterator;
-struct Music_list;
-struct Music_list_iterator;
-struct Music_output;
-struct Music_output_def;
-struct Music_sequence;
-struct Music_wrapper;
-struct Music_wrapper_iterator;
-struct Musical_pitch;
-struct Musical_req;
-struct Musical_script_req;
-struct Musical_span_req;
-struct My_lily_lexer;
-struct My_lily_parser;
-struct Note_column;
-struct Note_column_engraver;
-struct Note_head;
-struct Note_head_engraver;
-struct Note_performer;
-struct Note_req;
-struct Notename_table;
-struct Offset;
-struct Paper_column;
-struct Polynomial;
-struct Paper_def;
-struct Paper_outputter;
-struct Paper_score;
-struct Paper_stream;
-struct Partial_measure_req;
-struct Performance;
-struct Performer;
-struct Performer;
-struct Performer_group_performer;
-struct Piano_brace;
-struct Property_iterator;
-struct Rational;
-struct Re_rhythmed_music;
-struct Relative_octave_music;
-struct Repeat_engraver;
-struct Repeated_music;
-struct Repeated_music;
-struct Repeated_music_iterator;
-struct Request;
-struct Request_chord;
-struct Request_column;
-struct Rest;
-struct Rest_collision;
-struct Rest_collision_engraver;
-struct Rest_req;
-struct Rhythmic_grouping;
-struct Rhythmic_grouping_req;
-struct Rhythmic_head;
-struct Rhythmic_req;
-struct Scope;
-struct Score;
-struct Score_column;
-struct Score_element;
-struct Score_element_info;
-struct Score_performer;
-struct Script;
-struct Script_req;
-struct Separating_group_spanner;
-struct Sequential_music;
-struct Simple_music;
-struct Simple_spacer;
-struct Simultaneous_music;
-struct Single_malt_grouping_item;
-struct Skip_req;
-struct Slur;
-struct Slur_bezier_bow;
-struct Slur_engraver;
-struct Spacing_spanner;
-struct Span_bar;
-struct Span_req;
-struct Span_score_bar;
-struct Spanner;
-struct Spring;
-struct Spring_spacer;
-struct Staff_bracket;
-struct Staff_performer;
-struct Staff_side;
-struct Staff_side_item;
-struct Staff_symbol;
-struct Stem;
-struct Stem_beam_engraver;
-struct Stem_req;
-struct Stem_tremolo;
-struct String;
-struct Super_element;
-struct Symtable;
-struct Symtables;
-struct Tempo_req;
-struct Tex_font_char_metric;
-struct Tex_font_metric;
-struct Tex_font_metric_reader;
-struct Text_def;
-struct Text_engraver;
-struct Text_gob;
-struct Item ;
-struct Text_req;
-struct Text_spanner;
-struct Tie;
-struct Tie_engraver;
-struct Tie_req;
-struct Time_description;
-struct Time_scaled_music;
-struct Time_scaled_music_iterator;
-struct Time_signature;
-struct Time_signature_change_req;
-struct Time_signature_engraver;
-struct Time_signature_performer;
-struct Timing_engraver;
-struct Timing_req;
-struct Timing_translator;
-struct Tonic_req;
-struct Translation_property;
-struct Translator;
-struct Translator_group;
-struct Tremolo_req;
-struct Tuplet_spanner;
-struct Unfolded_repeat_iterator;
-struct Vertical_brace;
-struct Volta_spanner;
-struct Moment;
 
-
-#endif // LILY_PROTO_HH
+class Adobe_font_metric;
+class All_font_metrics;
+class Articulation_req;
+class Audio_column;
+class Audio_dynamic;
+class Audio_element;
+class Audio_instrument;
+class Audio_item;
+class Audio_key;
+class Audio_note;
+class Audio_piano_pedal;
+class Audio_staff;
+class Audio_tempo;
+class Audio_text;
+class Audio_tie;
+class Audio_time_signature;
+class Auto_change_iterator;
+class Auto_change_music;
+class Axis_group_engraver;
+class Bar_engraver;
+class Bar_req;
+class Bar_req_collect_engraver;
+class Barcheck_req;
+class Base_span_bar_engraver;
+class Bass_req;
+class Beaming_info_list;
+class Bezier;
+class Bezier_bow;
+class Break_algorithm;
+class Break_req;
+class Breathing_sign_req;
+class Busy_playing_req;
+class Change_iterator;
+class Change_translator;
+class Chord_tremolo_iterator;
+class Clef_change_req;
+class Column_x_positions;
+class Context_specced_music;
+class Engraver;
+class Engraver;
+class Engraver_group_engraver;
+class Extender_req;
+class Folded_repeat_iterator;
+class Font_metric;
+class Font_size_engraver;
+class Global_translator;
+class Gourlay_breaking;
+class Grace_engraver_group;
+class Grace_iterator;
+class Grace_music;
+class Grace_performer_group;
+class Hara_kiri_engraver;
+class Hara_kiri_line_group_engraver;
+class Hyphen_req;
+class Identifier;
+class Includable_lexer;
+class Input;
+class Inversion_req;
+class Item;
+class Key_change_req;
+class Key_performer;
+class Keyword_ent;
+class Keyword_table;
+class Line_group_engraver_group;
+class Line_of_score;
+class Local_key_item;
+class Lookup;
+class Lyric_combine_music;
+class Lyric_combine_music_iterator;
+class Lyric_engraver;
+class Lyric_performer;
+class Lyric_req;
+class Mark_req;
+class Melisma_playing_req;
+class Melisma_req;
+class Melodic_req;
+class Midi_chunk;
+class Midi_def;
+class Midi_duration;
+class Midi_dynamic;
+class Midi_header;
+class Midi_instrument;
+class Midi_item;
+class Midi_key;
+class Midi_note;
+class Midi_note_event;
+class Midi_note_off;
+class Midi_piano_pedal;
+class Midi_stream;
+class Midi_tempo;
+class Midi_text;
+class Midi_time_signature;
+class Midi_track;
+class Molecule;
+class Moment;
+class Music;
+class Music_iterator;
+class Music_list;
+class Music_output;
+class Music_output_def;
+class Music_sequence;
+class Music_wrapper;
+class Music_wrapper_iterator;
+class Musical_pitch;
+class Musical_req;
+class My_lily_lexer;
+class Note_performer;
+class Note_req;
+class Output_property;
+class Paper_column;
+class Paper_def;
+class Paper_outputter;
+class Paper_score;
+class Paper_stream;
+class Performance;
+class Performer;
+class Performer_group_performer;
+class Piano_bar_engraver;
+class Pitch_interrogate_req;
+class Pitch_squash_engraver;
+class Property_iterator;
+class Rational;
+class Relative_octave_music;
+class Repeated_music;
+class Request;
+class Request_chord;
+class Request_chord_iterator;
+class Rest_req;
+class Rhythmic_req;
+class Scaled_font_metric;
+class Scheme_hash_table;
+class Scope;
+class Score;
+class Score_element;
+class Score_engraver;
+class Score_performer;
+class Script_req;
+class Sequential_music;
+class Sequential_music_iterator;
+class Simple_music_iterator;
+class Simple_spacer;
+class Simultaneous_music;
+class Simultaneous_music_iterator;
+class Skip_req;
+class Slur_bezier_bow;
+class Span_req;
+class Span_score_bar_engraver;
+class Spanner;
+class Staff_group_bar_engraver;
+class Staff_performer;
+class Swallow_engraver;
+class Swallow_performer;
+class Tempo_performer;
+class Tempo_req;
+class Tex_font_metric;
+class Text_script_req;
+class Tie;
+class Tie_performer;
+class Tie_req;
+class Time_scaled_music;
+class Time_scaled_music_iterator;
+class Time_signature_change_req;
+class Time_signature_performer;
+class Timing_engraver;
+class Timing_req;
+class Timing_translator;
+class Tonic_req;
+class Translation_property;
+class Translator;
+class Translator_change;
+class Translator_group;
+class Transposed_music;
+class Tremolo_req;
+class Type_swallow_translator;
+class Unfolded_repeat_iterator;
+class yyFlexLexer;
+#endif // LILY_PROTO_HH;
diff --git a/lily/include/lookup.hh b/lily/include/lookup.hh
index 4563501ecc..d0f5e33f2c 100644
--- a/lily/include/lookup.hh
+++ b/lily/include/lookup.hh
@@ -10,7 +10,9 @@
 #ifndef LOOKUP_HH
 #define LOOKUP_HH
 
+#include "smobs.hh"
 #include "lily-guile.hh"
+#include "string.hh"
 #include "molecule.hh"
 #include "flower-proto.hh"
 #include "direction.hh"
@@ -22,14 +24,19 @@
  */
 class Lookup
 {
-public:
-  String font_name_;
-  Adobe_font_metric * afm_l_;
 
 
   Lookup ();
   Lookup (Lookup const&);
 
+  friend class Brutus;		// kai su, teknon. (make GCC shut up.)
+  
+public:
+  DECLARE_SMOBS;
+  static SCM make_lookup ();
+  String font_name_;
+  Adobe_font_metric * afm_l_;
+
   Molecule afm_find (String, bool warn=true) const;
   Molecule accordion (SCM arg, Real interline_f) const;
 
@@ -41,5 +48,5 @@ public:
   static Molecule filledbox (Box b) ;  
   static Molecule text (String style, String text, Paper_def*) ;
 };
-
+Lookup* unsmob_lookup (SCM);
 #endif // LOOKUP_HH
diff --git a/lily/include/midi-def.hh b/lily/include/midi-def.hh
index 6d65f6baea..adf7a3e792 100644
--- a/lily/include/midi-def.hh
+++ b/lily/include/midi-def.hh
@@ -25,15 +25,10 @@ class Midi_def : public Music_output_def {
 public:
   VIRTUAL_COPY_CONS(Music_output_def);
 
-  /// duration of whole note measured in seconds.
-  Moment whole_in_seconds_mom_;
-
   Midi_def();
   ~Midi_def();
 
-  Real length_mom_to_seconds_f (Moment);
   int get_tempo_i (Moment moment);
-  void print() const;
   void set_tempo (Moment moment, int count_per_minute_i);
   virtual int get_next_default_count () const;
   static void reset_default_count();
diff --git a/lily/include/midi-item.hh b/lily/include/midi-item.hh
index 2dac25e853..2fc7721c21 100644
--- a/lily/include/midi-item.hh
+++ b/lily/include/midi-item.hh
@@ -10,7 +10,6 @@
 #include "cons.hh"
 #include "string.hh"
 #include "lily-proto.hh"
-#include "proto.hh"
 #include "moment.hh"
 #include "audio-item.hh"
 
diff --git a/lily/include/midi-walker.hh b/lily/include/midi-walker.hh
index 522660ee45..9b4c88ca90 100644
--- a/lily/include/midi-walker.hh
+++ b/lily/include/midi-walker.hh
@@ -8,7 +8,6 @@
 #ifndef MIDI_WALKER_HH
 #define MIDI_WALKER_HH
 
-#include "proto.hh"
 #include "pqueue.hh"
 #include "lily-proto.hh"
 #include "moment.hh"
diff --git a/lily/include/music-list.hh b/lily/include/music-list.hh
index 98b2ce82ed..386cf49fae 100644
--- a/lily/include/music-list.hh
+++ b/lily/include/music-list.hh
@@ -37,6 +37,7 @@ public:
   Music_sequence (Music_list *l_p);
   
   VIRTUAL_COPY_CONS(Music);
+
   Musical_pitch do_relative_octave (Musical_pitch p, bool b);
   virtual void transpose (Musical_pitch );
   virtual void compress (Moment);
diff --git a/lily/include/music-output-def.hh b/lily/include/music-output-def.hh
index 4b4c0f3d1c..eb20e22d11 100644
--- a/lily/include/music-output-def.hh
+++ b/lily/include/music-output-def.hh
@@ -13,8 +13,6 @@
 #include "string.hh"
 #include "lily-proto.hh"
 #include "virtual-methods.hh"
-#include "dictionary.hh"
-#include "scm-hash.hh"
 
 /**
   Definition of how to output mudela. 
@@ -24,15 +22,12 @@ class Music_output_def
   Scope *translator_p_dict_p_;
 public:
   Scope *scope_p_;
-  
-  Array<String> filename_str_arr_;
-  
+
+  VIRTUAL_COPY_CONS(Music_output_def);
   Music_output_def (Music_output_def const&);
   Music_output_def ();
   virtual ~Music_output_def ();
-
-  VIRTUAL_COPY_CONS(Music_output_def);
-  
+  virtual int get_next_default_count () const;
   virtual void print () const;
 
   Global_translator *get_global_translator_p ();
@@ -40,7 +35,6 @@ public:
   String get_default_output () const;
   void assign_translator (Translator_group*);
   Translator * find_translator_l (String) const;
-  virtual int get_next_default_count () const;
 };
 
 #endif // Music_output_DEF_HH
diff --git a/lily/include/my-lily-lexer.hh b/lily/include/my-lily-lexer.hh
index b3113bf94b..f731d0d545 100644
--- a/lily/include/my-lily-lexer.hh
+++ b/lily/include/my-lily-lexer.hh
@@ -51,8 +51,6 @@ public:
   Input here_input () const;
 
   void start_main_input ();
-  void set_chordmodifier_table (Notename_table*tab_p);
-  void set_notename_table (Notename_table*tab_p);
 
   SCM lookup_identifier (String s);
   void push_note_state();
diff --git a/lily/include/paper-def.hh b/lily/include/paper-def.hh
index a91f537879..8d4c326c75 100644
--- a/lily/include/paper-def.hh
+++ b/lily/include/paper-def.hh
@@ -19,6 +19,7 @@
 #include "array.hh"
 #include "interval.hh"
 #include "music-output-def.hh"
+#include "protected-scm.hh"
 
 /** 
 
@@ -46,45 +47,34 @@
 */
 class Paper_def : public Music_output_def 
 {
-  map<int, Lookup *> *lookup_p_tab_p_;
-  static int default_count_i_;
-
+  Protected_scm lookup_alist_;
 protected:
   VIRTUAL_COPY_CONS(Music_output_def);
 
 public:    
   virtual ~Paper_def ();
-
+  static int default_count_i_;
   /*
     JUNKME
    */
   Real get_realvar (SCM symbol) const;
   Real get_var (String id) const;
-
   SCM get_scmvar (String id)const; 
   void reinit ();
   Paper_def ();
   void set_lookup (int, Lookup*);
-
   Paper_def (Paper_def const&);
 
   /** The distance between beams of multiplicity_i
       JUNKME
   */
   Real interbeam_f (int multiplicity_i) const;
-
   Interval line_dimensions_int (int) const;
-
   void print () const;
-
   Lookup const * lookup_l (int sz) const;	// TODO naming
-
-
   virtual int get_next_default_count () const;
   static void reset_default_count();
-
   void output_settings (Paper_outputter*) const;
-
   Paper_stream* paper_stream_p () const;
   String base_output_str () const;
 
diff --git a/lily/include/score.hh b/lily/include/score.hh
index a496159b10..7be4e5c20b 100644
--- a/lily/include/score.hh
+++ b/lily/include/score.hh
@@ -10,9 +10,6 @@
 #ifndef SCORE_HH
 #define SCORE_HH
 
-#include "array.hh"
-#include "lily-proto.hh"
-#include "string.hh"
 #include "input.hh"
 #include "lily-proto.hh"
 #include "parray.hh"
diff --git a/lily/include/tfm.hh b/lily/include/tfm.hh
index bf482a6780..0481ad1b7e 100644
--- a/lily/include/tfm.hh
+++ b/lily/include/tfm.hh
@@ -10,6 +10,10 @@
 
  */
 
+/*
+  TODO: aren't there standard libs?  Ideally it is better to just link
+  to a C-library.  */
+
 #ifndef TFM_HH
 #define TFM_HH
 
diff --git a/lily/include/translator-group.hh b/lily/include/translator-group.hh
index 47c2ef1135..8ceac15def 100644
--- a/lily/include/translator-group.hh
+++ b/lily/include/translator-group.hh
@@ -16,13 +16,12 @@
 #include "translator.hh"
 #include "cons.hh"
 #include "parray.hh"
-#include "scm-hash.hh"
 
 
 // egcs
 typedef void (Translator::*Method_pointer)(void);
 typedef void (Translator::*Const_method_pointer)(void) const; 
-
+class Scheme_hash_table;
 /** Make some kind of Elements from Requests. Elements are made by
   hierarchically grouped Translators
   */
@@ -30,7 +29,7 @@ class Translator_group : public virtual Translator {
   Array<String> consists_str_arr_;
   Array<String> accepts_str_arr_;
   Array<String> consists_end_str_arr_;
-  Scheme_hash_table properties_dict_;
+  Scheme_hash_table *properties_dict_;
 
   int iterator_count_;
   friend class Interpretation_context_handle;
diff --git a/lily/include/translator.hh b/lily/include/translator.hh
index 6352c005dc..a40fd07275 100644
--- a/lily/include/translator.hh
+++ b/lily/include/translator.hh
@@ -10,13 +10,11 @@
 #ifndef TRANSLATOR_HH
 #define TRANSLATOR_HH
 
-#include <typeinfo>
 #include "global-ctor.hh"
 #include "string.hh"
 #include "lily-proto.hh"
 #include "virtual-methods.hh"
 #include "lily-guile.hh"
-#include "dictionary.hh"
 #include "parray.hh"
 #include "input.hh"
 
diff --git a/lily/lookup.cc b/lily/lookup.cc
index a139f21ca5..2b90ce5a79 100644
--- a/lily/lookup.cc
+++ b/lily/lookup.cc
@@ -14,7 +14,7 @@
 #include <ctype.h>
 
 #include "lookup.hh"
-#include "debug.hh"
+#include "warn.hh"
 #include "dimensions.hh"
 #include "bezier.hh"
 #include "paper-def.hh"
@@ -27,21 +27,61 @@
 #include "scope.hh"
 #include "molecule.hh"
 
-#include "lily-guile.hh"
+
+#include "ly-smobs.icc"
 
 
 Lookup::Lookup ()
 {
   afm_l_ = 0;  
+  self_scm_ = SCM_EOL;
+  smobify_self ();  
 }
 
 Lookup::Lookup (Lookup const& s)
 {
   font_name_ = s.font_name_;
-  afm_l_ = 0;  
+  self_scm_ = SCM_EOL;
+  afm_l_ = 0;
+  smobify_self ();
+}
+
+SCM
+Lookup::mark_smob (SCM s)
+{
+  return s;  
+}
+
+int
+Lookup::print_smob (SCM s, SCM p, scm_print_state*)
+{
+  scm_puts ("#<Lookup >#", p);
+  return 1;
 }
 
+SCM
+Lookup::equal_p (SCM a , SCM b)
+{
+  return a == b ? SCM_BOOL_T : SCM_BOOL_F;
+}
 
+void
+Lookup::do_smobify_self ()
+{
+  
+}
+
+IMPLEMENT_UNSMOB(Lookup, lookup);
+IMPLEMENT_SMOBS(Lookup);
+
+SCM
+Lookup::make_lookup ()
+{
+  Lookup * l = new Lookup;
+  SCM ls = l->self_scm_;
+  scm_unprotect_object (ls);
+  return ls;
+}
 
 
 Molecule
diff --git a/lily/main.cc b/lily/main.cc
index d575245570..f1362afc9b 100644
--- a/lily/main.cc
+++ b/lily/main.cc
@@ -15,7 +15,6 @@
 #include "lily-version.hh"
 
 #include "all-font-metrics.hh"
-#include "proto.hh"
 #include "getopt-long.hh"
 #include "misc.hh"
 #include "string.hh"
@@ -33,6 +32,9 @@
 #include <libintl.h>
 #endif
 
+extern "C" {
+#include <kpathsea/kpathsea.h>
+}
 
 bool verbose_global_b = false;
 bool no_paper_global_b = false;
@@ -309,6 +311,12 @@ main (int argc, char **argv)
   setenv ("GUILE_INIT_SEGMENT_SIZE_1", "4194304", 0);
   setenv ("GUILE_MAX_SEGMENT_SIZE", "8388608", 0);
 
+  /*
+   initialize kpathsea
+   */
+  kpse_set_program_name(argv[0], NULL);
+  kpse_maketex_option("tfm", TRUE);
+
   oparser_global_p = new Getopt_long(argc, argv,theopts);
   while (Long_option_init const * opt = (*oparser_global_p)())
     {
diff --git a/lily/midi-def.cc b/lily/midi-def.cc
index 1915e82071..1013399eac 100644
--- a/lily/midi-def.cc
+++ b/lily/midi-def.cc
@@ -9,10 +9,9 @@
 #include <math.h>
 #include "misc.hh"
 #include "midi-def.hh"
-#include "translator.hh"
 #include "performance.hh"
-#include "score-performer.hh"
 #include "debug.hh"
+#include "scope.hh"
 
 Midi_def::Midi_def()
 {
@@ -24,20 +23,13 @@ Midi_def::~Midi_def()
 {
 }
 
-Real
-Midi_def::length_mom_to_seconds_f (Moment mom)
-{
-  if (!mom)
-    return 0;
-  
-  return Moment (whole_in_seconds_mom_) * mom;
-}
 
 
 int
 Midi_def::get_tempo_i (Moment one_beat_mom)
 {
-  Moment wholes_per_min = Moment(60) /Moment(whole_in_seconds_mom_);
+  Moment w = *unsmob_moment (scope_p_->scm_elem ("whole-in-seconds"));
+  Moment wholes_per_min = Moment(60) /w;
   int beats_per_min = wholes_per_min / one_beat_mom;
   return int (beats_per_min);
 }
@@ -46,20 +38,12 @@ void
 Midi_def::set_tempo (Moment one_beat_mom, int beats_per_minute_i)
 {
   Moment beats_per_second = Moment (beats_per_minute_i) / Moment (60);
-  whole_in_seconds_mom_ = Moment(1)/Moment(beats_per_second * one_beat_mom);
-}
 
-void
-Midi_def::print() const
-{
-#ifndef NPRINT
-  DEBUG_OUT << "MIDI {\n";
-  Music_output_def::print ();
-  DEBUG_OUT << "4/min: " << Moment (60) / (whole_in_seconds_mom_ * Moment (4));
-  DEBUG_OUT << "}\n";  
-#endif
+  Moment *m = new Moment (Moment(1)/Moment(beats_per_second * one_beat_mom));
+  scope_p_->set ("whole-in-seconds", smobify (m));
 }
 
+
 int Midi_def::default_count_i_=0;
 
 int
diff --git a/lily/midi-item.cc b/lily/midi-item.cc
index e91572455d..9806910b55 100644
--- a/lily/midi-item.cc
+++ b/lily/midi-item.cc
@@ -6,7 +6,6 @@
   (c)  1997--2000 Jan Nieuwenhuizen <janneke@gnu.org>
  */
 
-#include "proto.hh"
 #include "debug.hh"
 #include "misc.hh"
 #include "string.hh"
diff --git a/lily/multi-measure-rest-engraver.cc b/lily/multi-measure-rest-engraver.cc
index 6a5d06ed7d..214ea14fc2 100644
--- a/lily/multi-measure-rest-engraver.cc
+++ b/lily/multi-measure-rest-engraver.cc
@@ -5,7 +5,6 @@
        Han-Wen Nienhuys <hanwen@cs.uu.nl>
 */
 
-#include "proto.hh"
 #include "musical-request.hh"
 #include "multi-measure-rest.hh"
 #include "paper-column.hh"
diff --git a/lily/music-list.cc b/lily/music-list.cc
index abe444cf6f..5824cc7ada 100644
--- a/lily/music-list.cc
+++ b/lily/music-list.cc
@@ -53,11 +53,6 @@ Simultaneous_music::to_relative_octave (Musical_pitch p)
 }
 
 
-Musical_pitch
-Music_sequence::do_relative_octave (Musical_pitch p, bool b)
-{
-  return music_p_list_p_->do_relative_octave (p, b);  
-}
 
 
 Musical_pitch 
diff --git a/lily/music-output-def.cc b/lily/music-output-def.cc
index 6b4ee8b519..07895d86e2 100644
--- a/lily/music-output-def.cc
+++ b/lily/music-output-def.cc
@@ -6,6 +6,7 @@
   (c)  1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 */
 
+#include "dictionary.hh"
 #include "scope.hh"
 #include "debug.hh"
 #include "music-output-def.hh"
@@ -100,3 +101,4 @@ Music_output_def::get_default_output () const
   return gh_string_p (s) ? ly_scm2string (s) : String ("");
 }
 
+
diff --git a/lily/music-sequence.cc b/lily/music-sequence.cc
index 2b77780d39..9d5801d2f2 100644
--- a/lily/music-sequence.cc
+++ b/lily/music-sequence.cc
@@ -78,3 +78,9 @@ Music_sequence::length_i () const
 {
   return cons_list_size_i (music_p_list_p_->head_);
 }
+
+Musical_pitch
+Music_sequence::do_relative_octave (Musical_pitch p, bool b)
+{
+  return music_p_list_p_->do_relative_octave (p, b);  
+}
diff --git a/lily/music.cc b/lily/music.cc
index 7b6cf60732..4b1f842458 100644
--- a/lily/music.cc
+++ b/lily/music.cc
@@ -6,8 +6,6 @@
   (c)  1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 */
 
- #include <typeinfo>
-
 #include "music.hh"
 #include "music-list.hh"
 #include "debug.hh"
diff --git a/lily/my-lily-parser.cc b/lily/my-lily-parser.cc
index 286c938429..dbdbeabd18 100644
--- a/lily/my-lily-parser.cc
+++ b/lily/my-lily-parser.cc
@@ -41,7 +41,7 @@ My_lily_parser::~My_lily_parser()
 }
 
 void
-My_lily_parser::set_version_check (bool ig)
+My_lily_parser::set_version_check (bool )
 {
 }
 
diff --git a/lily/paper-def.cc b/lily/paper-def.cc
index bae8a1b395..9eec211a70 100644
--- a/lily/paper-def.cc
+++ b/lily/paper-def.cc
@@ -20,32 +20,24 @@
 
 Paper_def::Paper_def ()
 {
-  lookup_p_tab_p_ = new map<int, Lookup*>;
+  lookup_alist_ = SCM_EOL;
 }
 
 
 Paper_def::~Paper_def ()
 {
-  for (map<int,Lookup*>::const_iterator ai = lookup_p_tab_p_->begin();
-       ai != lookup_p_tab_p_->end (); ai++)
-    {
-      delete (*ai).second;
-    }
-  
-  delete lookup_p_tab_p_;
 }
 
-Paper_def::Paper_def (Paper_def const&s)
-  : Music_output_def (s)
+Paper_def::Paper_def (Paper_def const&src)
+  : Music_output_def (src)
 {
-  lookup_p_tab_p_ = new map<int, Lookup*>;
-  
-  for (map<int,Lookup*>::const_iterator ai = s.lookup_p_tab_p_->begin();
-       ai != s.lookup_p_tab_p_->end (); ai++)
+  SCM n  = SCM_EOL;
+  for (SCM s = src.lookup_alist_; gh_pair_p(s); s = gh_cdr (s))
     {
-      Lookup * l = new Lookup (* (*ai).second);
-      set_lookup ((*ai).first, l);      
+      n = scm_acons (gh_caar(s), gh_cdar (s), n);
     }
+
+  lookup_alist_  = n;
 }
 
 
@@ -97,12 +89,7 @@ Paper_def::line_dimensions_int (int n) const
 void
 Paper_def::set_lookup (int i, Lookup*l)
 {
-  map<int,Lookup*> :: const_iterator it (lookup_p_tab_p_->find (i));
-  if (it != lookup_p_tab_p_->end ())
-    {
-      delete (*it).second;
-    }
-  (*lookup_p_tab_p_)[i] = l;
+  lookup_alist_ = scm_assq_set_x(lookup_alist_, gh_int2scm (i), l->self_scm_);
 }
 
 
@@ -124,25 +111,18 @@ Paper_def::print () const
 {
 #ifndef NPRINT
   Music_output_def::print ();
-  DEBUG_OUT << "Paper {";
-  for (map<int,Lookup*>::const_iterator ai = lookup_p_tab_p_->begin();
-       ai != lookup_p_tab_p_->end (); ai++)
-    {
-      DEBUG_OUT << "Lookup: " << (*ai).first
-		<< " = " << (*ai).second->font_name_ << '\n';
-    }
-  DEBUG_OUT << "}\n";
+  if (flower_dstream)
+    gh_display (lookup_alist_);
 #endif
 }
 
 Lookup const *
 Paper_def::lookup_l (int i) const
 {
-  return (*lookup_p_tab_p_)[i];
+  SCM l = scm_assq (gh_int2scm(i), lookup_alist_);
+  return l == SCM_BOOL_F ? 0 :  unsmob_lookup (gh_cdr (l));
 }
 
-
-
 int Paper_def::default_count_i_ = 0;
 
 int
@@ -167,7 +147,6 @@ Paper_def::paper_stream_p () const
     outname += String (".") + output_global_ch;
   progress_indication (_f ("paper output to %s...",
 			   outname == "-" ? String ("<stdout>") : outname));
-		       
 
   target_str_global_array.push (outname);
   return new Paper_stream (outname);
diff --git a/lily/parser.yy b/lily/parser.yy
index fb8a04b914..d2449736ed 100644
--- a/lily/parser.yy
+++ b/lily/parser.yy
@@ -422,12 +422,12 @@ translator_spec_body:
 		$$ = tg;
 	}
 	| translator_spec_body STRING '=' embedded_scm			{
-		Translator_group* tg = dynamic_cast<Translator_group*> ($$);
+		Translator_group* tg = $$;
 		tg->set_property (ly_scm2string ($2), $4);
 	}
 	| translator_spec_body STRING '=' identifier_init semicolon	{ 
 		SCM v = gh_int2scm (0);
-		if (gh_string_p ($4) || gh_number_p ($4))
+		if (gh_string_p ($4) || gh_number_p ($4) || gh_boolean_p ($4))
 			v = $4;
 		else 
 			THIS->parser_error (_("Wrong type for property value"));
@@ -551,7 +551,7 @@ music_output_def_body:
 		delete $2;
 	}
 	| music_output_def_body bare_int '=' FONT STRING		{ // ugh, what a syntax
-		Lookup * l = new Lookup;
+		Lookup * l =unsmob_lookup (Lookup::make_lookup());
 		l->font_name_ = ly_scm2string ($5);
 		dynamic_cast<Paper_def*> ($$)->set_lookup ($2, l);
 	}
diff --git a/lily/repeated-music.cc b/lily/repeated-music.cc
index acdccf98f1..82d1c9fe9c 100644
--- a/lily/repeated-music.cc
+++ b/lily/repeated-music.cc
@@ -61,9 +61,14 @@ Repeated_music::to_relative_octave (Musical_pitch p)
   if (repeat_body_p_)
     p = repeat_body_p_->to_relative_octave (p);
 
+  Musical_pitch last = p ; 
   if (alternatives_p_)
-    p = alternatives_p_->do_relative_octave (p, false);
-  return p;
+    for (Cons<Music> *i = alternatives_p_->music_p_list_p_->head_; i ; i = i->next_)
+      {
+	last = i->car_->to_relative_octave (p);
+      }
+
+  return last;
 }
 
 
diff --git a/lily/score-element.cc b/lily/score-element.cc
index 47ca5c9eea..3c4af38059 100644
--- a/lily/score-element.cc
+++ b/lily/score-element.cc
@@ -97,11 +97,11 @@ Score_element::get_elt_property (const char *nm) const
 SCM
 Score_element::get_elt_property (SCM sym) const
 {
-  SCM s = scm_assq(sym, mutable_property_alist_);
+  SCM s = scm_sloppy_assq(sym, mutable_property_alist_);
   if (s != SCM_BOOL_F)
     return gh_cdr (s);
 
-  s = scm_assq (sym, immutable_property_alist_);
+  s = scm_sloppy_assq (sym, immutable_property_alist_);
   return (s == SCM_BOOL_F) ? SCM_UNDEFINED : gh_cdr (s); 
 }
 
diff --git a/lily/script.cc b/lily/script.cc
index c4b3e004de..9cc53480a5 100644
--- a/lily/script.cc
+++ b/lily/script.cc
@@ -65,11 +65,11 @@ Script::brew_molecule (SCM smob)
 bool
 Script::has_interface (Score_element*me)
 {
-  return me->has_interface ("script-interface");
+  return me->has_interface (ly_symbol2scm ("script-interface"));
 }
 
 void
 Script::set_interface (Score_element*me)
 {
-  return me->set_interface ("script-interface");
+  return me->set_interface (ly_symbol2scm ("script-interface"));
 }
diff --git a/lily/simple-spacer.cc b/lily/simple-spacer.cc
index 36971396df..9e23cb8c52 100644
--- a/lily/simple-spacer.cc
+++ b/lily/simple-spacer.cc
@@ -189,6 +189,7 @@ Simple_spacer::add_columns (Link_array<Score_element> cols)
 	}
       else
 	{
+	  programming_error ("No spring between adjacent columns");
 	  desc.hooke_f_ = 1.0;
 	  desc.ideal_f_ = default_space_f_;
 	}
diff --git a/lily/slur-engraver.cc b/lily/slur-engraver.cc
index 8cd767edcd..893c0c4bed 100644
--- a/lily/slur-engraver.cc
+++ b/lily/slur-engraver.cc
@@ -4,7 +4,6 @@
   (c)  1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 */
 
-#include "proto.hh"
 #include "musical-request.hh"
 #include "slur-engraver.hh"
 #include "slur.hh"
diff --git a/lily/slur.cc b/lily/slur.cc
index 9b751ab6e8..f93069848d 100644
--- a/lily/slur.cc
+++ b/lily/slur.cc
@@ -478,7 +478,7 @@ Slur::get_curve (Score_element*me)
 bool
 Slur::has_interface (Score_element*me)
 {
-  return me->has_interface ("slur-interface");
+  return me->has_interface (ly_symbol2scm ("slur-interface"));
 }
 
 
diff --git a/lily/spaceable-element.cc b/lily/spaceable-element.cc
index 7f746ee4d6..6bc4c1893f 100644
--- a/lily/spaceable-element.cc
+++ b/lily/spaceable-element.cc
@@ -17,14 +17,16 @@ Spaceable_element::get_minimum_distances ( Score_element*me)
   return me->get_elt_property ("minimum-distances");
 }
 
+/*todo: merge code of spring & rod?
+ */
 void
 Spaceable_element::add_rod (Score_element *me , Score_element * p, Real d)
 {
   SCM mins = get_minimum_distances (me);
-  SCM newdist= 		       gh_double2scm (d);
-  for (; gh_pair_p (mins); mins = gh_cdr (mins))
+  SCM newdist = gh_double2scm (d);
+  for (SCM s = mins; gh_pair_p (s); s = gh_cdr (s))
     {
-      SCM dist = gh_car (mins);
+      SCM dist = gh_car (s);
       if (gh_car (dist) == p->self_scm_)
 	{
 	  gh_set_cdr_x (dist, scm_max (gh_cdr (dist),
@@ -37,34 +39,32 @@ Spaceable_element::add_rod (Score_element *me , Score_element * p, Real d)
   me->set_elt_property ("minimum-distances", mins);
 }
 
-SCM
-Spaceable_element::get_ideal_distances (Score_element*me)
-{
-  return me->get_elt_property ("ideal-distances");
-}
-
 void
-Spaceable_element::add_spring (Score_element*me, Score_element * p, Real d, Real s)
+Spaceable_element::add_spring (Score_element*me, Score_element * p, Real d, Real strength)
 {
   SCM mins = get_ideal_distances (me);
   SCM newdist= gh_double2scm (d);
-  for (; gh_pair_p (mins); mins = gh_cdr (mins))
+  for (SCM s = mins; gh_pair_p (s); s = gh_cdr (s))
     {
-      SCM dist = gh_car (mins);
+      SCM dist = gh_car (s);
       if (gh_car (dist) == p->self_scm_)
 	{
 	  programming_error("already have that spring");
-	  /*	  gh_set_car_x (gh_cdr (dist), scm_max (gh_cadr (dist),
-		  newdist));*/
 	  return ;
 	}
     }
-  SCM newstrength= gh_double2scm (s);  
+  SCM newstrength= gh_double2scm (strength);  
   
   mins = gh_cons (gh_cons (p->self_scm_, gh_cons (newdist, newstrength)), mins);
   me->set_elt_property ("ideal-distances", mins);
 }
 
+SCM
+Spaceable_element::get_ideal_distances (Score_element*me)
+{
+  return me->get_elt_property ("ideal-distances");
+}
+
 
 void
 Spaceable_element::remove_interface (Score_element*me)
diff --git a/lily/spacing-engraver.cc b/lily/spacing-engraver.cc
index df45ee44f6..4dc344b8c0 100644
--- a/lily/spacing-engraver.cc
+++ b/lily/spacing-engraver.cc
@@ -9,7 +9,7 @@
 
 #include "musical-request.hh"
 #include "paper-column.hh"
-#include "spacing-engraver.hh"
+
 #include "spacing-spanner.hh"
 #include "engraver.hh"
 #include "pqueue.hh"
diff --git a/lily/spacing-spanner.cc b/lily/spacing-spanner.cc
index 9ba7119034..234be7314e 100644
--- a/lily/spacing-spanner.cc
+++ b/lily/spacing-spanner.cc
@@ -288,7 +288,7 @@ Spacing_spanner::stem_dir_correction (Score_element*me, Score_element*l, Score_e
   if (d1 == d2)
     return 0.0;
 
-  bool err = false;
+
   Real correction = 0.0;
   Real ssc = me->paper_l ()->get_var("stemSpacingCorrection");
 
diff --git a/lily/sustain-pedal.cc b/lily/sustain-pedal.cc
index eb13be365b..f3efc6e76b 100644
--- a/lily/sustain-pedal.cc
+++ b/lily/sustain-pedal.cc
@@ -9,6 +9,7 @@
 #include "score-element.hh"
 #include "molecule.hh"
 #include "lookup.hh"
+#include "string.hh"
 
 // update comment --hwn 
 /*
diff --git a/lily/system-start-delimiter.cc b/lily/system-start-delimiter.cc
index 23bf7e7fac..41b0dc3238 100644
--- a/lily/system-start-delimiter.cc
+++ b/lily/system-start-delimiter.cc
@@ -14,7 +14,7 @@
 #include "molecule.hh"
 #include "lookup.hh"
 #include "all-font-metrics.hh"
-#include "spanner.hh"
+#include "score-element.hh"
 
 Molecule
 System_start_delimiter::staff_bracket (Score_element*me,Real height)  
diff --git a/lily/template5.cc b/lily/template5.cc
index a61b8b8721..8a4e1c8b40 100644
--- a/lily/template5.cc
+++ b/lily/template5.cc
@@ -7,7 +7,6 @@
 */
 
 #include <limits.h>
-#include "proto.hh"
 #include "string.hh"
 #include "moment.hh"
 #include "real.hh"
diff --git a/lily/tie-engraver.cc b/lily/tie-engraver.cc
index 09c4d47c60..d3ac6c48cd 100644
--- a/lily/tie-engraver.cc
+++ b/lily/tie-engraver.cc
@@ -1,5 +1,5 @@
 /*   
-  ctie-engraver.cc --  implement Tie_engraver
+  tie-engraver.cc --  implement Tie_engraver
   
   source file of the GNU LilyPond music typesetter
   
@@ -44,6 +44,9 @@ inline int compare (CHead_melodic_tuple const &a, CHead_melodic_tuple const &b)
 class Tie_engraver : public Engraver
 {
   PQueue<CHead_melodic_tuple> past_notes_pq_;
+  Moment end_mom_;
+  Moment next_end_mom_;
+
   Tie_req *req_l_;
   Array<CHead_melodic_tuple> now_heads_;
   Array<CHead_melodic_tuple> stopped_heads_;
@@ -80,6 +83,9 @@ Tie_engraver::do_try_music (Music *m)
 {
   if (Tie_req * c = dynamic_cast<Tie_req*> (m))
     {
+      /*      if (end_mom_ > now_mom ())
+       return false;
+      */
       req_l_ = c;
       SCM m = get_property ("automaticMelismata");
       bool am = gh_boolean_p (m) &&gh_scm2bool (m);
@@ -116,8 +122,6 @@ Tie_engraver::do_process_music ()
   if (req_l_)
     {
       Moment now = now_mom ();
-      Link_array<Note_head> nharr;
-      
       stopped_heads_.clear ();
       while (past_notes_pq_.size ()
 	     && past_notes_pq_.front ().end_ == now)
diff --git a/lily/tie.cc b/lily/tie.cc
index 13acee6ea7..85332353a8 100644
--- a/lily/tie.cc
+++ b/lily/tie.cc
@@ -223,9 +223,15 @@ Tie::get_curve () const
   b.set_default_bezier (h_inf, r_0);
   Bezier c = b.get_bezier ();
 
-  /* should do me for slurs as well. */
+  /*
+    Avoid colliding of the horizontal part with stafflines.
+    
+    should do me for slurs as well.
+
+   */
   Array<Real> horizontal (c.solve_derivative (Offset (1,0)));
 
+  
   if (horizontal.size ())
     {
       /*
diff --git a/lily/translator-ctors.cc b/lily/translator-ctors.cc
index 53dee7207d..ca1e6d516f 100644
--- a/lily/translator-ctors.cc
+++ b/lily/translator-ctors.cc
@@ -6,7 +6,6 @@
   (c)  1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 */
 
-#include "proto.hh"
 #include "translator.hh"
 #include "dictionary.hh"
 #include "debug.hh"
diff --git a/lily/translator-group.cc b/lily/translator-group.cc
index 4a7f6046e7..4e1bf9212a 100644
--- a/lily/translator-group.cc
+++ b/lily/translator-group.cc
@@ -11,7 +11,7 @@
 #include "translator.hh"
 #include "debug.hh"
 #include "moment.hh"
-
+#include "scm-hash.hh"
 #include "killing-cons.tcc"
 
 Translator_group::Translator_group (Translator_group const&s)
@@ -21,19 +21,21 @@ Translator_group::Translator_group (Translator_group const&s)
   consists_end_str_arr_ = s.consists_end_str_arr_;
   accepts_str_arr_ = s.accepts_str_arr_;
   iterator_count_ =0;
-  properties_dict_ = s.properties_dict_;
+  properties_dict_ = new Scheme_hash_table (*s.properties_dict_);
 }
 
 Translator_group::~Translator_group ()
 {
   assert (removable_b());
   trans_p_list_.junk ();
+  delete properties_dict_;
 }
 
 
 Translator_group::Translator_group()
 {
   iterator_count_  = 0;
+  properties_dict_ = new Scheme_hash_table ;
 }
 
 void
@@ -356,7 +358,7 @@ Translator_group::do_print() const
   if (!flower_dstream)
     return ;
 
-  gh_display (properties_dict_.self_scm_);
+  gh_display (properties_dict_->self_scm_);
   if (status == ORPHAN)
     {
       DEBUG_OUT << "consists of: ";
@@ -432,7 +434,7 @@ Translator_group::do_add_processing ()
 Translator_group*
 Translator_group::where_defined (SCM sym) const
 {
-  if (properties_dict_.elem_b (sym))
+  if (properties_dict_->elem_b (sym))
     {
       return (Translator_group*)this;
     }
@@ -443,9 +445,9 @@ Translator_group::where_defined (SCM sym) const
 SCM
 Translator_group::get_property (SCM sym) const
 {
-  if (properties_dict_.elem_b (sym))
+  if (properties_dict_->elem_b (sym))
     {
-      return properties_dict_.get (sym);
+      return properties_dict_->get (sym);
     }
 
   if (daddy_trans_l_)
@@ -458,6 +460,6 @@ Translator_group::get_property (SCM sym) const
 void
 Translator_group::set_property (String id, SCM val)
 {
-  properties_dict_.set (ly_symbol2scm (id.ch_C()), val);
+  properties_dict_->set (ly_symbol2scm (id.ch_C()), val);
 }
 
diff --git a/lily/warn.cc b/lily/warn.cc
index 5513d2524f..b371ddabe8 100644
--- a/lily/warn.cc
+++ b/lily/warn.cc
@@ -6,7 +6,6 @@
   (c)  1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 */
 
-#include "proto.hh"
 #include "debug.hh"
 #include "my-lily-lexer.hh"
 #include "moment.hh"
diff --git a/lilypond-mode.el b/lilypond-mode.el
index 8a4c7ccf6f..b035151c54 100644
--- a/lilypond-mode.el
+++ b/lilypond-mode.el
@@ -38,7 +38,7 @@
 
 (defconst lily-font-lock-keywords
   (let* ((keywords '("spanrequest" "simultaneous" "sequential" "accepts"
-		     "alternative" "bar" "breathe"
+		     "autochange" "alternative" "bar" "breathe"
 		     "cadenza" "chordmodifiers" "chords" "clef" "cm" "consists"
 		     "consistsend" "context"
 		     "duration" "font" "grace" "header" "in" "lyrics"
diff --git a/make/out/lilypond.lsm b/make/out/lilypond.lsm
index 34d3753697..03ee7acb5b 100644
--- a/make/out/lilypond.lsm
+++ b/make/out/lilypond.lsm
@@ -1,15 +1,15 @@
 Begin3
 Title: LilyPond
-Version: 1.3.70
-Entered-date: 05JUL00
+Version: 1.3.71
+Entered-date: 06JUL00
 Description: 
 Keywords: music notation typesetting midi fonts engraving
 Author: hanwen@cs.uu.nl (Han-Wen Nienhuys)
 	janneke@gnu.org (Jan Nieuwenhuizen)
 Maintained-by: hanwen@stack.nl (Han-Wen Nienhuys)
 Primary-site: sunsite.unc.edu /pub/Linux/apps/sound/convert
-	1000k lilypond-1.3.70.tar.gz 
+	1000k lilypond-1.3.71.tar.gz 
 Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
-	1000k lilypond-1.3.70.tar.gz 
+	1000k lilypond-1.3.71.tar.gz 
 Copying-policy: GPL
 End
diff --git a/make/out/lilypond.spec b/make/out/lilypond.spec
index 2195bd6051..d89e6a4e20 100644
--- a/make/out/lilypond.spec
+++ b/make/out/lilypond.spec
@@ -1,9 +1,9 @@
 Name: lilypond
-Version: 1.3.70
+Version: 1.3.71
 Release: 1
 Copyright: GPL
 Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.3.70.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.3.71.tar.gz
 Summary: A program for printing sheet music.
 URL: http://www.cs.uu.nl/~hanwen/lilypond
 # Icon: lilypond-icon.gif
diff --git a/midi2ly/duration.cc b/midi2ly/duration.cc
index 0ef7270d06..2780baec6d 100644
--- a/midi2ly/duration.cc
+++ b/midi2ly/duration.cc
@@ -12,7 +12,7 @@
 
 #include <assert.h>
 
-#include "proto.hh"
+#include "flower-proto.hh"
 #include "string.hh"
 #include "source-file.hh"
 #include "source.hh"
diff --git a/midi2ly/include/midi-parser.hh b/midi2ly/include/midi-parser.hh
index 25fb357f64..d4b498dc0f 100644
--- a/midi2ly/include/midi-parser.hh
+++ b/midi2ly/include/midi-parser.hh
@@ -35,7 +35,7 @@
 
 #endif
 
-#include "proto.hh"
+#include "flower-proto.hh"
 #include "rational.hh"
 #include "midi2ly-proto.hh"
 
diff --git a/midi2ly/include/midi-score-parser.hh b/midi2ly/include/midi-score-parser.hh
index fca4fdf006..de2e1db51e 100644
--- a/midi2ly/include/midi-score-parser.hh
+++ b/midi2ly/include/midi-score-parser.hh
@@ -11,7 +11,7 @@
 #define MIDI_SCORE_PARSER_HH
 
 #include "midi-parser.hh"
-#include "proto.hh"
+#include "flower-proto.hh"
 #include "midi2ly-proto.hh"
 #include "parray.hh"
 
diff --git a/midi2ly/include/midi-track-parser.hh b/midi2ly/include/midi-track-parser.hh
index 4dd95fe82d..21d6988a3b 100644
--- a/midi2ly/include/midi-track-parser.hh
+++ b/midi2ly/include/midi-track-parser.hh
@@ -10,7 +10,7 @@
 #ifndef MIDI_TRACK_PARSER_HH
 #define MIDI_TRACK_PARSER_HH
 
-#include "proto.hh"
+#include "flower-proto.hh"
 #include "cons.hh"
 #include "rational.hh"
 #include "midi2ly-proto.hh"
diff --git a/midi2ly/include/midi2ly-global.hh b/midi2ly/include/midi2ly-global.hh
index 38bf84720a..ab870e9571 100644
--- a/midi2ly/include/midi2ly-global.hh
+++ b/midi2ly/include/midi2ly-global.hh
@@ -1,5 +1,5 @@
 //
-// midi2ly-global.hh -- declare global (sic) stuff for midi2ly
+// midi2ly-global.hh -- declare global stuff for midi2ly
 //
 // copyright 1997 Jan Nieuwenhuizen <janneke@gnu.org>
 
@@ -9,7 +9,7 @@
 #include <iostream.h>
 
 #include "string.hh"
-#include "proto.hh"
+#include "flower-proto.hh"
 
 #define monitor_p_g &cout
 enum Verbose { QUIET_ver, BRIEF_ver, NORMAL_ver, VERBOSE_ver, DEBUG_ver };
diff --git a/midi2ly/include/mudela-column.hh b/midi2ly/include/mudela-column.hh
index 6c348afbc4..ca682b29e4 100644
--- a/midi2ly/include/mudela-column.hh
+++ b/midi2ly/include/mudela-column.hh
@@ -6,7 +6,7 @@
 #ifndef MUDELA_COLUMN_HH
 #define MUDELA_COLUMN_HH
 
-#include "proto.hh"
+#include "flower-proto.hh"
 #include "midi2ly-proto.hh"
 #include "rational.hh"
 #include "cons.hh"
@@ -15,14 +15,14 @@
 class Mudela_column 
 {
 public:
-    Mudela_column (Mudela_score* mudela_score_l, Rational mom);
+  Mudela_column (Mudela_score* mudela_score_l, Rational mom);
 
-    void add_item (Mudela_item* mudela_item_l);
-    Rational at_mom ();
+  void add_item (Mudela_item* mudela_item_l);
+  Rational at_mom ();
 
-    Cons_list<Mudela_item> mudela_item_l_list_;
-    Rational at_mom_;
-    Mudela_score* mudela_score_l_;
+  Cons_list<Mudela_item> mudela_item_l_list_;
+  Rational at_mom_;
+  Mudela_score* mudela_score_l_;
 };
 
 #endif // MUDELA_COLUMN_HH
diff --git a/midi2ly/include/mudela-score.hh b/midi2ly/include/mudela-score.hh
index 2a8006a5cd..27162e4938 100644
--- a/midi2ly/include/mudela-score.hh
+++ b/midi2ly/include/mudela-score.hh
@@ -7,7 +7,7 @@
 #define MUDELA_SCORE_HH
 
 #include "midi2ly-proto.hh"
-#include "proto.hh"
+#include "flower-proto.hh"
 #include "cons.hh"
 #include "parray.hh"
 
diff --git a/midi2ly/include/mudela-staff.hh b/midi2ly/include/mudela-staff.hh
index 6f51077d57..38be04823c 100644
--- a/midi2ly/include/mudela-staff.hh
+++ b/midi2ly/include/mudela-staff.hh
@@ -7,7 +7,7 @@
 #define MUDELA_STAFF_HH
 
 #include "midi2ly-proto.hh"
-#include "proto.hh"
+#include "flower-proto.hh"
 #include "cons.hh"
 #include "string.hh"
 
diff --git a/midi2ly/version.cc b/midi2ly/version.cc
index 360b0f886a..e1159f289f 100644
--- a/midi2ly/version.cc
+++ b/midi2ly/version.cc
@@ -1,4 +1,4 @@
-#include "proto.hh"
+#include "flower-proto.hh"
 #include "string.hh"
 
 const char * midi2ly_version_sz();