diff --git a/lily/include/paper-book.hh b/lily/include/paper-book.hh
index 1294dd1..e9ec6b5 100644
--- a/lily/include/paper-book.hh
+++ b/lily/include/paper-book.hh
@@ -58,7 +58,7 @@ public:
 protected:
   void classic_output_aux (SCM output,
 			   int *first_performance_number);
-  void output_aux (SCM output_channel,
+  bool output_aux (SCM output_channel,
 		   bool is_last,
 		   int *first_page_number,
 		   int *first_performance_number);
diff --git a/lily/paper-book.cc b/lily/paper-book.cc
index 5f9d60c..8e8b7d3 100644
--- a/lily/paper-book.cc
+++ b/lily/paper-book.cc
@@ -108,12 +108,13 @@ Paper_book::add_performance (SCM s)
   performances_ = scm_cons (s, performances_);
 }
 
-void
+bool
 Paper_book::output_aux (SCM output_channel,
 			bool is_last,
 			int *first_page_number,
 			int *first_performance_number)
 {
+  bool has_output = false;
   if (scm_is_pair (performances_))
     {
       SCM proc = ly_lily_module_constant ("write-performances-midis");
@@ -131,23 +132,26 @@ Paper_book::output_aux (SCM output_channel,
 	if (Paper_book *pbookpart = unsmob_paper_book (scm_car (p)))
 	  {
 	    bool is_last_part = (is_last && !scm_is_pair (scm_cdr (p)));
-	    pbookpart->output_aux (output_channel,
-				   is_last_part,
-				   first_page_number,
-				   first_performance_number);
+	    has_output |= pbookpart->output_aux (output_channel,
+						 is_last_part,
+						 first_page_number,
+						 first_performance_number);
 	  }
     }
   else
     {
       if (scores_ == SCM_EOL)
-	return;
+	return false;
       paper_->set_variable (ly_symbol2scm ("first-page-number"),
 			    scm_long2num (*first_page_number));
       paper_->set_variable (ly_symbol2scm ("is-last-bookpart"),
 			    ly_bool2scm (is_last));
       /* Generate all stencils to trigger font loads.  */
-      *first_page_number += scm_ilength (pages ());
+      int output_length = scm_ilength (pages ());
+      *first_page_number += output_length;
+      has_output = (output_length != 0);
     }
+  return has_output;
 }
 
 void
@@ -155,11 +159,12 @@ Paper_book::output (SCM output_channel)
 {
   int first_page_number = robust_scm2int (paper_->c_variable ("first-page-number"), 1);
   int first_performance_number = 0;
-  output_aux (output_channel,
-	      true,
-	      &first_page_number,
-	      &first_performance_number);
-
+  if (!output_aux (output_channel,
+		   true,
+		   &first_page_number,
+		   &first_performance_number))
+    return;
+      
   SCM scopes = SCM_EOL;
   if (ly_is_module (header_))
     scopes = scm_cons (header_, scopes);
@@ -581,7 +586,7 @@ Paper_book::pages ()
 	if (Paper_book *pbookpart = unsmob_paper_book (scm_car (p)))
 	  pages_ = scm_append_x (scm_list_2 (pages_, pbookpart->pages ()));
     }
-  else
+  else if (scm_is_pair (scores_))
     {
       SCM proc = paper_->c_variable ("page-breaking-wrapper");
       pages_ = scm_apply_0 (proc, scm_list_1 (self_scm ()));
