diff --git a/html/26.php b/html/26.php
index 514011041b9d2f486adfc57bb64982f5d8212386..b2eedc0be27de2cb35243ef446ba2fe738f6272d 100644
--- a/html/26.php
+++ b/html/26.php
@@ -1,7 +1,6 @@
 ---
 layout: default
 saison: 26
-saison_now: 30
 date: '2021-10-11'
 ligaspieltag: 17
 step: 1
diff --git a/html/27.php b/html/27.php
index c49813bd7108aae00a825fd8479476f100d25cd9..4dc8ff8c4cade7b0ce56c795f4f830f74e3f7012 100644
--- a/html/27.php
+++ b/html/27.php
@@ -1,7 +1,6 @@
 ---
 layout: default
 saison: 27
-saison_now: 30
 date: '2021-11-16'
 ligaspieltag: 18
 step: 1
diff --git a/html/28.php b/html/28.php
index 8226fc7b0daeb0f5006f3668b17b5785541ba121..631c2b480f51d0f0443ad9b75ba5015b13b27677 100644
--- a/html/28.php
+++ b/html/28.php
@@ -1,7 +1,6 @@
 ---
 layout: default
 saison: 28
-saison_now: 30
 date: '2021-12-11'
 ligaspieltag: 8
 step: 1
diff --git a/html/29.php b/html/29.php
index bc2d4ef94bb4acb5d2801cb27dc91e64499a3a47..191959a4516e300afc2ac7a7d9f5ac05d4b7cee5 100644
--- a/html/29.php
+++ b/html/29.php
@@ -1,11 +1,11 @@
 ---
 layout: default
 saison: 29
-saison_now: 30
 date: '2022-01-15'
 ligaspieltag: 8
 step: 1
 finals_step: 2
+finalteams: 8
 startliste:
   -
     - co
diff --git a/html/30.php b/html/30.php
index 3d460980b8cd745e97338b3adea76ff1059734e5..9bbd91c7107b9061b1a37c4b634df759281797a0 100644
--- a/html/30.php
+++ b/html/30.php
@@ -1,7 +1,6 @@
 ---
 layout: default
 saison: 30
-saison_now: 30
 date: '2022-02-19'
 ligaspieltag: 8
 step: 1
diff --git a/html/31.php b/html/31.php
index d221953be07ae507bf33c7449674fec7e6d07e22..85c28e274721518251d41c684a4bfaf71de43987 100644
--- a/html/31.php
+++ b/html/31.php
@@ -1,7 +1,6 @@
 ---
 layout: default
 saison: 31
-saison_now: 31
 date: '2022-03-26'
 ligaspieltag: 8
 step: 1
diff --git a/html/32.php b/html/32.php
new file mode 100644
index 0000000000000000000000000000000000000000..50d3afd47873096fa6b22a28fbfff6f3848f1bbe
--- /dev/null
+++ b/html/32.php
@@ -0,0 +1,36 @@
+---
+layout: default
+saison: 32
+date: '2022-04-29'
+ligaspieltag: 8
+step: 1
+finals_step: 2
+finalteams: 8
+startliste:
+  -
+    - es
+    - fi
+    - se
+    - is
+    - co
+    - cm
+    - fr
+    - bw
+    - pl
+    - hr
+    - sx
+    - nl
+
+startliste_partien_pause:
+  - 2
+  - 2
+  - 2
+  - 2
+  - 2
+  - 2
+  - 2
+  - 2
+  - 2
+  - 2
+  - 0
+---
diff --git a/html/_data/global.yml b/html/_data/global.yml
new file mode 100644
index 0000000000000000000000000000000000000000..dbfdfe074e130cc86932ed21a93cb17928e20633
--- /dev/null
+++ b/html/_data/global.yml
@@ -0,0 +1 @@
+saison_now: 32
diff --git a/html/_data/partien/12.yml b/html/_data/partien/12.yml
new file mode 100644
index 0000000000000000000000000000000000000000..d725006e752c4fe293e121bcaac3ebb5cc88c088
--- /dev/null
+++ b/html/_data/partien/12.yml
@@ -0,0 +1,11 @@
+- [ 1, 1,12, 2,11, 3,10, 4,9, 5,8, 6,7 ]
+- [ 1, 1,2, 11,3, 10,4, 9,5, 8,6, 7,12 ]
+- [ 1, 3,1, 12,2, 4,11, 5,10, 6,9, 7,8 ]
+- [ 1, 1,4, 2,3, 11,5, 10,6, 9,7, 8,12 ]
+- [ 1, 5,1, 2,4, 12,3, 6,11, 7,10, 8,9 ]
+- [ 1, 1,6, 2,5, 3,4, 11,7, 10,8, 9,12 ]
+- [ 1, 7,1, 6,2, 3,5, 4,12, 8,11, 9,10 ]
+- [ 1, 1,8, 2,7, 3,6, 4,5, 11,9, 12,10 ]
+- [ 1, 9,1, 8,2, 7,3, 4,6, 5,12, 10,11 ]
+- [ 1, 10,1, 2,9, 3,8, 4,7, 5,6, 12,11 ]
+- [ 1, 11,1, 10,2, 9,3, 8,4, 5,7, 6,12 ]
diff --git a/html/_layouts/default.php b/html/_layouts/default.php
index 1f25f53c61a32f2dacef1c2bc887fce12fb2b3e9..eafb46ad72324e95798daf0d82bbd2d1d0fc00c0 100644
--- a/html/_layouts/default.php
+++ b/html/_layouts/default.php
@@ -1,7 +1,7 @@
 <?php
 
 define( 'SAISON', '{{ page.saison }}' );
