diff --git a/demo/00Index b/demo/00Index
index 69f3901..117e857 100644
--- a/demo/00Index
+++ b/demo/00Index
@@ -5,4 +5,3 @@
 regional                  Map plot regional frequencies of query expression
 mosaicplot                Visualize frequencies of alternative query terms in relation to other variables
 highcharter-example       Visualize frqequencies of optionally alternative terms over time with interactive HTML and JavaScript elements using the package highcharter as wrapper for Highcharts
-rcharts-highcharts        Visualize term frqequencies over time with interactive HTML and JavaScript elements
diff --git a/demo/rcharts-highcharts.R b/demo/rcharts-highcharts.R
deleted file mode 100644
index 231662b..0000000
--- a/demo/rcharts-highcharts.R
+++ /dev/null
@@ -1,86 +0,0 @@
-library(RKorAPClient)
-library(rCharts)
-
-plotHighchart <- function(query = "Schlumpf",
-                          years = c(2000:2010),
-                          as.alternatives = length(query) > 1,
-                          vc = "textType = /Zeit.*/ & availability!=QAO-NC-LOC:ids & pubDate in",
-                          kco = new("KorAPConnection", verbose=T) ) {
-  palette <- c("#1f77b4", "#ff7f0e", "#2ca02c", "#d62728", "#9467bd", "#8c564b", "#e377c2", "#7f7f7f", "#bcbd22", "#17becf")
-  h1 <- Highcharts$new()
-  df <-
-    frequencyQuery(kco, query, paste(vc, years), as.alternatives=as.alternatives) %>%
-    { if(! as.alternatives) ipm(.) else percent(.) } %>%
-    mutate(year=as.numeric(queryStringToLabel(vc)))
-
-  ylabel = if(as.alternatives) "%" else "ipm"
-  for(q in query) {
-    dat <- df[df$query==q,]
-    h1$series(
-      marker = list(radius = 2),
-      name = q,
-      data = toJSONArray(data.frame(x=dat$year,
-                                    y = if (as.alternatives) dat$f else dat$ipm,
-                                    percentage = dat$f ,
-                                    count = dat$totalResults,
-                                    click=dat$webUIRequestUrl), json = F),
-      type = 'line',
-      color = palette[1+length(h1$params$series)/2],
-      zIndex = 1
-    )
-    h1$series(
-      name = "ci",
-      data = toJSONArray2(dat[,c('year', 'conf.low', 'conf.high')], names = F, json = F),
-      type = 'arearange',
-      fillOpacity = 0.3,
-      lineWidth = 0,
-      marker = list(enabled = F),
-      enableMouseTracking = F,
-      linkedTo= ':previous',
-      color = palette[1+(length(h1$params$series)-1)/2],
-      zIndex = 0
-    )
-  }
-  h1$plotOptions(line = list(cursor = 'pointer', point = list(
-    events = list(click = "#! function() { window.open(this.click, 'korap'); } !#")
-  )))
-  h1$set(
-    credits = list(text="KorAP R Client Pakckage", href="//github.com/KorAP/RKorAPClient/"),
-    zoomType = "Y",
-#    xAxis = list(title = list(text="year")),
-    yAxis = if (as.alternatives)
-      list(ceiling=100, floor=0, labels = list(format="{value}\U2009%"))
-    else
-      list(title = list(text=ylabel), floor=0),
-    tooltip = list(
-      formatter = paste0("#! function (tooltip) {
-        var str = tooltip.defaultFormatter.call(this, tooltip);
-        if(Array.isArray(str))  {
-          str = str.join('');
-        }
-        for (var i = 0; i < this.points.length; i++) {
-            str = str.replace(/([0-9.,]+.?)", ylabel, "/, this.points[i].point.count+' ($1@)');
-        }
-        return str.replace(/@/g, '", ylabel, "')
-      } !#"),
-      crosshairs =  T,
-      valueDecimals = 2,
-      shared = T,
-      valueSuffix = paste0('\U2009', ylabel)
-    )
-  )
-  print(h1)
-  h1
-}
-
-saveHPlot <- function(h, fname, local = F) {
-  capture.output(h$show('inline', include_assets = TRUE, cdn = TRUE)) %>%
-  paste(collapse = '\n') %>%
-  { if (local)  gsub("=//", "=https://", .) else . } %>%
-  cat(file=fname)
-}
-
-#h1 <-plotHighchart(c("macht []{0,3} Sinn", "ergibt []{0,3} Sinn"), c(1980:2018))
-h1 <- plotHighchart(c("Leser | Lesern | Lesers", 'Leserin | Leserinnen', 'LeserIn | LeserInnen', '"Leser[_\\*]in.*"'), c(1985:2018))
-#plotHighchart(c("Tollpatsch", "Tolpatsch"), c(1991:2018))
-
