diff --git a/R/analyse.R b/R/analyse.R
new file mode 100644
index 0000000000000000000000000000000000000000..0f5ed0cbb2ef41d58b22d87a26f261341bafb79c
--- /dev/null
+++ b/R/analyse.R
@@ -0,0 +1,20 @@
+# analyse.R
+
+endergebnis_df <- aggregiere_stadtteile_mit_briefwahl(stimmbezirke_df) %>% 
+  mutate(wahlbeteiligung = stimmen / wahlberechtigt * 100, 
+         briefwahlquote = briefwahl /stimmen * 100, 
+         jastimmenquote = ja / wahlberechtigt * 100)
+
+write.xlsx(endergebnis_df,"daten/endergebnis.xlsx", overwrite = T)
+
+
+wahllokale_final_df <- aggregiere_wahllokale(stimmbezirke_df) %>% 
+  mutate(jastimmenquote = ja / wahlberechtigt * 100)
+
+write.xlsx(wahllokale_final_df,"daten/wahllokale_final.xlsx", overwrite=T)
+
+briefwahl_vs_wahllokal <- wahllokale_final_df %>% 
+  group_by(typ) %>% 
+  summarize(across(wahlberechtigt:nein, ~sum(.))) 
+
+write.xlsx(briefwahl_vs_wahllokal,"daten/briefwahlauswertung.xlsx", overwrite=T)
diff --git a/R/generiere_balken.R b/R/generiere_balken.R
index eef6e784dd0324c31b1bf65bc01ca2a5fd59bb25..a6329c2022ec5c4fe9cb5c2d9f1e9c4f22b5590e 100644
--- a/R/generiere_balken.R
+++ b/R/generiere_balken.R
@@ -120,7 +120,8 @@ generiere_balken <- function (wb, ja, nein, auszählung_beendet) {
 }
 
 generiere_auszählungsbalken <- function(ausgezählt,anz,max,ts) {
-  annotate_str <- paste0("Anteil der Wahlberechtigten, die die Auszählung umfasst",
+  ausgezählt <- floor(anz/max*100)
+  annotate_str <- paste0("Anzahl der ausgezählten Wahllokale",
                         # Container Fake-Balken
                          "<span style='height:24px;display: flex;justify-content: space-around;align-items: flex-end; width: 100%;'>",
                             # Vordere Pufferzelle 70px  
diff --git a/R/lies_aktuellen_stand.R b/R/lies_aktuellen_stand.R
index b342474e9685b45516b7ac52b469b74da013a1c7..37b74e469d89f1ca664ba6e21250e27256edea20 100644
--- a/R/lies_aktuellen_stand.R
+++ b/R/lies_aktuellen_stand.R
@@ -203,7 +203,7 @@ aggregiere_wahllokale <- function(stimmbezirke_df) {
     arrange(ortsteil) 
   # Sicherheitscheck: Warnen, wenn nicht alle Wahllokale zugeordnet
   if (nrow(wahllokale_df) != length(unique(opendata_wahllokale_df$`Wahlraum-Bezeichnung`))) teams_warnung("Nicht alle Stimmbezirke zugeordnet")
-  return(ortsteile_df)
+  return(wahllokale_df)
 }
 
 
diff --git a/R/update_feldmann.R b/R/update_feldmann.R
index f9816d29ce6375688ee4fabb112810dcdec9d20a..e0dd5d6d73505c1a8d37304dcf8eb2236688b0f4 100644
--- a/R/update_feldmann.R
+++ b/R/update_feldmann.R
@@ -76,8 +76,8 @@ aktualisiere_fom <- function(wl_url = stimmbezirke_url) {
     # Bilde das Dataframe
     # Sende die Daten an Datawrapper und aktualisiere
     fom_dw_df <- fom_df %>% 
-      mutate(ausgezählt = wahlberechtigt / ffm_waehler *100) %>% 
-      mutate(prozent30 = wahlberechtigt * 0.3) %>% 
+      mutate(ausgezählt = meldungen_anz / meldungen_max *100) %>% 
+      mutate(prozent30 = NA) %>% 
       mutate(quorum = ja / wahlberechtigt * 100) %>% 
       select(ausgezählt, wahlberechtigt, ungueltig, ja, nein, quorum, prozent30) %>% 
       # Noch den Endpunkt der 30-Prozent-Linie
@@ -132,7 +132,7 @@ aktualisiere_fom <- function(wl_url = stimmbezirke_url) {
                            briefwahl_anz,
                            " von ",
                            briefwahl_max, 
-                           " Briefwahl-Stimmbezirken ausgezählt. Dies beeinflusst das Ergebnis stark.</strong><br/><br/>",
+                           " Briefwahl-Stimmbezirken ausgezählt.</strong><br/><br/>",
                            annotate_str)
     dw_edit_chart(fom_id,intro = beschreibung_str,annotate = annotate_str)
     dw_publish_chart(fom_id)
diff --git a/README.md b/README.md
index 5de0de346c22cba021993fdf49617583b7edb48a..8b5915110aeab48461e986077d0f952fd14750a8 100644
--- a/README.md
+++ b/README.md
@@ -73,6 +73,8 @@ Nutzt die Livedaten von https://wahlen.frankfurt.de - die aktuellen Daten nach O
  -  D2 : Nein-Stimmen
  
 Es gibt 575 Stimmbezirke - also administrative Auszählungs-Einheiten. Fast 200 von diesen "Bezirken" sind die Briefwahl-Auszählungen - sie werden alle in der Messe ausgezählt. Insgesamt gibt es 219 Wahllokale. (vgl. index/opendata-wahllokale.csv)
+
+Eine kleine Falle wurde erst im Lauf des Wahlabends sichtbar: Die Briefwahl-Ergebnisse kommen systematisch später als alle anderen Ergebnisse - da ein Briefwahl-Stimmbezirk aber rechnerisch 0 Wahlberechtigte hat, kann man ohne die Briefwahl-Stimmen kein Quorum berechnen. Deshalb musste die Logik im Lauf des Abends von "% der Wahlberechtigten ausgezählt" auf "% der Wahllokale ausgezählt" umgestellt werden. 
  
 ## Wann gibt es wo Daten?
  
diff --git a/daten/briefwahlauswertung.xlsx b/daten/briefwahlauswertung.xlsx
new file mode 100644
index 0000000000000000000000000000000000000000..33924774974ca65e18da95eeeb542aa89bb5b995
Binary files /dev/null and b/daten/briefwahlauswertung.xlsx differ
diff --git a/daten/endergebnis.xlsx b/daten/endergebnis.xlsx
new file mode 100644
index 0000000000000000000000000000000000000000..4386bd5d3dbfad925403b973eb9fd6195ed29496
Binary files /dev/null and b/daten/endergebnis.xlsx differ
diff --git a/daten/fom_df.rds b/daten/fom_df.rds
new file mode 100644
index 0000000000000000000000000000000000000000..ac2677958409d845ee46d3f046e568b1b34419c9
Binary files /dev/null and b/daten/fom_df.rds differ
diff --git a/daten/wahllokale_final.xlsx b/daten/wahllokale_final.xlsx
new file mode 100644
index 0000000000000000000000000000000000000000..fcb496fc1f3267256026c8a0fab22bdad3654bb0
Binary files /dev/null and b/daten/wahllokale_final.xlsx differ