diff --git a/demo/alternativesOverTime.R b/demo/alternativesOverTime.R
index 7866121..443fbe4 100755
--- a/demo/alternativesOverTime.R
+++ b/demo/alternativesOverTime.R
@@ -4,26 +4,25 @@
 #
 library(RKorAPClient)
 library(ggplot2)
-library(reshape2)
+library(tidyr)
+library(dplyr)
 library(plotly)
 library(htmlwidgets)
 
 alternativesOverTime <- function(alternatives, years, kco = new("KorAPConnection", verbose=TRUE)) {
-  df = data.frame(year=years)
   vc = "textType = /Zeit.*/ & pubDate in"
-  urls <- data.frame()
-  for (v in alternatives) {
-    df[v] <- sapply(df$year, function(y) {
-        kqo <- corpusQuery(kco, query=v, vc=paste(vc, y))
-        urls <<- rbind(urls, data.frame(Variant=v, year=y, url=kqo@webUIRequestUrl))
-        kqo@totalResults
-    })
-  }
-  df$total <- apply(df[,alternatives], 1, sum)
-  df <- merge(melt(df, measure.vars = alternatives, value.name = "afreq", variable.name = "Variant"),
-              urls, by=c("Variant", "year"))
-  df$ci <- t(sapply(Map(prop.test, df$afreq, df$total), "[[","conf.int"))
-  df$share <- df$afreq / df$total
+  df <- data.frame(matrix(ncol = length(alternatives), nrow = length(years))) %>%
+    setNames(alternatives) %>%
+    mutate(year = years) %>%
+    pivot_longer(cols = alternatives) %>%
+    rowwise %>% mutate(value = corpusQuery(kco, query=name, vc=paste(vc, year))@totalResults) %>%
+    pivot_wider(id_cols= year, names_from = name) %>%
+    mutate(total = rowSums(.[alternatives])) %>%
+    pivot_longer(cols = alternatives) %>%
+    mutate(share = value / total) %>%
+    rowwise %>% mutate(url =  corpusQuery(kco, query=name, vc=paste(vc, year))@webUIRequestUrl) %>%
+    rename(Variant = name)
+  df$ci <- t(sapply(Map(prop.test, df$value, df$total), "[[","conf.int"))
   g <- ggplot(data = df, mapping = aes(x = year, y = share, color=Variant, fill=Variant)) +
     geom_ribbon(aes(ymin=ci[, 1], ymax=ci[, 2], color=Variant, fill=Variant), alpha=.3, linetype=0) +
     geom_line() +
@@ -36,7 +35,7 @@
   for (i in 1:length(alternatives)) {
     vdata <- df[df$Variant==alternatives[i],]
     pp$x$data[[2+i]]$customdata <- vdata$url
-    pp$x$data[[2+i]]$text <- sprintf("%s<br />absolute: %d / %d", pp$x$data[[2+i]]$text, vdata$afreq, vdata$total)
+    pp$x$data[[2+i]]$text <- sprintf("%s<br />absolute: %d / %d", pp$x$data[[2+i]]$text, vdata$value, vdata$total)
   }
   ppp <- onRender(pp, "function(el, x) { el.on('plotly_click', function(d) { var url=d.points[0].customdata; window.open(url, 'korap') })}")
   print(ppp)
diff --git a/demo/regional.R b/demo/regional.R
index 067e3e2..60ea5c7 100755
--- a/demo/regional.R
+++ b/demo/regional.R
@@ -73,7 +73,7 @@
   map$region <- sapply(map$grp, function(grp) regions$region[grp])
   map$url <- sapply(map$grp, function(grp) regions$url[grp])
   regionsPlot <- ggplot(map) +
-    geom_polygon(aes(x=long, y=lat, group=group, fill=ipm, text=region), colour= "black", size=.1) +
+    geom_polygon(aes(x=long, y=lat, group=group, fill=ipm, hack=region), colour= "black", size=.1) +
     theme(axis.line.x = element_blank(),
           axis.line.y = element_blank(),
           panel.grid.major = element_blank(),
