diff --git a/pae2xml.pl b/pae2xml.pl
index 61990e055c1186b35ece6a446a4185f1a638beef..3c555bc6997d9864e945839046cb6466bcc0c4a2 100755
--- a/pae2xml.pl
+++ b/pae2xml.pl
@@ -255,6 +255,10 @@ sub parse_notes {
   $notes =~ s/(xx|x|bb|b|n)qq/qq$1/gs;  # qq first, then parts of notes
   $notes =~ s/([\.\d,'xbn])+(q|g)/$2$1/gs; # q and g first, then parts of notes
 
+  # Beam starts/endings are handled by the first/last note of the beam, since
+  # we need to know for the first note the <beam>begin</beam> and for the
+  # last note that the <beam>end</beam> tag should be used!
+  # Thus, the RegExp for a note contains the beam start/end tags { and }
   while ($notes ne "") {
     if ($notes =~ /^(\'+|\,+)(.*)$/) {  # Octave marks
       ($oct, $notes) = ($1, $2);
@@ -265,12 +269,6 @@ sub parse_notes {
     } elsif ($notes =~ /^r(.*)$/) {  # End grace
       $notes = $1;
       $qq = 0;
-    } elsif ($notes =~ /^{(.*)$/) {  # Begin beam
-      $notes = $1;
-      $BEAM = 1;
-      # Beam endings are handled by the last note of the beam, since
-      # we need to know for the last note that the <beam>end</beam> tag
-      # should be used!
     } elsif ($notes =~ /^\=(\d*)(\/.*)$/) {  # multi-measure rests
       $measrest = $1;
       $notes = $2;
@@ -306,23 +304,23 @@ sub parse_notes {
           }
         }
       }
-    } elsif ($notes =~ /^((\^)?(g|q)?(\,|\')*(x|xx|b|bb|n)?\d*\.*(\-|A|B|C|D|E|F|G)t?\+?}?)(.*)$/) {  # a note
+    } elsif ($notes =~ /^({?(\^)?(g|q)?(\,|\')*(x|xx|b|bb|n)?\d*\.*(\-|A|B|C|D|E|F|G)t?\+?}?)(.*)$/) {  # a note
       ($note, $notes) = ($1,$7);
       parse_note($note, $keysig, "", "", $qq);
-    } elsif ($notes =~ /^(\((g|q)?(\,|\')*(x|xx|b|bb|n)?\d*\.*(\-|A|B|C|D|E|F|G)[t\+]*\)[t\+}]*)(.*)$/) {  # one note with a fermata
+    } elsif ($notes =~ /^({?\((g|q)?{?(\,|\')*(x|xx|b|bb|n)?\d*\.*(\-|A|B|C|D|E|F|G)[t\+]*\)[t\+}]*)(.*)$/) {  # one note with a fermata
       ($note, $notes) = ($1,$6);
       parse_note($note, $keysig, "", "", $qq);
-    } elsif ($notes =~ /^(\(((\^)?(g|q)?(\,|\')*(x|xx|b|bb|n)?\d*\.*(\-|A|B|C|D|E|F|G)t?\+?}?){3}\))(.*)$/) {  # a triplet
+    } elsif ($notes =~ /^(\(({?(\^)?(g|q)?(\,|\')*(x|xx|b|bb|n)?\d*\.*(\-|A|B|C|D|E|F|G)t?\+?}?){3}\))(.*)$/) {  # a triplet
       ($triplet, $notes) = ($1,$8);
       #      print "TRIPLET: ".$triplet." -> ";
-      $triplet =~ /^\(((\^)?(g|q)?(\,|\')*(x|xx|b|bb|n)?\d*\.*(\-|A|B|C|D|E|F|G)t?\+?}?)(.*)\)$/gs;
+      $triplet =~ /^\(({?(\^)?(g|q)?(\,|\')*(x|xx|b|bb|n)?\d*\.*(\-|A|B|C|D|E|F|G)t?\+?}?)(.*)\)$/gs;
       ($note, $triplet) = ($1,$7);
       #print "$note $triplet\n";
       parse_note($note, $keysig, '<tuplet type="start"/>', '				<time-modification>
 					<actual-notes>3</actual-notes>
 					<normal-notes>2</normal-notes>
 				</time-modification>', $qq);
-      $triplet =~ /^((g|q)?(\,|\')*(x|xx|b|bb|n)?\d*\.*(\-|A|B|C|D|E|F|G)t?\+?)(.*)$/gs;
+      $triplet =~ /^({?(g|q)?(\,|\')*(x|xx|b|bb|n)?\d*\.*(\-|A|B|C|D|E|F|G)t?\+?}?)(.*)$/gs;
       ($note, $triplet) = ($1,$6);
       #print "$note $triplet\n";
       parse_note($note, $keysig,  '', '				<time-modification>
@@ -333,10 +331,10 @@ sub parse_notes {
 					<actual-notes>3</actual-notes>
 					<normal-notes>2</normal-notes>
 				</time-modification>', $qq);
-    } elsif ($notes =~ /^((\d+)\(((\^)?(g|q)?(\,|\')*(x|xx|b|bb|n)?\d*\.*(\-|A|B|C|D|E|F|G)t?\+?}?)+\;(\d+)\))(.*)$/)  {  # an n-tuplet
+    } elsif ($notes =~ /^((\d+)\(({?(\^)?(g|q)?(\,|\')*(x|xx|b|bb|n)?\d*\.*(\-|A|B|C|D|E|F|G)t?\+?}?)+\;(\d+)\))(.*)$/)  {  # an n-tuplet
       ($tuplet, $notes) = ($1,$10);
       #      print "N-TUPLET: ".$tuplet." -> ";
-      $tuplet =~ /^(\d+)\(((\,|\')*(x|xx|b|bb|n)?\d*\.*(g|q)?(\-|A|B|C|D|E|F|G)t?\+?}?)(.*);(\d)\)$/gs;
+      $tuplet =~ /^(\d+)\(({?(\,|\')*(x|xx|b|bb|n)?\d*\.*(g|q)?(\-|A|B|C|D|E|F|G)t?\+?}?)(.*);(\d)\)$/gs;
       ($combdur, $note, $tuplet, $numval) = ($1,$2,$7,$8);
       #print "i=$combdur, n=$numval; $note / $tuplet\n";
       my $ind_dur = duration($combdur)/$numval;
@@ -346,7 +344,7 @@ sub parse_notes {
 					<actual-notes>'.$act_notes.'</actual-notes>
 					<normal-notes>1</normal-notes>
 				</time-modification>', $qq);
-      while ($tuplet =~ /^((g|q)?(\,|\')*(x|xx|b|bb|n)?\d*\.*(\-|A|B|C|D|E|F|G)t?\+?}?)(.+)$/gs) {
+      while ($tuplet =~ /^({?(g|q)?(\,|\')*(x|xx|b|bb|n)?\d*\.*(\-|A|B|C|D|E|F|G)t?\+?\}?)([^}]+}?)$/gs) {
         ($note, $tuplet) = ($1,$6);
         #print "$note / $tuplet\n";
         parse_note($note, $keysig,  '', '				<time-modification>
@@ -446,7 +444,7 @@ sub parse_notes {
 			</note>
 ';
     }
-    elsif ($notes =~ s/(\d+\.*)\(((g|q)?(\,|\')*(x|xx|b|bb|n)?\d*\.*(\-|A|B|C|D|E|F|G)t?\+?}?)\)/\($1$2\)/gs) { # pull duration into fermata parentheses
+    elsif ($notes =~ s/(\d+\.*)\(({?(g|q)?(\,|\')*(x|xx|b|bb|n)?\d*\.*(\-|A|B|C|D|E|F|G)t?\+?}?)\)/\($1$2\)/gs) { # pull duration into fermata parentheses
       #      print "after replacement: $notes\n"; exit;
     }
     elsif ($notes =~ /^ +(.*)$/) {
@@ -480,8 +478,8 @@ sub parse_note {
     $fermata = 1;
   }
 
-  $note =~ /^(\^)?(g|q)?((\,|\')*)(x|xx|b|bb|n)?(\d*)(\.*)(\-|A|B|C|D|E|F|G)(t?)(\+?)(}?)$/;
-  my ($chord, $gracecue, $oct, $acc, $dur, $dot, $pitch, $trill, $tie, $beamend) = ($1, $2, $3, $5, $6, $7, $8, $9, $10, $11);
+  $note =~ /^({)?(\^)?(g|q)?((\,|\')*)(x|xx|b|bb|n)?(\d*)(\.*)(\-|A|B|C|D|E|F|G)(t?)(\+?)(}?)$/;
+  my ($beamstart, $chord, $gracecue, $oct, $acc, $dur, $dot, $pitch, $trill, $tie, $beamend) = ($1, $2, $3, $4, $6, $7, $8, $9, $10, $11, $12);
 
   print OUT '			<note>
 ';
@@ -544,14 +542,17 @@ sub parse_note {
   print OUT $addition;
 
   # print out beaming information if needed:
-  if ($BEAM == 1) {
-    print OUT "					<beam>begin</beam>\n";
-    $BEAM = 2;
+  if (($beamstart eq "{") && ($beamend eq "}")) {
+    # Single-note beam means a hook
+    print OUT "				<beam>forward hook</beam>\n";
+  } elsif ($beamstart eq "{") {
+    ++$BEAM;
+    print OUT "				<beam number=\"$BEAM\">begin</beam>\n";
   } elsif (($BEAM > 0) && ($beamend eq "}")) {
-    print OUT "					<beam>end</beam>\n";
-    $BEAM = 0;
+    print OUT "				<beam number=\"$BEAM\">end</beam>\n";
+    --$BEAM;
   } elsif ($BEAM > 0) {
-    print OUT "					<beam>continue</beam>\n";
+    print OUT "				<beam number=\"$BEAM\">continue</beam>\n";
   }
 
   my $notationbracket = $fermata || $tienotation || ($trill eq "t") || ($notation ne "");