diff --git a/26.html b/26.html
index 174a864b2ec663b208008e2fc0fe0483652741a1..495f835045adf8fe163432bfecc5b6d7e2e676b2 100644
--- a/26.html
+++ b/26.html
@@ -1,6 +1,8 @@
 ---
 saison: '26'
 date: '2021-10-11'
+step: 1
+finals_step: 6
 ---
 
 <!DOCTYPE html>
@@ -17,6 +19,8 @@ date: '2021-10-11'
   <script>
 
     var DATA={{ site.data | jsonify }};
+    const STEP={{ page.step | default: '1' }};
+    const FINALS_STEP={{ page.finals_step | default: '0' }};
     $(document).ready( function(){
         calculatePartien('{{ page.saison }}', '{{ page.date }}');
         calculateTabelle('{{ page.saison }}', '7');
diff --git a/_data/ergebnisse/26/HF/1.csv b/_data/ergebnisse/26/HF/1.csv
new file mode 100644
index 0000000000000000000000000000000000000000..5be090471d2d3fa7e4e2b1467648729b8dd7b13c
--- /dev/null
+++ b/_data/ergebnisse/26/HF/1.csv
@@ -0,0 +1,2 @@
+T,H,A,TH,TA,MID
+2021-10-22,CM,XX,2,0,0
diff --git a/assets/js/script.js b/assets/js/script.js
index bbe434ea2e129cba65f2bf931e78adccc3da2328..82080854e77dd0628ad64d3d906b9d9280d89fb9 100644
--- a/assets/js/script.js
+++ b/assets/js/script.js
@@ -1,6 +1,7 @@
 const DAY=24*3600*1000;
 
 function calculateTabelle(saison,runde,show=true){
+
   $.each( DATA.teams,
     function( i,v ){
       //if( v[saison] == undefined )
@@ -14,7 +15,7 @@ function calculateTabelle(saison,runde,show=true){
         function(j,w){
           w.forEach(
             function( v,i ){
-              if( runde < k ) return;
+              if( runde < k || !$.isNumeric(k) ) return;
               var H=DATA.teams[v.H][saison];
               var A=DATA.teams[v.A][saison];
               if( parseInt(v.TH) > parseInt(v.TA) ){
@@ -50,8 +51,6 @@ function calculateTabelle(saison,runde,show=true){
     }
   );
 
-  console.log( Tabelle );
-
   if( !show ){
     return Tabelle;
   }
@@ -105,20 +104,48 @@ function calculatePartien(saison,date){
       Grps.push( [ Tabelle.shift(), Tabelle.shift(), Tabelle.pop(), Tabelle.pop() ] );
     }
 
-    var tmp='<h3 class="runde s_'+saison+' r_'+runde+'">Runde '+runde+(( Grps.length == 1 ) ? ' (Finalrunde)' : '')+'</h3>';
+    var tmp='<h3 class="runde s_'+saison+' r_'+runde+'">Runde '+runde+(( Grps.length == 1 ) ? ' (Endrunde)' : '')+'</h3>';
     $('#partien').append(tmp);
     // Hinrunde
     done.push( grpPartien(new Date(date),saison,runde,1,0,1,2,3) );
     ;
-    done.push( grpPartien(new Date(date+=DAY),saison,runde,2,0,2,1,3) );
-    done.push( grpPartien(new Date(date+=DAY),saison,runde,3,0,3,1,2) );
+    done.push( grpPartien(new Date(date+=DAY*STEP),saison,runde,2,0,2,1,3) );
+    done.push( grpPartien(new Date(date+=DAY*STEP),saison,runde,3,0,3,1,2) );
     // Rückrunde
-    done.push( grpPartien(new Date(date+=DAY),saison,runde,4,1,0,3,2) );
-    done.push( grpPartien(new Date(date+=DAY),saison,runde,5,2,0,3,1) );
-    done.push( grpPartien(new Date(date+=DAY),saison,runde,6,3,0,2,1) );
+    done.push( grpPartien(new Date(date+=DAY*STEP),saison,runde,4,1,0,3,2) );
+    done.push( grpPartien(new Date(date+=DAY*STEP),saison,runde,5,2,0,3,1) );
+    done.push( grpPartien(new Date(date+=DAY*STEP),saison,runde,6,3,0,2,1) );
 
   } while( done.reduce( (a,b) => a && b ) == true && Grps.length > 1 );
 
+
+  var Tabelle = calculateTabelle( saison, runde, false );
+
+  Grps.shift();
+  Grps.push( [ Tabelle.shift(), Tabelle.shift(), Tabelle.shift(), Tabelle.shift() ] );
+
+  runde='HF';
+  var tmp='<h3 class="runde s_'+saison+' r_'+runde+'">Halbfinale</h3>';
+  $('#partien').append(tmp);
+  done.push( grpPartien(new Date(date+=DAY*FINALS_STEP),saison,runde,1,0,3,1,2) );
+
+  if( done.reduce( (a,b) => a && b ) == true ){
+    Grps.shift(); Grps.push([]);
+
+    var p1=DATA.ergebnisse[saison][runde][1][0];
+    if( p1.TH >= p1.TA ){ Grps[0].push( DATA.teams[p1.H] ); } else { Grps[0].push( DATA.teams[p1.A] ); }
+
+    var p2=DATA.ergebnisse[saison][runde][1][1];
+    if( p2.TH >= p2.TA ){ Grps[0].push( DATA.teams[p2.H] ); } else { Grps[0].push( DATA.teams[p2.A] ); }
+
+
+    runde='F'
+    var tmp='<h3 class="runde s_'+saison+' r_'+runde+'">Finale</h3>';
+    $('#partien').append(tmp);
+    done.push( grpPartien(new Date(date+=DAY*FINALS_STEP),saison,runde,1,0,1,-1,-1) );
+  }
+
+
 }
 
 
@@ -133,6 +160,8 @@ function grpPartien( date,saison,runde,spieltag,h1,a1,h2,a2 ){
   Grps.forEach(
     function(v,i){
 
+      if( h1 == -1 || a1 == -1 ) return;
+
       if( DATA.ergebnisse[saison] == undefined ){
         var th='-'; var ta='-'; var dt='<i>'+new Date(date).toJSON().slice(0,10)+'</i>'; done=false; var match='';
       } else if( DATA.ergebnisse[saison][runde] == undefined ){
@@ -159,6 +188,7 @@ function grpPartien( date,saison,runde,spieltag,h1,a1,h2,a2 ){
       tmp+='<td>'+ta+'</td>';
       tmp+='</tr>';
 
+      if( h2 == -1 || a2 == -1 ) return;
 
       if( DATA.ergebnisse[saison] == undefined ){
         var th='-'; var ta='-'; var dt='<i>'+new Date(date).toJSON().slice(0,10)+'</i>'; done=false;