|  | @@ -613,14 +613,18 @@ export class VexFlowMusicSheetCalculator extends MusicSheetCalculator {
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    protected createMetronomeMark(metronomeExpression: InstantaneousTempoExpression): void {
 | 
	
		
			
				|  |  | -    const vfStave: Vex.Flow.Stave = (this.graphicalMusicSheet.MeasureList[0][0] as VexFlowMeasure).getVFStave();
 | 
	
		
			
				|  |  | +    // note: sometimes MeasureNumber is 0 here, e.g. in Christbaum, maybe because of pickup measure (auftakt)
 | 
	
		
			
				|  |  | +    const measureNumber: number = Math.max(metronomeExpression.ParentMultiTempoExpression.SourceMeasureParent.MeasureNumber - 1, 0);
 | 
	
		
			
				|  |  | +    const staffNumber: number = Math.max(metronomeExpression.StaffNumber - 1, 0);
 | 
	
		
			
				|  |  | +    const firstMetronomeMark: boolean = measureNumber === 0 && staffNumber === 0;
 | 
	
		
			
				|  |  | +    const vfStave: Vex.Flow.Stave = (this.graphicalMusicSheet.MeasureList[measureNumber][staffNumber] as VexFlowMeasure).getVFStave();
 | 
	
		
			
				|  |  |      //vfStave.addModifier(new Vex.Flow.StaveTempo( // needs Vexflow PR
 | 
	
		
			
				|  |  |      let vexflowDuration: string = "q";
 | 
	
		
			
				|  |  |      if (metronomeExpression.beatUnit) {
 | 
	
		
			
				|  |  |        const duration: Fraction = NoteTypeHandler.getNoteDurationFromType(metronomeExpression.beatUnit);
 | 
	
		
			
				|  |  |        vexflowDuration = VexFlowConverter.duration(duration, false);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | -    // const noteType: NoteType = NoteTypeHandler.StringToNoteType(metronomeExpression.beatUnit);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      vfStave.setTempo(
 | 
	
		
			
				|  |  |        {
 | 
	
		
			
				|  |  |            bpm: metronomeExpression.TempoInBpm,
 | 
	
	
		
			
				|  | @@ -630,9 +634,9 @@ export class VexFlowMusicSheetCalculator extends MusicSheetCalculator {
 | 
	
		
			
				|  |  |        this.rules.MetronomeMarkYShift * unitInPixels);
 | 
	
		
			
				|  |  |         // -50, -30), 0); //needs Vexflow PR
 | 
	
		
			
				|  |  |         //.setShiftX(-50);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +    const xShift: number = firstMetronomeMark ? this.rules.MetronomeMarkXShift * unitInPixels : 0;
 | 
	
		
			
				|  |  |      (<any>vfStave.getModifiers()[vfStave.getModifiers().length - 1]).setShiftX(
 | 
	
		
			
				|  |  | -      this.rules.MetronomeMarkXShift * unitInPixels
 | 
	
		
			
				|  |  | +      xShift
 | 
	
		
			
				|  |  |      );
 | 
	
		
			
				|  |  |      // TODO calculate bounding box of metronome mark instead of hacking skyline to fix lyricist collision
 | 
	
		
			
				|  |  |      const skyline: number[] = this.graphicalMusicSheet.MeasureList[0][0].ParentStaffLine.SkyLine;
 |