diff --git a/NAMESPACE b/NAMESPACE
index 86db8dc..8a84580 100644
--- a/NAMESPACE
+++ b/NAMESPACE
@@ -12,6 +12,7 @@
 export(group_by)
 export(ipm)
 export(mutate)
+export(percent)
 export(queryStringToLabel)
 export(select)
 export(summarise)
diff --git a/R/misc.R b/R/misc.R
index 26ae123..9327a32 100644
--- a/R/misc.R
+++ b/R/misc.R
@@ -21,6 +21,29 @@
     mutate(ipm = .data$f * 10^6, conf.low = .data$conf.low * 10^6, conf.high = .data$conf.high * 10^6)
 }
 
+#' Convert corpus frequency table of alternatives to percent
+#'
+#' Convenience function for converting frequency tables of alternative variants
+#' (generated with \code{as.alternatives=T}) to percent.
+#'
+#' @param df table returned from \code{\link{frequencyQuery}}
+#'
+#' @return original table with converted columns \code{f}, \code{conf.low} and \code{conf.high}
+#' @export
+#'
+#' @importFrom dplyr .data
+#'
+#' @examples
+#' new("KorAPConnection") %>%
+#'     frequencyQuery(c("Tollpatsch", "Tolpatsch"),
+#'     vc=paste0("pubDate in ", 2000:2002),
+#'     as.alternatives = TRUE) %>%
+#'   percent()
+percent <- function(df) {
+  df %>%
+    mutate(f = .data$f * 10^2, conf.low = .data$conf.low * 10^2, conf.high = .data$conf.high * 10^2)
+}
+
 #' Convert query or vc strings to plot labels
 #'
 #' Converts a vector of query or vc strings to typically appropriate legend labels
diff --git a/demo/00Index b/demo/00Index
index b954748..f16c2dc 100644
--- a/demo/00Index
+++ b/demo/00Index
@@ -4,3 +4,4 @@
 alternativesOverTime      Plot proportion of alternative spellings/variants over time
 regional                  Map plot regional frequencies of query expression
 mosaicplot                Visualize frequencies of alternative query terms in relation to other variables
+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
new file mode 100644
index 0000000..231662b
--- /dev/null
+++ b/demo/rcharts-highcharts.R
@@ -0,0 +1,86 @@
+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))
+
diff --git a/man/percent.Rd b/man/percent.Rd
new file mode 100644
index 0000000..06e2fb3
--- /dev/null
+++ b/man/percent.Rd
@@ -0,0 +1,25 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/misc.R
+\name{percent}
+\alias{percent}
+\title{Convert corpus frequency table of alternatives to percent}
+\usage{
+percent(df)
+}
+\arguments{
+\item{df}{table returned from \code{\link{frequencyQuery}}}
+}
+\value{
+original table with converted columns \code{f}, \code{conf.low} and \code{conf.high}
+}
+\description{
+Convenience function for converting frequency tables of alternative variants
+(generated with \code{as.alternatives=T}) to percent.
+}
+\examples{
+new("KorAPConnection") \%>\%
+    frequencyQuery(c("Tollpatsch", "Tolpatsch"),
+    vc=paste0("pubDate in ", 2000:2002),
+    as.alternatives = TRUE) \%>\%
+  percent()
+}