-define( 'SAISON_NOW', '{{ page.saison_now }}' );
+define( 'SAISON_NOW', '{{ site.data.global.saison_now }}' );
 
 include_once('functions/db_connect.php');
 include_once('functions/db_methods.php');
@@ -57,9 +57,10 @@ if( !empty($csv) ){
 
     var DATA={{ site.data | jsonify }};
     var SAISON='{{ page.saison }}';
-    var SAISON_NOW='{{ page.saison_now }}';
+    var SAISON_NOW='{{ site.data.global.saison_now }}';
     var TEAMS=<?=json_encode( db_getFromTeams() )?>;
     var T2ID={};
+    var FINALTEAMS={{ page.finalteams | default: 4 }};
     TEAMS.forEach(
       function(v){
         T2ID[v.nt] = v.id;
diff --git a/html/assets/js/script.js b/html/assets/js/script.js
index 9078693b592967d1828cb19ece285edf6a1463d4..a12ea36d9465ef635d6b0ed1764deace97af4479 100644
--- a/html/assets/js/script.js
+++ b/html/assets/js/script.js
@@ -100,20 +100,120 @@ function calculatePartien(saison,date){
         'link': '',
         'manager': 'dummy',
         'start': 27
+      },
+      {
+        'kontinent' : 'dummy',
+        'nt': 'xx',
+        'name': '<i>Platz 5</i>',
+        'link': '',
+        'manager': 'dummy',
+        'start': 27
+      },
+      {
+        'kontinent' : 'dummy',
+        'nt': 'xx',
+        'name': '<i>Platz 6</i>',
+        'link': '',
+        'manager': 'dummy',
+        'start': 27
+      },
+      {
+        'kontinent' : 'dummy',
+        'nt': 'xx',
+        'name': '<i>Platz 7</i>',
+        'link': '',
+        'manager': 'dummy',
+        'start': 27
+      },
+      {
+        'kontinent' : 'dummy',
+        'nt': 'xx',
+        'name': '<i>Platz 8</i>',
+        'link': '',
+        'manager': 'dummy',
+        'start': 27
       }
     ]
 
   }
 
   Grps.shift();
-  Grps.push( [ Tabelle.shift(), Tabelle.shift(), Tabelle.shift(), Tabelle.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);
+  Grps.push( [ Tabelle.shift(), Tabelle.shift(), Tabelle.shift(), Tabelle.shift(), Tabelle.shift() , Tabelle.shift() , Tabelle.shift() , Tabelle.shift() ] );
+
+  if( FINALTEAMS == 8 ){
+    runde='VF';
+    var tmp='<h3 class="runde s_'+saison+' r_'+runde+'">Viertelfinale</h3>';
+    $('#partien').append(tmp);
+
+    steps+=FINALS_STEP;
+    done.push( grpPartien( date,steps,saison,runde, 1, [ 8,1, 7,2, 6,3, 5,4 ] ) );
+
+    if( done.reduce( (a,b) => a && b ) == true ){
+      Grps.shift(); Grps.push([]);
+
+      var p=ERGEBNISSE.filter( (a) => ( a.saison == saison && a.runde == runde && a.spieltag == 1 && a.partie == 1 ) )[0];
+      if( p.TH*1 >= p.TA*1 ){ Grps[0].push( TEAMS.filter( (a) => (a.nt == p.H.toLowerCase() ) )[0] ); } else { Grps[0].push( TEAMS.filter( (a) => (a.nt == p.A.toLowerCase() ) )[0] ); }
+      var p=ERGEBNISSE.filter( (a) => ( a.saison == saison && a.runde == runde && a.spieltag == 1 && a.partie == 2 ) )[0];
+      if( p.TH*1 >= p.TA*1 ){ Grps[0].push( TEAMS.filter( (a) => (a.nt == p.H.toLowerCase() ) )[0] ); } else { Grps[0].push( TEAMS.filter( (a) => (a.nt == p.A.toLowerCase() ) )[0] ); }
+      var p=ERGEBNISSE.filter( (a) => ( a.saison == saison && a.runde == runde && a.spieltag == 1 && a.partie == 3 ) )[0];
+      if( p.TH*1 >= p.TA*1 ){ Grps[0].push( TEAMS.filter( (a) => (a.nt == p.H.toLowerCase() ) )[0] ); } else { Grps[0].push( TEAMS.filter( (a) => (a.nt == p.A.toLowerCase() ) )[0] ); }
+      var p=ERGEBNISSE.filter( (a) => ( a.saison == saison && a.runde == runde && a.spieltag == 1 && a.partie == 4 ) )[0];
+      if( p.TH*1 >= p.TA*1 ){ Grps[0].push( TEAMS.filter( (a) => (a.nt == p.H.toLowerCase() ) )[0] ); } else { Grps[0].push( TEAMS.filter( (a) => (a.nt == p.A.toLowerCase() ) )[0] ); }
+
+    } else {
+      Grps.shift();
+      var Tabelle = [
+        {
+          'kontinent' : 'dummy',
+          'nt': 'xx',
+          'name': '<i>Sieger VF1</i>',
+          'link': '',
+          'manager': 'dummy',
+          'start': 27
+        },
+        {
+          'kontinent' : 'dummy',
+          'nt': 'xx',
+          'name': '<i>Sieger VF2</i>',
+          'link': '',
+          'manager': 'dummy',
+          'start': 27
+        },
+        {
+          'kontinent' : 'dummy',
+          'nt': 'xx',
+          'name': '<i>Sieger VF3</i>',
+          'link': '',
+          'manager': 'dummy',
+          'start': 27
+        },
+        {
+          'kontinent' : 'dummy',
+          'nt': 'xx',
+          'name': '<i>Sieger VF4</i>',
+          'link': '',
+          'manager': 'dummy',
+          'start': 27
+        }
+      ];
+      Grps.push( [ Tabelle.shift(), Tabelle.shift(), Tabelle.shift(), Tabelle.shift() ] );
+    }
+
+    FINALTEAMS=4;
+
+  }
+
+  if( FINALTEAMS == 4 ){
+    runde='HF';
+    var tmp='<h3 class="runde s_'+saison+' r_'+runde+'">Halbfinale</h3>';
+    $('#partien').append(tmp);
+
+    steps+=FINALS_STEP;
+    done.push( grpPartien( date,steps,saison,runde, 1, [ 1,4, 2,3 ] ) );
+  }
 
-  steps+=FINALS_STEP;
-  done.push( grpPartien( date,steps,saison,runde, 1, [ 1,4, 2,3 ] ) );
   steps+=FINALS_STEP;
 
   if( done.reduce( (a,b) => a && b ) == true ){
@@ -170,7 +270,6 @@ function calculatePartien(saison,date){
 function grpPartien( date,steps,saison,runde,spieltag,Bg ){
 
   if( Grps.map( (a) => ( a.filter((b) => (b == undefined )).length > 0 ) )[0] ){
-    console.log( JSON.parse(JSON.stringify(Grps)));
     alert( 'Error: Einige Teams existieren nicht in der DB' );
     return;
   }
@@ -205,9 +304,9 @@ function grpPartien( date,steps,saison,runde,spieltag,Bg ){
 
         tmp+='<tr class="begegnungen h_'+v[h1].nt+' a_'+v[a1].nt+' '+(( st ) ? 'stats' : '')+'">';
         tmp+='<td>'+dt+'</td>';
-        tmp+='<td data-id="'+v[h1].nt+'"><sup>'+v[h1].nt.toUpperCase()+'</sup> '+v[h1].name.replace(/\(NL\)/g,'')+' <img class="flags" src="./images/flags/'+v[h1].nt.toLowerCase()+'.svg"></td>';
+        tmp+='<td data-id="'+v[h1].nt+'"><sup>'+v[h1].nt.toUpperCase()+'</sup> '+v[h1].name.replace(/\(NL\)/g,'')+' <img class="flags" src="./images/flags/'+(( v[h1].flag ) ? v[h1].flag : v[h1].nt.toLowerCase())+'.svg"></td>';
         tmp+='<td> - </td>';
-        tmp+='<td data-id="'+v[a1].nt+'"><img class="flags" src="./images/flags/'+v[a1].nt.toLowerCase()+'.svg"> '+v[a1].name.replace(/\(NL\)/g,'')+' <sup>'+v[a1].nt.toUpperCase()+'</sup></td>';
+        tmp+='<td data-id="'+v[a1].nt+'"><img class="flags" src="./images/flags/'+(( v[a1].flag ) ? v[a1].flag : v[a1].nt.toLowerCase())+'.svg"> '+v[a1].name.replace(/\(NL\)/g,'')+' <sup>'+v[a1].nt.toUpperCase()+'</sup></td>';
 
         tmp+='<td data-mid="'+(( ergebnis.MID != undefined ) ? ergebnis.MID : '0' )+'">'+th+'</td>';
         tmp+='<td>:</td>';