diff -ur -x CVS lilypond-org/Documentation/user/global.itely lilypond/Documentation/user/global.itely
--- lilypond-org/Documentation/user/global.itely	2005-07-22 00:37:35.000000000 +0900
+++ lilypond/Documentation/user/global.itely	2005-07-22 01:51:50.000000000 +0900
@@ -943,6 +943,25 @@
 }
 @end lilypond
 
+As demonstrated before, you can use multiple @code{\header} blocks. 
+When same fields appear in different blocks, the latter is used.  
+Here is a short example.
+
+@example 
+\header @{
+  composer = "Composer"
+@}
+\header @{
+  title = "Title"
+@}
+\score @{
+  \new Staff @{ c'4 @}
+  \header @{
+    title = "New title" %overwrite previous one
+  @}
+@}
+@end example
+
 A more advanced option is to change the definitions of the following
 variables in the @code{\paper} block.  The init file
 @file{ly/titling-init.ly} lists the default layout.
diff -ur -x CVS lilypond-org/lily/include/lily-parser.hh lilypond/lily/include/lily-parser.hh
--- lilypond-org/lily/include/lily-parser.hh	2005-07-13 01:31:42.000000000 +0900
+++ lilypond/lily/include/lily-parser.hh	2005-07-22 00:30:18.000000000 +0900
@@ -72,5 +72,6 @@
 Output_def *get_layout (Lily_parser *parser);
 Output_def *get_midi (Lily_parser *parser);
 Output_def *get_paper (Lily_parser *parser);
+SCM get_header(Lily_parser *parser);
 
 #endif /* LILY_PARSER_HH */
diff -ur -x CVS lilypond-org/lily/lily-parser.cc lilypond/lily/lily-parser.cc
--- lilypond-org/lily/lily-parser.cc	2005-07-13 01:31:40.000000000 +0900
+++ lilypond/lily/lily-parser.cc	2005-07-22 00:29:15.000000000 +0900
@@ -215,3 +215,12 @@
   return layout;
 }
 
+SCM
+get_header(Lily_parser *parser)
+{
+  SCM id = parser->lexer_->lookup_identifier("$defaultheader");
+  if (!ly_is_module (id))
+    id = ly_make_anonymous_module (be_safe_global);
+
+  return id;
+}
diff -ur -x CVS lilypond-org/lily/parser.yy lilypond/lily/parser.yy
--- lilypond-org/lily/parser.yy	2005-07-22 00:37:45.000000000 +0900
+++ lilypond/lily/parser.yy	2005-07-22 00:55:17.000000000 +0900
@@ -568,7 +568,7 @@
 
 toplevel_expression:
 	lilypond_header {
-		THIS->lexer_->set_identifier (ly_symbol2scm ("$globalheader"), $1);
+		THIS->lexer_->set_identifier (ly_symbol2scm ("$defaultheader"), $1);
 	}
 	| add_quote {
 	
@@ -625,7 +625,7 @@
 
 lilypond_header_body:
 	{
-		$$ = ly_make_anonymous_module (be_safe_global);
+		$$ = get_header(THIS);
 		THIS->lexer_->add_scope ($$);
 	}
 	| lilypond_header_body assignment  {
@@ -754,7 +754,7 @@
 		$$->set_spot (@$);
 		$$->paper_ = dynamic_cast<Output_def*> (unsmob_output_def (THIS->lexer_->lookup_identifier ("$defaultpaper"))->clone ());
 		scm_gc_unprotect_object ($$->paper_->self_scm ());
-		$$->header_ = THIS->lexer_->lookup_identifier ("$globalheader"); 
+		$$->header_ = THIS->lexer_->lookup_identifier ("$defaultheader"); 
 	}
 	| book_body paper_block {
 		$$->paper_ = $2;
diff -ur -x CVS lilypond-org/ly/init.ly lilypond/ly/init.ly
--- lilypond-org/ly/init.ly	2005-07-13 01:31:43.000000000 +0900
+++ lilypond/ly/init.ly	2005-07-22 01:02:21.000000000 +0900
@@ -15,7 +15,7 @@
 #(ly:set-option 'old-relative #f)
 #(define toplevel-scores '())
 #(define output-count 0) 
-#(define $globalheader #f)
+#(define $defaultheader #f)
 #(define version-seen? #f)
 
 \maininput
@@ -37,4 +37,4 @@
 #(if (pair? toplevel-scores)
   (toplevel-book-handler
    parser
-   (apply ly:make-book $defaultpaper $globalheader toplevel-scores)))
+   (apply ly:make-book $defaultpaper $defaultheader toplevel-scores)))
diff -ur -x CVS lilypond-org/scm/lily-library.scm lilypond/scm/lily-library.scm
--- lilypond-org/scm/lily-library.scm	2005-07-22 00:37:50.000000000 +0900
+++ lilypond/scm/lily-library.scm	2005-07-22 01:01:48.000000000 +0900
@@ -43,19 +43,19 @@
 
 ;; parser stuff.
 (define-public (print-music-as-book parser music)
-  (let* ((head (ly:parser-lookup parser '$globalheader))
+  (let* ((head (ly:parser-lookup parser '$defaultheader))
 	 (book (ly:make-book (ly:parser-lookup parser $defaultpaper)
 			     head score)))
     (ly:parser-print-book parser book)))
 
 (define-public (print-score-as-book parser score)
-  (let* ((head (ly:parser-lookup parser '$globalheader))
+  (let* ((head (ly:parser-lookup parser '$defaultheader))
 	 (book (ly:make-book (ly:parser-lookup parser $defaultpaper)
 			     head score)))
     (ly:parser-print-book parser book)))
 
 (define-public (print-score parser score)
-  (let* ((head (ly:parser-lookup parser '$globalheader))
+  (let* ((head (ly:parser-lookup parser '$defaultheader))
 	 (book (ly:make-book (ly:parser-lookup parser $defaultpaper)
 			     head score)))
     (ly:parser-print-score parser book)))
@@ -100,7 +100,7 @@
   (let*
       ((paper (ly:parser-lookup parser '$defaultpaper))
        (layout (ly:parser-lookup parser '$defaultlayout))
-       (header (ly:parser-lookup parser '$globalheader))
+       (header (ly:parser-lookup parser '$defaultheader))
        (count (ly:parser-lookup parser 'output-count))
        (base (ly:parser-output-name parser)))
 
