♻️💄 simplify KorAPConnection class instantiations to modern syntax

Update all class instantiations from `new("KorAPConnection")` to `KorAPConnection()`.
This is possible with R >= 4.0.

Change-Id: I01131fb32045e084cafbb9e05cd8ba99f8f20f1b
diff --git a/R/KorAPConnection.R b/R/KorAPConnection.R
index 3100cee..0dc1a74 100644
--- a/R/KorAPConnection.R
+++ b/R/KorAPConnection.R
@@ -8,7 +8,7 @@
 #' Class KorAPConnection
 #'
 #' `KorAPConnection` objects represent the connection to a KorAP server.
-#' New `KorAPConnection` objects can be created by `new("KorAPConnection")`.
+#' New `KorAPConnection` objects can be created by `KorAPConnection()`.
 #'
 #' @import R.cache
 #' @import utils
@@ -53,7 +53,7 @@
 #'   in subsequent queries, initialize your KorAP connection with:
 #'
 #'   ```
-#'   kco <- new("KorAPConnection", accessToken="<access token>")
+#'   kco <- KorAPConnection(accessToken="<access token>")
 #'   ```
 #'
 #'   In order to make the API
@@ -65,14 +65,14 @@
 #'   ```
 #'
 #'   This will store it in your keyring using the
-#'   [keyring::keyring-package]. Subsequent new("KorAPConnection") calls will
+#'   [keyring::keyring-package]. Subsequent KorAPConnection() calls will
 #'   then automatically retrieve the token from your keying. To stop using a
 #'   persisted token, call `clearAccessToken(kco)`. Please note that for
 #'   DeReKo, authorized queries will behave differently inside and outside the
 #'   IDS, because of the special license situation. This concerns also cached
 #'   results which do not take into account from where a request was issued. If
 #'   you experience problems or unexpected results, please try `kco <-
-#'   new("KorAPConnection", cache=FALSE)` or use
+#'   KorAPConnection(cache=FALSE)` or use
 #'   [clearCache()] to clear the cache completely.
 #'
 #'   An alternative to using an access token is to use a browser-based oauth2 workflow
@@ -94,14 +94,14 @@
 #' @examples
 #' \dontrun{
 #'
-#' kcon <- new("KorAPConnection", verbose = TRUE)
+#' kcon <- KorAPConnection(verbose = TRUE)
 #' kq <- corpusQuery(kcon, "Ameisenplage")
 #' kq <- fetchAll(kq)
 #' }
 #'
 #' \dontrun{
 #'
-#' kcon <- new("KorAPConnection", verbose = TRUE, accessToken="e739u6eOzkwADQPdVChxFg")
+#' kcon <- KorAPConnection(verbose = TRUE, accessToken="e739u6eOzkwADQPdVChxFg")
 #' kq <- corpusQuery(kcon, "Ameisenplage", metadataOnly=FALSE)
 #' kq <- fetchAll(kq)
 #' kq@collectedMatches$snippet
@@ -169,10 +169,10 @@
 #'
 #' @examples
 #' \dontrun{
-#' kco <- new("KorAPConnection", accessToken="e739u6eOzkwADQPdVChxFg")
+#' kco <- KorAPConnection(accessToken="e739u6eOzkwADQPdVChxFg")
 #' persistAccessToken(kco)
 #'
-#' kco <- new("KorAPConnection") %>% auth(app_id="<my application id>") %>% persistAccessToken()
+#' kco <- KorAPConnection() %>% auth(app_id="<my application id>") %>% persistAccessToken()
 #' }
 #'
 #' @seealso [clearAccessToken()], [auth()]
@@ -202,7 +202,7 @@
 #' @examples
 #'
 #' \dontrun{
-#' kco <- new("KorAPConnection")
+#' kco <- KorAPConnection()
 #' kco <- clearAccessToken(kco)
 #' }
 #'
@@ -242,7 +242,7 @@
 #' @importFrom httr2 oauth_client oauth_flow_auth_code
 #' @examples
 #' \dontrun{
-#' kco <- new("KorAPConnection", verbose = TRUE) %>% auth()
+#' kco <- KorAPConnection(verbose = TRUE) %>% auth()
 #' df <- collocationAnalysis(kco, "focus([marmot/p=ADJA] {Ameisenplage})",
 #'   leftContextSize=1, rightContextSize=0)
 #' }
@@ -467,9 +467,9 @@
 
 ##' Funtion KorAPConnection()
 ##'
-##' Wrappper function for new("KorAPConnection")
+##' Wrappper function for KorAPConnection()
 ##'
 ##' @rdname KorAPConnection-constructor
 ##' @name KorAPConnection-constructor
 ##' @export
-## XKorAPConnection <- function(...) new("KorAPConnection", ...)
+## XKorAPConnection <- function(...) KorAPConnection(...)
diff --git a/R/KorAPCorpusStats.R b/R/KorAPCorpusStats.R
index 820a248..8639a53 100644
--- a/R/KorAPCorpusStats.R
+++ b/R/KorAPCorpusStats.R
@@ -22,7 +22,7 @@
 setGeneric("corpusStats", function(kco, ...)  standardGeneric("corpusStats") )
 
 #' Fetch information about a (virtual) corpus
-#' @param kco [KorAPConnection()] object (obtained e.g. from `new("KorAPConnection")`
+#' @param kco [KorAPConnection()] object (obtained e.g. from `KorAPConnection()`
 #' @param vc string describing the virtual corpus. An empty string (default) means the whole corpus, as far as it is license-wise accessible.
 #' @param verbose logical. If `TRUE`, additional diagnostics are printed.
 #' @param as.df return result as data frame instead of as S4 object?
@@ -33,7 +33,7 @@
 #'
 #' \dontrun{
 #'
-#' kco <- new("KorAPConnection")
+#' kco <- KorAPConnection()
 #' corpusStats(kco, "pubDate in 2017 & textType=/Zeitung.*/")
 #' }
 #'
diff --git a/R/KorAPQuery.R b/R/KorAPQuery.R
index 296efa5..b79b585 100644
--- a/R/KorAPQuery.R
+++ b/R/KorAPQuery.R
@@ -83,7 +83,7 @@
 #' @importFrom purrr pmap
 #' @importFrom dplyr bind_rows
 #'
-#' @param kco [KorAPConnection()] object (obtained e.g. from `new("KorAPConnection")`
+#' @param kco [KorAPConnection()] object (obtained e.g. from `KorAPConnection()`
 #' @param query string that contains the corpus query. The query language depends on the `ql` parameter. Either `query` must be provided or `KorAPUrl`.
 #' @param vc string describing the virtual corpus in which the query should be performed. An empty string (default) means the whole corpus, as far as it is license-wise accessible.
 #' @param KorAPUrl instead of providing the query and vc string parameters, you can also simply copy a KorAP query URL from your browser and use it here (and in `KorAPConnection`) to provide all necessary information for the query.
@@ -113,7 +113,7 @@
 #' \dontrun{
 #'
 #' # Fetch metadata of every query hit for "Ameisenplage" and show a summary
-#' new("KorAPConnection") %>% corpusQuery("Ameisenplage") %>% fetchAll()
+#' KorAPConnection() %>% corpusQuery("Ameisenplage") %>% fetchAll()
 #' }
 #'
 #' \dontrun{
@@ -121,7 +121,7 @@
 #' # Use the copy of a KorAP-web-frontend URL for an API query of "Ameise" in a virtual corpus
 #' # and show the number of query hits (but don't fetch them).
 #'
-#' new("KorAPConnection", verbose = TRUE) %>%
+#' KorAPConnection(verbose = TRUE) %>%
 #'  corpusQuery(KorAPUrl =
 #'    "https://korap.ids-mannheim.de/?q=Ameise&cq=pubDate+since+2017&ql=poliqarp")
 #' }
@@ -129,7 +129,7 @@
 #' \dontrun{
 #'
 #' # Plot the time/frequency curve of "Ameisenplage"
-#' new("KorAPConnection", verbose=TRUE) %>%
+#' KorAPConnection(verbose=TRUE) %>%
 #'   { . ->> kco } %>%
 #'   corpusQuery("Ameisenplage") %>%
 #'   fetchAll() %>%
@@ -271,7 +271,7 @@
 #' @examples
 #' \dontrun{
 #'
-#' q <- new("KorAPConnection") %>% corpusQuery("Ameisenplage") %>% fetchNext()
+#' q <- KorAPConnection() %>% corpusQuery("Ameisenplage") %>% fetchNext()
 #' q@collectedMatches
 #' }
 #'
@@ -394,7 +394,7 @@
 #' @examples
 #' \dontrun{
 #'
-#' q <- new("KorAPConnection") %>% corpusQuery("Ameisenplage") %>% fetchAll()
+#' q <- KorAPConnection() %>% corpusQuery("Ameisenplage") %>% fetchAll()
 #' q@collectedMatches
 #' }
 #'
@@ -410,7 +410,7 @@
 #' @examples
 #' \dontrun{
 #'
-#' q <- new("KorAPConnection") %>% corpusQuery("Ameisenplage") %>% fetchRest()
+#' q <- KorAPConnection() %>% corpusQuery("Ameisenplage") %>% fetchRest()
 #' q@collectedMatches
 #' }
 #'
@@ -433,11 +433,11 @@
 #' @examples
 #' \dontrun{
 #'
-#' new("KorAPConnection", verbose = TRUE) %>%
+#' KorAPConnection(verbose = TRUE) %>%
 #'   frequencyQuery(c("Mücke", "Schnake"), paste0("pubDate in ", 2000:2003))
 #' }
 #'
-#' @param kco [KorAPConnection()] object (obtained e.g. from `new("KorAPConnection")`
+#' @param kco [KorAPConnection()] object (obtained e.g. from `KorAPConnection()`
 #' @param query string that contains the corpus query. The query language depends on the `ql` parameter. Either `query` must be provided or `KorAPUrl`.
 #' @param conf.level confidence level of the returned confidence interval (passed through [ci()]  to [prop.test()]).
 #' @param as.alternatives LOGICAL that specifies if the query terms should be treated as alternatives. If `as.alternatives` is TRUE, the sum over all query hits, instead of the respective vc token sizes is used as total for the calculation of relative frequencies.
diff --git a/R/association-scores.R b/R/association-scores.R
index 8c79295..741e69f 100644
--- a/R/association-scores.R
+++ b/R/association-scores.R
@@ -26,7 +26,7 @@
 #' @examples
 #' \dontrun{
 #'
-#' new("KorAPConnection", verbose = TRUE) %>%
+#' KorAPConnection(verbose = TRUE) %>%
 #' collocationScoreQuery("Perlen", c("verziertes", "Säue"),
 #'   scoreFunctions = append(defaultAssociationScoreFunctions(),
 #'      list(localMI = function(O1, O2, O, N, E, window_size) {
diff --git a/R/ci.R b/R/ci.R
index 19f8615..fcb05e8 100644
--- a/R/ci.R
+++ b/R/ci.R
@@ -25,7 +25,7 @@
 #' \dontrun{
 #'
 #' library(ggplot2)
-#' kco <- new("KorAPConnection", verbose=TRUE)
+#' kco <- KorAPConnection(verbose=TRUE)
 #' expand_grid(year=2015:2018, alternatives=c("Hate Speech", "Hatespeech")) %>%
 #'   bind_cols(corpusQuery(kco, .$alternatives, sprintf("pubDate in %d", .$year))) %>%
 #'   mutate(total=corpusStats(kco, vc=vc)$tokens) %>%
diff --git a/R/collocationAnalysis.R b/R/collocationAnalysis.R
index b844556..378fd0a 100644
--- a/R/collocationAnalysis.R
+++ b/R/collocationAnalysis.R
@@ -53,7 +53,7 @@
 #' \dontrun{
 #'
 #'  # Find top collocates of "Packung" inside and outside the sports domain.
-#'  new("KorAPConnection", verbose = TRUE) %>%
+#'  KorAPConnection(verbose = TRUE) %>%
 #'   collocationAnalysis("Packung", vc=c("textClass=sport", "textClass!=sport"),
 #'                       leftContextSize=1, rightContextSize=1, topCollocatesLimit=20) %>%
 #'   dplyr::filter(logDice >= 5)
@@ -63,7 +63,7 @@
 #'
 #' # Identify the most prominent light verb construction with "in ... setzen".
 #' # Note that, currently, the use of focus function disallows exactFrequencies.
-#' new("KorAPConnection", verbose = TRUE) %>%
+#' KorAPConnection(verbose = TRUE) %>%
 #'   collocationAnalysis("focus(in [tt/p=NN] {[tt/l=setzen]})",
 #'     leftContextSize=1, rightContextSize=0, exactFrequencies=FALSE, topCollocatesLimit=20)
 #' }
diff --git a/R/collocationScoreQuery.R b/R/collocationScoreQuery.R
index f9c56fc..6ac1a98 100644
--- a/R/collocationScoreQuery.R
+++ b/R/collocationScoreQuery.R
@@ -12,7 +12,7 @@
 #' Computes various collocation association scores
 #' based on [frequencyQuery()]s for a target word and a collocate.
 #'
-#' @param kco [KorAPConnection()] object (obtained e.g. from `new("KorAPConnection")`
+#' @param kco [KorAPConnection()] object (obtained e.g. from `KorAPConnection()`
 #' @param node               target word
 #' @param collocate          collocate of target word
 #' @param vc                 string describing the virtual corpus in which the query should be performed. An empty string (default) means the whole corpus, as far as it is license-wise accessible.
@@ -33,13 +33,13 @@
 #' @examples
 #' \dontrun{
 #'
-#' new("KorAPConnection", verbose = TRUE) %>%
+#' KorAPConnection(verbose = TRUE) %>%
 #'   collocationScoreQuery("Grund", "triftiger")
 #' }
 #'
 #' \dontrun{
 #'
-#' new("KorAPConnection", verbose = TRUE) %>%
+#' KorAPConnection(verbose = TRUE) %>%
 #' collocationScoreQuery("Grund", c("guter", "triftiger"),
 #'    scoreFunctions = list(localMI = function(O1, O2, O, N, E, window_size) { O * log2(O/E) }) )
 #' }
@@ -48,7 +48,7 @@
 #'
 #' library(highcharter)
 #' library(tidyr)
-#' new("KorAPConnection", verbose = TRUE) %>%
+#' KorAPConnection(verbose = TRUE) %>%
 #'   collocationScoreQuery("Team", "agil", vc = paste("pubDate in", c(2014:2018)),
 #'                         lemmatizeNodeQuery = TRUE, lemmatizeCollocateQuery = TRUE) %>%
 #'                          pivot_longer(14:last_col(), names_to = "measure", values_to = "score") %>%
diff --git a/R/hc_add_onclick_korap_search.R b/R/hc_add_onclick_korap_search.R
index 710c1cb..7826ec1 100644
--- a/R/hc_add_onclick_korap_search.R
+++ b/R/hc_add_onclick_korap_search.R
@@ -20,7 +20,7 @@
 #' library(highcharter)
 #' library(tidyr)
 #'
-#' new("KorAPConnection", verbose = TRUE) %>%
+#' KorAPConnection(verbose = TRUE) %>%
 #'   collocationScoreQuery("Team", "agil", vc = paste("pubDate in", c(2014:2018)),
 #'                         lemmatizeNodeQuery = TRUE, lemmatizeCollocateQuery = TRUE) %>%
 #'                          pivot_longer(c("O", "E")) %>%
diff --git a/R/hc_freq_by_year_ci.R b/R/hc_freq_by_year_ci.R
index f61b87e..a36154f 100644
--- a/R/hc_freq_by_year_ci.R
+++ b/R/hc_freq_by_year_ci.R
@@ -25,14 +25,14 @@
 #'
 #' year <- c(1990:2018)
 #' alternatives <- c("macht []{0,3} Sinn", "ergibt []{0,3} Sinn")
-#' new("KorAPConnection", verbose = TRUE) %>%
+#' KorAPConnection(verbose = TRUE) %>%
 #'   frequencyQuery(query = alternatives,
 #'                  vc = paste("textType = /Zeit.*/ & pubDate in", year),
 #'                  as.alternatives = TRUE) %>%
 #'   hc_freq_by_year_ci(as.alternatives = TRUE)
 #'
 #'
-#' kco <- new("KorAPConnection", verbose = TRUE)
+#' kco <- KorAPConnection(verbose = TRUE)
 #' expand_grid(
 #'   condition = c("textDomain = /Wirtschaft.*/", "textDomain != /Wirtschaft.*/"),
 #'   year = (2005:2011)
diff --git a/R/misc.R b/R/misc.R
index 9abbe07..ac70f47 100644
--- a/R/misc.R
+++ b/R/misc.R
@@ -23,7 +23,7 @@
 #' @examples
 #' \dontrun{
 #'
-#' new("KorAPConnection") %>% frequencyQuery("Test", paste0("pubDate in ", 2000:2002)) %>% ipm()
+#' KorAPConnection() %>% frequencyQuery("Test", paste0("pubDate in ", 2000:2002)) %>% ipm()
 #' }
 ipm <- function(df) {
   df %>%
@@ -46,7 +46,7 @@
 #' @examples
 #' \dontrun{
 #'
-#' new("KorAPConnection") %>%
+#' KorAPConnection() %>%
 #'     frequencyQuery(c("Tollpatsch", "Tolpatsch"),
 #'     vc=paste0("pubDate in ", 2000:2002),
 #'     as.alternatives = TRUE) %>%
@@ -113,7 +113,7 @@
 #' @examples
 #' \dontrun{
 #' library(ggplot2)
-#' kco <- new("KorAPConnection", verbose=TRUE)
+#' kco <- KorAPConnection(verbose=TRUE)
 #'
 #' expand_grid(condition = c("textDomain = /Wirtschaft.*/", "textDomain != /Wirtschaft.*/"),
 #'             year = (2005:2011)) %>%
diff --git a/R/textMetadata.R b/R/textMetadata.R
index 2e5372f..a6f00ce 100644
--- a/R/textMetadata.R
+++ b/R/textMetadata.R
@@ -9,7 +9,7 @@
 #' (see [Kustvakt Wiki](https://github.com/KorAP/Kustvakt/wiki/Service:-Metadata-Retrieval)).
 #'
 #'
-#' @param kco [KorAPConnection()] object (obtained e.g. from `new("KorAPConnection")`)
+#' @param kco [KorAPConnection()] object (obtained e.g. from `KorAPConnection()`)
 #' @param textSigle unique text id (concatenation of corpus, document and text ids, separated by `/`, e.g. ) or vector thereof
 #' @param verbose logical. If `TRUE`, additional diagnostics are printed. Defaults to `kco@verbose`.
 #'
@@ -23,7 +23,7 @@
 #'
 #' @examples
 #' \dontrun{
-#' new("KorAPConnection") %>% textMetadata(c("WUD17/A97/08542", "WUD17/B96/57558", "WUD17/A97/08541"))
+#' KorAPConnection() %>% textMetadata(c("WUD17/A97/08542", "WUD17/B96/57558", "WUD17/A97/08541"))
 #' }
 #'
 #' @export
diff --git a/Readme.md b/Readme.md
index 11fad81..f90764d 100644
--- a/Readme.md
+++ b/Readme.md
@@ -21,7 +21,7 @@
 
 ```R
 library(RKorAPClient)
-new("KorAPConnection", verbose=TRUE) %>% corpusQuery("Hello world") %>% fetchAll()
+KorAPConnection(verbose=TRUE) %>% corpusQuery("Hello world") %>% fetchAll()
 ```
 
 ### Frequencies over time and domains using ggplot2
@@ -29,7 +29,7 @@
 ```r
 library(RKorAPClient)
 library(ggplot2)
-kco <- new("KorAPConnection", verbose=TRUE)
+kco <- KorAPConnection(verbose=TRUE)
 expand_grid(condition = c("textDomain = /Wirtschaft.*/", "textDomain != /Wirtschaft.*/"), 
             year = (2002:2018)) %>%
     cbind(frequencyQuery(kco, "[tt/l=Heuschrecke]", paste0(.$condition," & pubDate in ", .$year)))  %>%
@@ -49,7 +49,7 @@
 years = c(1980:2010)
 as.alternatives = TRUE
 vc = "textType = /Zeit.*/ & pubDate in"
-new("KorAPConnection", verbose=T) %>%
+KorAPConnection(verbose=T) %>%
   frequencyQuery(query, paste(vc, years), as.alternatives = as.alternatives) %>%
   hc_freq_by_year_ci(as.alternatives)
 ```
@@ -62,7 +62,7 @@
 ```r
 library(RKorAPClient)
 library(knitr)
-new("KorAPConnection", verbose = TRUE) %>% auth() %>%
+KorAPConnection(verbose = TRUE) %>% auth() %>%
   collocationAnalysis(
     "focus(in [tt/p=NN] {[tt/l=setzen]})",
     leftContextSize = 1,
@@ -101,7 +101,7 @@
 Authorize your RKorAPClient application via the usual OAuth browser flow *using the default application id* and the `auth` method:
 
 ```R
-kco <- new("KorAPConnection") %>% auth()
+kco <- KorAPConnection() %>% auth()
 ```
 
 #### 2. The old way: Authorize your RKorAPClient application manually
@@ -116,7 +116,7 @@
 1. In R/RStudio, paste the token into your KorAPConnection initialization, overwriting `<access token>` in the following example:
 
    ```R
-   kco <- new("KorAPConnection", accessToken="<access token>")
+   kco <- KorAPConnection(accessToken="<access token>")
    ```
 
 The whole process is shown in this video:
@@ -131,7 +131,7 @@
 2. Click on the copy symbol ⎘ behind the ID of your client application.
 3. Paste your clipboard content overwriting `<application ID>` in the following example code:
    ```R
-   kco <- new("KorAPConnection") %>% auth(app_id = "<application ID>")
+   kco <- KorAPConnection() %>% auth(app_id = "<application ID>")
    ```
 
 #### Storing and testing your authorized access
@@ -144,8 +144,8 @@
 persistAccessToken(kco)
 ```
 
-Afterwards a simple `kco <- new("KorAPConnection")` will retrieve the stored token. 
-Piping the result through the `auth()` function `kco <- new("KorAPConnection") |> auth()` works and does nothing, in this case.
+Afterwards a simple `kco <- KorAPConnection()` will retrieve the stored token. 
+Piping the result through the `auth()` function `kco <- KorAPConnection() |> auth()` works and does nothing, in this case.
 
 To use the access token for simple corpus queries, i.e. to make `corpusQuery` return KWIC snippets, the `metadataOnly` parameter must be set to `FALSE`, for example:
 
@@ -248,7 +248,7 @@
 
 ### Accessed API Services
 
-By using RKorAPClient you agree to the respective terms of use of the accessed KorAP API services which will be printed upon opening a connection (`new("KorAPConnection", ...`).
+By using RKorAPClient you agree to the respective terms of use of the accessed KorAP API services which will be printed upon opening a connection (`KorAPConnection(...`).
 
 ## Contributions
 
diff --git a/demo/Rmd/ca.Rmd b/demo/Rmd/ca.Rmd
index a4016a5..eb9ad8c 100644
--- a/demo/Rmd/ca.Rmd
+++ b/demo/Rmd/ca.Rmd
@@ -13,7 +13,7 @@
 library(kableExtra)
 library(DT)
 library(tidyverse)
-kco <- new("KorAPConnection", verbose=T)
+kco <- KorAPConnection(verbose=T)
 if (!exists('ca')) {
 ca <- kco %>%
   collocationAnalysis(
diff --git a/demo/adjectiveCollocates.R b/demo/adjectiveCollocates.R
index 3d69eaa..346199b 100644
--- a/demo/adjectiveCollocates.R
+++ b/demo/adjectiveCollocates.R
@@ -2,7 +2,7 @@
 library(kableExtra)
 
 
-new("KorAPConnection", verbose = TRUE) %>%
+KorAPConnection(verbose = TRUE) %>%
   auth() %>%
   collocationAnalysis("focus([marmot/p=ADJA] {Gendern})", leftContextSize=1, rightContextSize=0) %>%
   mutate(collocate = paste0('<a href="', webUIRequestUrl, '">', collocate, '</a>')) %>%
diff --git a/demo/alternativesOverTime.R b/demo/alternativesOverTime.R
index 07019bd..1f70feb 100755
--- a/demo/alternativesOverTime.R
+++ b/demo/alternativesOverTime.R
@@ -5,7 +5,7 @@
 library(RKorAPClient)
 library(ggplot2)
 
-alternativesOverTime <- function(alternatives, years, kco = new("KorAPConnection", verbose=TRUE)) {
+alternativesOverTime <- function(alternatives, years, kco = KorAPConnection(verbose=TRUE)) {
   df <- expand_grid(Variant = alternatives, year = years) %>%
     cbind(frequencyQuery(kco, .$Variant, sprintf("textType = /Zeit.*/ & pubDate in %d", .$year), as.alternatives=TRUE)) %>%
     rename(share=f)
diff --git a/demo/collocation_score_by_country.R b/demo/collocation_score_by_country.R
index 9d6dc69..ccb2f51 100644
--- a/demo/collocation_score_by_country.R
+++ b/demo/collocation_score_by_country.R
@@ -9,7 +9,7 @@
 df <- expand_grid(node = NODE, collocate = COLLOCATES, country = COUNTRIES) %>%
   mutate(vc = sprintf(VC, country))
 
-g <- new("KorAPConnection", verbose=TRUE) %>%
+g <- KorAPConnection(verbose=TRUE) %>%
   collocationScoreQuery(df$node, df$collocate, df$vc, smoothingConstant = 0) %>%
   bind_cols(df %>% select(country)) %>%
   ggplot(aes(x = country, y = logDice, label = sprintf("(%d)", O), fill = collocate))  +
diff --git a/demo/conditionsOverTime.R b/demo/conditionsOverTime.R
index ccd5592..4b96e3d 100644
--- a/demo/conditionsOverTime.R
+++ b/demo/conditionsOverTime.R
@@ -7,7 +7,7 @@
 library(RKorAPClient)
 library(ggplot2)
 
-conditionsOverTime <- function(query, conditions, years, kco = new("KorAPConnection", verbose = TRUE)) {
+conditionsOverTime <- function(query, conditions, years, kco = KorAPConnection(verbose = TRUE)) {
   g <- expand_grid(condition = conditions, year = years) %>%
     cbind(frequencyQuery(kco, query, sprintf("%s & pubDate in %d", .$condition, .$year))) %>%
     ipm() %>%
diff --git a/demo/displayKwics.R b/demo/displayKwics.R
index cab5807..edb6185 100644
--- a/demo/displayKwics.R
+++ b/demo/displayKwics.R
@@ -4,7 +4,7 @@
 
 query = 'V\u00F6ner' # "Portable packages must use only ASCII characters in their demos."
 
-new("KorAPConnection", verbose = TRUE) %>%
+KorAPConnection(verbose = TRUE) %>%
   auth() %>%
   corpusQuery(query, fields = c("textSigle", "pubDate", "corpusTitle", "snippet"),
               metadataOnly = FALSE) %>%
diff --git a/demo/frequenciesOverDomains.R b/demo/frequenciesOverDomains.R
index 6607893..8da5cc8 100755
--- a/demo/frequenciesOverDomains.R
+++ b/demo/frequenciesOverDomains.R
@@ -5,7 +5,7 @@
 library(RKorAPClient)
 library(ggplot2)
 
-freqPerDomain <- function(query, con = new("KorAPConnection", verbose = TRUE)) {
+freqPerDomain <- function(query, con = KorAPConnection(verbose = TRUE)) {
   g <- corpusQuery(con, query = query, vc="") %>%
     fetchAll() %>%
     slot("collectedMatches") %>%
diff --git a/demo/frequenciesOverTime.R b/demo/frequenciesOverTime.R
index aadd0d2..3772b67 100644
--- a/demo/frequenciesOverTime.R
+++ b/demo/frequenciesOverTime.R
@@ -5,7 +5,7 @@
 library(RKorAPClient)
 library(ggplot2)
 
-freqPerYear <- function(query, kco = new("KorAPConnection", verbose = TRUE)) {
+freqPerYear <- function(query, kco = KorAPConnection(verbose = TRUE)) {
   g <- data.frame(year = 2000:2018) %>%
     cbind(frequencyQuery(kco, query, sprintf("pubDate in %d", .$year))) %>%
     { . ->> df } %>%
diff --git a/demo/frequency_by_country_ggplot.R b/demo/frequency_by_country_ggplot.R
index 514e8cf..f37b437 100644
--- a/demo/frequency_by_country_ggplot.R
+++ b/demo/frequency_by_country_ggplot.R
@@ -6,7 +6,7 @@
 
 vcs <- sprintf("textType=/Zeit.*/ & pubPlaceKey=%s", countries) # limit virtual corpus to newspapers and magazines
 
-g <- new("KorAPConnection", verbose=TRUE) %>%
+g <- KorAPConnection(verbose=TRUE) %>%
   frequencyQuery(query, vc=vcs) %>%
   ipm() %>%
   mutate(Land = countries) %>%
diff --git a/demo/frequency_by_country_highcharts.R b/demo/frequency_by_country_highcharts.R
index c04ea7d..5529e13 100644
--- a/demo/frequency_by_country_highcharts.R
+++ b/demo/frequency_by_country_highcharts.R
@@ -8,7 +8,7 @@
 VCS <- sprintf("textType=/Zeit.*/ & pubPlaceKey=%s", COUNTRIES) # limit virtual corpus to newspapers and magazines
 
 
-df <- new("KorAPConnection", verbose=TRUE) %>%
+df <- KorAPConnection(verbose=TRUE) %>%
   frequencyQuery(QUERIES, vc=VCS) %>%
   ipm() %>%
   mutate(country = rep(COUNTRIES, length(QUERIES)))
diff --git a/demo/highcharter-example.R b/demo/highcharter-example.R
index b6167f7..2661ec2 100644
--- a/demo/highcharter-example.R
+++ b/demo/highcharter-example.R
@@ -5,7 +5,7 @@
                           years = c(2000:2010),
                           as.alternatives = length(query) > 1,
                           vc = "textType = /Zeit.*/ & availability!=QAO-NC-LOC:ids & pubDate in",
-                          kco = new("KorAPConnection", verbose=TRUE) ) {
+                          kco = KorAPConnection(verbose=TRUE) ) {
   hc <-
     frequencyQuery(kco, query, paste(vc, years), as.alternatives=as.alternatives) %>%
     hc_freq_by_year_ci(as.alternatives)
diff --git a/demo/light-verb-construction-ca.R b/demo/light-verb-construction-ca.R
index fa8093f..e902f16 100644
--- a/demo/light-verb-construction-ca.R
+++ b/demo/light-verb-construction-ca.R
@@ -9,7 +9,7 @@
 
 cat(file=mdFile, sprintf("---\ntitle: LVC analysis of %s\n---\n\n", lvLemma))
 
-new("KorAPConnection", verbose = TRUE) %>%
+KorAPConnection(verbose = TRUE) %>%
   collocationAnalysis(
     sprintf("focus(in [tt/p=NN] {[tt/l=%s]})", lvLemma),
     leftContextSize = 1,
diff --git a/demo/mosaicplot.R b/demo/mosaicplot.R
index d8ea3b7..8c50351 100644
--- a/demo/mosaicplot.R
+++ b/demo/mosaicplot.R
@@ -8,7 +8,7 @@
 library(tibble)
 library(dplyr)
 
-mosaicplot <- function(query, vc, kco = new("KorAPConnection", verbose = TRUE)) {
+mosaicplot <- function(query, vc, kco = KorAPConnection(verbose = TRUE)) {
   frequencyQuery(
     query = query,
     vc = vc,
diff --git a/demo/pluralGenderVariants.R b/demo/pluralGenderVariants.R
index ef9d310..44745de 100644
--- a/demo/pluralGenderVariants.R
+++ b/demo/pluralGenderVariants.R
@@ -49,7 +49,7 @@
                           vc = "referTo ratskorpus-2023-1 & pubDate in",
                           suffixes = c('Innen', '[\\*]innen"', '[_]innen"', ' innen'),
                           prefixes = c('',      '"',            '"',        ''),
-                          kco = new("KorAPConnection", verbose=TRUE) %>% auth()) {
+                          kco = KorAPConnection(verbose=TRUE) %>% auth()) {
   hc <-
     frequencyQuery(kco, paste0(prefixes, word, suffixes), paste(vc, years), as.alternatives=as.alternatives) %>%
     unravelPunctuationGenderCases(kco = kco) %>%
diff --git a/demo/recursiveCA.R b/demo/recursiveCA.R
index ce2be8b..720b00c 100644
--- a/demo/recursiveCA.R
+++ b/demo/recursiveCA.R
@@ -6,7 +6,7 @@
 nodeWordform <- 'aufmerksam'
 mdFile <- tempfile(nodeWordform, fileext = ".md")
 
-new("KorAPConnection", verbose = TRUE) %>%
+KorAPConnection(verbose = TRUE) %>%
   collocationAnalysis(
     nodeWordform,
     leftContextSize = 2,
diff --git a/demo/regional.R b/demo/regional.R
index e0c3df8..81ddae1 100755
--- a/demo/regional.R
+++ b/demo/regional.R
@@ -39,7 +39,7 @@
 
 map <- fetchMaps(c("DEU_1", "AUT_0", "CHE_0", "LUX_0", "BEL_3", "ITA_1", "LIE_0"), c(0, 0, 0, 0, 34, 17, 0))
 
-geoDistrib <- function(query, kco = new("KorAPConnection", verbose=TRUE)) {
+geoDistrib <- function(query, kco = KorAPConnection(verbose=TRUE)) {
   regions <- readRDS("demo/data/regions.rds")
   regions$freq <- NA
   regions$url <- NA
diff --git a/demo/relativeTextpositionBoxplot.R b/demo/relativeTextpositionBoxplot.R
index 02823da..6bb71a1 100644
--- a/demo/relativeTextpositionBoxplot.R
+++ b/demo/relativeTextpositionBoxplot.R
@@ -2,7 +2,7 @@
 library(highcharter)
 library(tidyverse)
 
-kco <- new("KorAPConnection", verbose = TRUE)
+kco <- KorAPConnection(verbose = TRUE)
 
 set.seed(7)
 
diff --git a/demo/writtenVsSpoken.R b/demo/writtenVsSpoken.R
index 87b93b4..31391ff 100644
--- a/demo/writtenVsSpoken.R
+++ b/demo/writtenVsSpoken.R
@@ -2,7 +2,7 @@
 # install_github("KorAP/RKorAPClient")
 library(RKorAPClient)
 library(ggplot2)
-g <- new("KorAPConnection", verbose=TRUE) %>%
+g <- KorAPConnection(verbose=TRUE) %>%
   frequencyQuery("sozusagen/i", vc=c("corpusSigle=FOLK", "corpusSigle!=FOLK")) %>%
   ipm() %>%
   mutate(corpus=c("FOLK", "DeReKo")) %>%
diff --git a/inst/shiny-apps/frequency_curves/server.R b/inst/shiny-apps/frequency_curves/server.R
index 2094490..8cc67db 100644
--- a/inst/shiny-apps/frequency_curves/server.R
+++ b/inst/shiny-apps/frequency_curves/server.R
@@ -3,7 +3,7 @@
 } else {
   hc_theme_hcrt()
 }
-rsr <- new("KorAPConnection", verbose = TRUE, accessToken = NULL)
+rsr <- KorAPConnection(verbose = TRUE, accessToken = NULL)
 vc <- "(textType = /Zeit.*/ | textTypeRef=Plenarprotokoll) & availability!=QAO-NC-LOC:ids & creationDate in"
 years <- c(2005:2021)
 from <- 2005
diff --git a/man/KorAPConnection-class.Rd b/man/KorAPConnection-class.Rd
index a7da86f..a29ef7b 100644
--- a/man/KorAPConnection-class.Rd
+++ b/man/KorAPConnection-class.Rd
@@ -61,7 +61,7 @@
 To use authorization based on an access token
 in subsequent queries, initialize your KorAP connection with:
 
-\if{html}{\out{<div class="sourceCode">}}\preformatted{kco <- new("KorAPConnection", accessToken="<access token>")
+\if{html}{\out{<div class="sourceCode">}}\preformatted{kco <- KorAPConnection(accessToken="<access token>")
 }\if{html}{\out{</div>}}
 
 In order to make the API
@@ -72,13 +72,13 @@
 }\if{html}{\out{</div>}}
 
 This will store it in your keyring using the
-\link[keyring:keyring-package]{keyring::keyring-package}. Subsequent new("KorAPConnection") calls will
+\link[keyring:keyring-package]{keyring::keyring-package}. Subsequent KorAPConnection() calls will
 then automatically retrieve the token from your keying. To stop using a
 persisted token, call \code{clearAccessToken(kco)}. Please note that for
 DeReKo, authorized queries will behave differently inside and outside the
 IDS, because of the special license situation. This concerns also cached
 results which do not take into account from where a request was issued. If
-you experience problems or unexpected results, please try \code{kco <- new("KorAPConnection", cache=FALSE)} or use
+you experience problems or unexpected results, please try \code{kco <- KorAPConnection(cache=FALSE)} or use
 \code{\link[=clearCache]{clearCache()}} to clear the cache completely.
 
 An alternative to using an access token is to use a browser-based oauth2 workflow
@@ -116,7 +116,7 @@
 }
 \description{
 \code{KorAPConnection} objects represent the connection to a KorAP server.
-New \code{KorAPConnection} objects can be created by \code{new("KorAPConnection")}.
+New \code{KorAPConnection} objects can be created by \code{KorAPConnection()}.
 }
 \section{Slots}{
 
@@ -151,14 +151,14 @@
 \examples{
 \dontrun{
 
-kcon <- new("KorAPConnection", verbose = TRUE)
+kcon <- KorAPConnection(verbose = TRUE)
 kq <- corpusQuery(kcon, "Ameisenplage")
 kq <- fetchAll(kq)
 }
 
 \dontrun{
 
-kcon <- new("KorAPConnection", verbose = TRUE, accessToken="e739u6eOzkwADQPdVChxFg")
+kcon <- KorAPConnection(verbose = TRUE, accessToken="e739u6eOzkwADQPdVChxFg")
 kq <- corpusQuery(kcon, "Ameisenplage", metadataOnly=FALSE)
 kq <- fetchAll(kq)
 kq@collectedMatches$snippet
diff --git a/man/KorAPQuery-class.Rd b/man/KorAPQuery-class.Rd
index 1e3682d..792919e 100644
--- a/man/KorAPQuery-class.Rd
+++ b/man/KorAPQuery-class.Rd
@@ -117,7 +117,7 @@
 
 \item{collectedMatches}{matches already fetched from the KorAP-API-server}
 
-\item{kco}{\code{\link[=KorAPConnection]{KorAPConnection()}} object (obtained e.g. from \code{new("KorAPConnection")}}
+\item{kco}{\code{\link[=KorAPConnection]{KorAPConnection()}} object (obtained e.g. from \code{KorAPConnection()}}
 
 \item{query}{string that contains the corpus query. The query language depends on the \code{ql} parameter. Either \code{query} must be provided or \code{KorAPUrl}.}
 
@@ -192,7 +192,7 @@
 \dontrun{
 
 # Fetch metadata of every query hit for "Ameisenplage" and show a summary
-new("KorAPConnection") \%>\% corpusQuery("Ameisenplage") \%>\% fetchAll()
+KorAPConnection() \%>\% corpusQuery("Ameisenplage") \%>\% fetchAll()
 }
 
 \dontrun{
@@ -200,7 +200,7 @@
 # Use the copy of a KorAP-web-frontend URL for an API query of "Ameise" in a virtual corpus
 # and show the number of query hits (but don't fetch them).
 
-new("KorAPConnection", verbose = TRUE) \%>\%
+KorAPConnection(verbose = TRUE) \%>\%
  corpusQuery(KorAPUrl =
    "https://korap.ids-mannheim.de/?q=Ameise&cq=pubDate+since+2017&ql=poliqarp")
 }
@@ -208,7 +208,7 @@
 \dontrun{
 
 # Plot the time/frequency curve of "Ameisenplage"
-new("KorAPConnection", verbose=TRUE) \%>\%
+KorAPConnection(verbose=TRUE) \%>\%
   { . ->> kco } \%>\%
   corpusQuery("Ameisenplage") \%>\%
   fetchAll() \%>\%
@@ -225,25 +225,25 @@
 }
 \dontrun{
 
-q <- new("KorAPConnection") \%>\% corpusQuery("Ameisenplage") \%>\% fetchNext()
+q <- KorAPConnection() \%>\% corpusQuery("Ameisenplage") \%>\% fetchNext()
 q@collectedMatches
 }
 
 \dontrun{
 
-q <- new("KorAPConnection") \%>\% corpusQuery("Ameisenplage") \%>\% fetchAll()
+q <- KorAPConnection() \%>\% corpusQuery("Ameisenplage") \%>\% fetchAll()
 q@collectedMatches
 }
 
 \dontrun{
 
-q <- new("KorAPConnection") \%>\% corpusQuery("Ameisenplage") \%>\% fetchRest()
+q <- KorAPConnection() \%>\% corpusQuery("Ameisenplage") \%>\% fetchRest()
 q@collectedMatches
 }
 
 \dontrun{
 
-new("KorAPConnection", verbose = TRUE) \%>\%
+KorAPConnection(verbose = TRUE) \%>\%
   frequencyQuery(c("Mücke", "Schnake"), paste0("pubDate in ", 2000:2003))
 }
 
diff --git a/man/association-score-functions.Rd b/man/association-score-functions.Rd
index d8dfdad..93d3457 100644
--- a/man/association-score-functions.Rd
+++ b/man/association-score-functions.Rd
@@ -59,7 +59,7 @@
 \examples{
 \dontrun{
 
-new("KorAPConnection", verbose = TRUE) \%>\%
+KorAPConnection(verbose = TRUE) \%>\%
 collocationScoreQuery("Perlen", c("verziertes", "Säue"),
   scoreFunctions = append(defaultAssociationScoreFunctions(),
      list(localMI = function(O1, O2, O, N, E, window_size) {
diff --git a/man/auth-KorAPConnection-method.Rd b/man/auth-KorAPConnection-method.Rd
index cf06c01..bdb0993 100644
--- a/man/auth-KorAPConnection-method.Rd
+++ b/man/auth-KorAPConnection-method.Rd
@@ -31,7 +31,7 @@
 }
 \examples{
 \dontrun{
-kco <- new("KorAPConnection", verbose = TRUE) \%>\% auth()
+kco <- KorAPConnection(verbose = TRUE) \%>\% auth()
 df <- collocationAnalysis(kco, "focus([marmot/p=ADJA] {Ameisenplage})",
   leftContextSize=1, rightContextSize=0)
 }
diff --git a/man/clearAccessToken-KorAPConnection-method.Rd b/man/clearAccessToken-KorAPConnection-method.Rd
index 2dfa4b5..a6c665a 100644
--- a/man/clearAccessToken-KorAPConnection-method.Rd
+++ b/man/clearAccessToken-KorAPConnection-method.Rd
@@ -19,7 +19,7 @@
 \examples{
 
 \dontrun{
-kco <- new("KorAPConnection")
+kco <- KorAPConnection()
 kco <- clearAccessToken(kco)
 }
 
diff --git a/man/collocationAnalysis-KorAPConnection-method.Rd b/man/collocationAnalysis-KorAPConnection-method.Rd
index 57b048f..1554ff7 100644
--- a/man/collocationAnalysis-KorAPConnection-method.Rd
+++ b/man/collocationAnalysis-KorAPConnection-method.Rd
@@ -31,7 +31,7 @@
 )
 }
 \arguments{
-\item{kco}{\code{\link[=KorAPConnection]{KorAPConnection()}} object (obtained e.g. from \code{new("KorAPConnection")}}
+\item{kco}{\code{\link[=KorAPConnection]{KorAPConnection()}} object (obtained e.g. from \code{KorAPConnection()}}
 
 \item{node}{target word}
 
@@ -101,7 +101,7 @@
 \dontrun{
 
  # Find top collocates of "Packung" inside and outside the sports domain.
- new("KorAPConnection", verbose = TRUE) \%>\%
+ KorAPConnection(verbose = TRUE) \%>\%
   collocationAnalysis("Packung", vc=c("textClass=sport", "textClass!=sport"),
                       leftContextSize=1, rightContextSize=1, topCollocatesLimit=20) \%>\%
   dplyr::filter(logDice >= 5)
@@ -111,7 +111,7 @@
 
 # Identify the most prominent light verb construction with "in ... setzen".
 # Note that, currently, the use of focus function disallows exactFrequencies.
-new("KorAPConnection", verbose = TRUE) \%>\%
+KorAPConnection(verbose = TRUE) \%>\%
   collocationAnalysis("focus(in [tt/p=NN] {[tt/l=setzen]})",
     leftContextSize=1, rightContextSize=0, exactFrequencies=FALSE, topCollocatesLimit=20)
 }
diff --git a/man/collocationScoreQuery-KorAPConnection-method.Rd b/man/collocationScoreQuery-KorAPConnection-method.Rd
index 5e10b7b..b9e0e94 100644
--- a/man/collocationScoreQuery-KorAPConnection-method.Rd
+++ b/man/collocationScoreQuery-KorAPConnection-method.Rd
@@ -22,7 +22,7 @@
 )
 }
 \arguments{
-\item{kco}{\code{\link[=KorAPConnection]{KorAPConnection()}} object (obtained e.g. from \code{new("KorAPConnection")}}
+\item{kco}{\code{\link[=KorAPConnection]{KorAPConnection()}} object (obtained e.g. from \code{KorAPConnection()}}
 
 \item{node}{target word}
 
@@ -58,13 +58,13 @@
 \examples{
 \dontrun{
 
-new("KorAPConnection", verbose = TRUE) \%>\%
+KorAPConnection(verbose = TRUE) \%>\%
   collocationScoreQuery("Grund", "triftiger")
 }
 
 \dontrun{
 
-new("KorAPConnection", verbose = TRUE) \%>\%
+KorAPConnection(verbose = TRUE) \%>\%
 collocationScoreQuery("Grund", c("guter", "triftiger"),
    scoreFunctions = list(localMI = function(O1, O2, O, N, E, window_size) { O * log2(O/E) }) )
 }
@@ -73,7 +73,7 @@
 
 library(highcharter)
 library(tidyr)
-new("KorAPConnection", verbose = TRUE) \%>\%
+KorAPConnection(verbose = TRUE) \%>\%
   collocationScoreQuery("Team", "agil", vc = paste("pubDate in", c(2014:2018)),
                         lemmatizeNodeQuery = TRUE, lemmatizeCollocateQuery = TRUE) \%>\%
                          pivot_longer(14:last_col(), names_to = "measure", values_to = "score") \%>\%
diff --git a/man/corpusStats-KorAPConnection-method.Rd b/man/corpusStats-KorAPConnection-method.Rd
index 74aca03..055585b 100644
--- a/man/corpusStats-KorAPConnection-method.Rd
+++ b/man/corpusStats-KorAPConnection-method.Rd
@@ -8,7 +8,7 @@
 \S4method{corpusStats}{KorAPConnection}(kco, vc = "", verbose = kco@verbose, as.df = FALSE)
 }
 \arguments{
-\item{kco}{\code{\link[=KorAPConnection]{KorAPConnection()}} object (obtained e.g. from \code{new("KorAPConnection")}}
+\item{kco}{\code{\link[=KorAPConnection]{KorAPConnection()}} object (obtained e.g. from \code{KorAPConnection()}}
 
 \item{vc}{string describing the virtual corpus. An empty string (default) means the whole corpus, as far as it is license-wise accessible.}
 
@@ -26,7 +26,7 @@
 
 \dontrun{
 
-kco <- new("KorAPConnection")
+kco <- KorAPConnection()
 corpusStats(kco, "pubDate in 2017 & textType=/Zeitung.*/")
 }
 
diff --git a/man/hc_add_onclick_korap_search.Rd b/man/hc_add_onclick_korap_search.Rd
index 925c5f7..fcfaa1b 100644
--- a/man/hc_add_onclick_korap_search.Rd
+++ b/man/hc_add_onclick_korap_search.Rd
@@ -26,7 +26,7 @@
 library(highcharter)
 library(tidyr)
 
-new("KorAPConnection", verbose = TRUE) \%>\%
+KorAPConnection(verbose = TRUE) \%>\%
   collocationScoreQuery("Team", "agil", vc = paste("pubDate in", c(2014:2018)),
                         lemmatizeNodeQuery = TRUE, lemmatizeCollocateQuery = TRUE) \%>\%
                          pivot_longer(c("O", "E")) \%>\%
diff --git a/man/hc_freq_by_year_ci.Rd b/man/hc_freq_by_year_ci.Rd
index 2d64e43..1d155c5 100644
--- a/man/hc_freq_by_year_ci.Rd
+++ b/man/hc_freq_by_year_ci.Rd
@@ -38,14 +38,14 @@
 
 year <- c(1990:2018)
 alternatives <- c("macht []{0,3} Sinn", "ergibt []{0,3} Sinn")
-new("KorAPConnection", verbose = TRUE) \%>\%
+KorAPConnection(verbose = TRUE) \%>\%
   frequencyQuery(query = alternatives,
                  vc = paste("textType = /Zeit.*/ & pubDate in", year),
                  as.alternatives = TRUE) \%>\%
   hc_freq_by_year_ci(as.alternatives = TRUE)
 
 
-kco <- new("KorAPConnection", verbose = TRUE)
+kco <- KorAPConnection(verbose = TRUE)
 expand_grid(
   condition = c("textDomain = /Wirtschaft.*/", "textDomain != /Wirtschaft.*/"),
   year = (2005:2011)
diff --git a/man/misc-functions.Rd b/man/misc-functions.Rd
index d9433a3..4c21101 100644
--- a/man/misc-functions.Rd
+++ b/man/misc-functions.Rd
@@ -74,7 +74,7 @@
 \dontrun{
 
 library(ggplot2)
-kco <- new("KorAPConnection", verbose=TRUE)
+kco <- KorAPConnection(verbose=TRUE)
 expand_grid(year=2015:2018, alternatives=c("Hate Speech", "Hatespeech")) \%>\%
   bind_cols(corpusQuery(kco, .$alternatives, sprintf("pubDate in \%d", .$year))) \%>\%
   mutate(total=corpusStats(kco, vc=vc)$tokens) \%>\%
@@ -84,11 +84,11 @@
 }
 \dontrun{
 
-new("KorAPConnection") \%>\% frequencyQuery("Test", paste0("pubDate in ", 2000:2002)) \%>\% ipm()
+KorAPConnection() \%>\% frequencyQuery("Test", paste0("pubDate in ", 2000:2002)) \%>\% ipm()
 }
 \dontrun{
 
-new("KorAPConnection") \%>\%
+KorAPConnection() \%>\%
     frequencyQuery(c("Tollpatsch", "Tolpatsch"),
     vc=paste0("pubDate in ", 2000:2002),
     as.alternatives = TRUE) \%>\%
@@ -100,7 +100,7 @@
 
 \dontrun{
 library(ggplot2)
-kco <- new("KorAPConnection", verbose=TRUE)
+kco <- KorAPConnection(verbose=TRUE)
 
 expand_grid(condition = c("textDomain = /Wirtschaft.*/", "textDomain != /Wirtschaft.*/"),
             year = (2005:2011)) \%>\%
diff --git a/man/persistAccessToken-KorAPConnection-method.Rd b/man/persistAccessToken-KorAPConnection-method.Rd
index b66457e..094acee 100644
--- a/man/persistAccessToken-KorAPConnection-method.Rd
+++ b/man/persistAccessToken-KorAPConnection-method.Rd
@@ -20,10 +20,10 @@
 }
 \examples{
 \dontrun{
-kco <- new("KorAPConnection", accessToken="e739u6eOzkwADQPdVChxFg")
+kco <- KorAPConnection(accessToken="e739u6eOzkwADQPdVChxFg")
 persistAccessToken(kco)
 
-kco <- new("KorAPConnection") \%>\% auth(app_id="<my application id>") \%>\% persistAccessToken()
+kco <- KorAPConnection() \%>\% auth(app_id="<my application id>") \%>\% persistAccessToken()
 }
 
 }
diff --git a/man/textMetadata-KorAPConnection-method.Rd b/man/textMetadata-KorAPConnection-method.Rd
index bc1bbca..170f3e0 100644
--- a/man/textMetadata-KorAPConnection-method.Rd
+++ b/man/textMetadata-KorAPConnection-method.Rd
@@ -8,7 +8,7 @@
 \S4method{textMetadata}{KorAPConnection}(kco, textSigle, verbose = kco@verbose)
 }
 \arguments{
-\item{kco}{\code{\link[=KorAPConnection]{KorAPConnection()}} object (obtained e.g. from \code{new("KorAPConnection")})}
+\item{kco}{\code{\link[=KorAPConnection]{KorAPConnection()}} object (obtained e.g. from \code{KorAPConnection()})}
 
 \item{textSigle}{unique text id (concatenation of corpus, document and text ids, separated by \code{/}, e.g. ) or vector thereof}
 
@@ -24,7 +24,7 @@
 }
 \examples{
 \dontrun{
-new("KorAPConnection") \%>\% textMetadata(c("WUD17/A97/08542", "WUD17/B96/57558", "WUD17/A97/08541"))
+KorAPConnection() \%>\% textMetadata(c("WUD17/A97/08542", "WUD17/B96/57558", "WUD17/A97/08541"))
 }
 
 }
diff --git a/tests/testthat/test-KorAPConnection.R b/tests/testthat/test-KorAPConnection.R
index 0755b08..42e3fd6 100644
--- a/tests/testthat/test-KorAPConnection.R
+++ b/tests/testthat/test-KorAPConnection.R
@@ -1,32 +1,32 @@
 test_that("KorAPConnection fails gracefully on unresolvable host", {
-  expect_message(new("KorAPConnection", accessToken = NULL, apiUrl="http://xxx.asdhsahdsadhvgas.org"), "No internet|Could not resolve")
+  expect_message(KorAPConnection(accessToken = NULL, apiUrl="http://xxx.asdhsahdsadhvgas.org"), "No internet|Could not resolve")
 })
 
 test_that("KorAPConnection fails gracefully on timeout", {
-  expect_message(new("KorAPConnection", apiUrl="http://httpbin.org/delay/3", accessToken = NULL, timeout = 0.2), "No internet|Timeout|json|progress")
+  expect_message(KorAPConnection(apiUrl="http://httpbin.org/delay/3", accessToken = NULL, timeout = 0.2), "No internet|Timeout|json|progress")
 })
 
 test_that("KorAPConnection fails gracefully on Bad Gateway errors", {
-  expect_message(new("KorAPConnection", apiUrl="http://httpbin.org/status/502", accessToken = NULL, timeout = 0.5), "No internet|Timeout|progress|json|502")
+  expect_message(KorAPConnection(apiUrl="http://httpbin.org/status/502", accessToken = NULL, timeout = 0.5), "No internet|Timeout|progress|json|502")
 })
 
 test_that("KorAPConnection is printable", {
-  kco <- new("KorAPConnection", accessToken = NULL, timeout = 1)
+  kco <- KorAPConnection(accessToken = NULL, timeout = 1)
   skip_if(is.null(kco@welcome))
   expect_error(print(kco), NA)
 })
 
 test_that("Opening KorAPConnection prints some message.", {
-  expect_message(new("KorAPConnection", accessToken = NULL), "KorAP")
+  expect_message(KorAPConnection(accessToken = NULL), "KorAP")
 })
 
 test_that("Opening KorAPConnection with invalid apiToken fails gracefully", {
-  expect_message(new("KorAPConnection", accessToken="test token", timeout = 3),
+  expect_message(KorAPConnection(accessToken="test token", timeout = 3),
                "401|Timeout|progress")
 })
 
 test_that("Persisting null apiToken fails", {
-  kco <- new("KorAPConnection", accessToken = NULL, timeout = 3)
+  kco <- KorAPConnection(accessToken = NULL, timeout = 3)
   skip_if_not(is.null(kco@accessToken))
   skip_if(is.null(kco@welcome))
   expect_error(persistAccessToken(kco),
@@ -35,8 +35,8 @@
 })
 
 test_that("Opening KorAPConnection with KorAPUrl works", {
-  kco <- new("KorAPConnection", accessToken = NULL, KorAPUrl="https://korap.ids-mannheim.de", timeout = 1)
+  kco <- KorAPConnection(accessToken = NULL, KorAPUrl="https://korap.ids-mannheim.de", timeout = 1)
   expect_equal(kco@apiUrl, paste0("https://korap.ids-mannheim.de/api/", kco@apiVersion, "/"))
-  kco <- new("KorAPConnection", accessToken = NULL, KorAPUrl="https://korap.ids-mannheim.de/", timeout = 1)
+  kco <- KorAPConnection(accessToken = NULL, KorAPUrl="https://korap.ids-mannheim.de/", timeout = 1)
   expect_equal(kco@apiUrl, paste0("https://korap.ids-mannheim.de/api/", kco@apiVersion, "/"))
 })
diff --git a/tests/testthat/test-collocations.R b/tests/testthat/test-collocations.R
index aa4a771..d0dd761 100644
--- a/tests/testthat/test-collocations.R
+++ b/tests/testthat/test-collocations.R
@@ -1,6 +1,6 @@
 test_that("collocationScoreQuery works", {
   skip_if_offline()
-  kco <- new("KorAPConnection", accessToken = NULL, cache = TRUE, verbose = TRUE)
+  kco <- KorAPConnection(accessToken = NULL, cache = TRUE, verbose = TRUE)
   df <- collocationScoreQuery(kco, "Ameisenplage", "heimgesucht", leftContextSize=0, rightContextSize=1)
   expect_gt(df$logDice, 1)
   expect_equal(df$ll, ll(df$O1, df$O2, df$O, df$N, df$E, df$w))
@@ -13,7 +13,7 @@
 
 test_that("collocationAnalysis works and warns about missing token", {
   skip_if_offline()
-  kco <- new("KorAPConnection",
+  kco <- KorAPConnection(
                accessToken = NULL,
                verbose = TRUE)
     expect_warning(
@@ -32,7 +32,7 @@
 
 test_that("collocationAnalysis on unaccounted strings does not error out", {
   skip_if_offline()
-  kco <- new("KorAPConnection", accessToken = NULL, verbose = TRUE)
+  kco <- KorAPConnection(accessToken = NULL, verbose = TRUE)
   expect_warning(
     df <- collocationAnalysis(kco, "XXXXXXXXAmeisenplage", vc=c("corpusSigle=/WDD17/", "corpusSigle=/WUD17/"), maxRecurse = 2),
     "access token"
diff --git a/tests/testthat/test-corpusQuery.R b/tests/testthat/test-corpusQuery.R
index 223f526..e5289e0 100644
--- a/tests/testthat/test-corpusQuery.R
+++ b/tests/testthat/test-corpusQuery.R
@@ -1,13 +1,13 @@
 test_that("frequencyQuery can be cached", {
   skip_if_offline()
-  kco <- new("KorAPConnection", accessToken = NULL, cache = TRUE, verbose = TRUE)
+  kco <- KorAPConnection(accessToken = NULL, cache = TRUE, verbose = TRUE)
   frequencyQuery(kco, "Ameisenplage", "pubDate since 2014")
   expect_output(frequencyQuery(kco, "Ameisenplage", "pubDate since 2014"), "cached")
 })
 
 test_that("collocationScoreQuery works", {
   skip_if_offline()
-  kco <- new("KorAPConnection",  accessToken = NULL, cache = TRUE, verbose = TRUE)
+  kco <- KorAPConnection(accessToken = NULL, cache = TRUE, verbose = TRUE)
   df <- collocationScoreQuery(kco,"Ameisenplage", "heimgesucht", leftContextSize=0, rightContextSize=1)
   expect_gt(df$logDice, 1)
   expect_equal(df$ll, ll(df$O1, df$O2, df$O, df$N, df$E, df$w))
@@ -19,7 +19,7 @@
 
 test_that("Cache depends on indexRevision (handling also NULL values)", {
   skip_if_offline()
-  kco <- new("KorAPConnection", accessToken = NULL, cache = TRUE, verbose = TRUE)
+  kco <- KorAPConnection(accessToken = NULL, cache = TRUE, verbose = TRUE)
   kco@indexRevision <- NULL
   frequencyQuery(kco, "Ameisenplage", "pubDate since 2014")
   kco@indexRevision <- as.character(Sys.time())
@@ -29,7 +29,7 @@
 
 test_that("corpusQuery returns results", {
   skip_if_offline()
-  q <- new("KorAPConnection", accessToken = NULL) %>%
+  q <- KorAPConnection(accessToken = NULL) %>%
     corpusQuery("Ameisenplage")
   expect_gt(q@totalResults, 0)
 })
@@ -41,7 +41,7 @@
   Encoding(vc)="latin1"
 
   skip_if_offline()
-  q <- new("KorAPConnection", accessToken = NULL) %>%
+  q <- KorAPConnection(accessToken = NULL) %>%
     corpusQuery(query, vc=vc)
   expect_gt(q@totalResults, 0)
 })
@@ -53,14 +53,14 @@
   Encoding(vc)="UTF-8"
 
   skip_if_offline()
-  q <- new("KorAPConnection", accessToken = NULL) %>%
+  q <- KorAPConnection(accessToken = NULL) %>%
     corpusQuery(query, vc=vc)
   expect_gt(q@totalResults, 0)
 })
 
 test_that("fetchAll fetches all results with match positions", {
   skip_if_offline()
-  q <- new("KorAPConnection", accessToken = NULL, verbose = TRUE) %>%
+  q <- KorAPConnection(accessToken = NULL, verbose = TRUE) %>%
     corpusQuery("Ameisenplage", vc = "pubDate since 2014")
   expectedResults <- q@totalResults
   matches <- fetchAll(q)@collectedMatches
@@ -72,7 +72,7 @@
 
 test_that("fetchAll fetches textClass metadatum", {
   skip_if_offline()
-  q <- new("KorAPConnection", accessToken = NULL, verbose = TRUE) %>%
+  q <- KorAPConnection(accessToken = NULL, verbose = TRUE) %>%
     corpusQuery("Ameisenplage", vc = "pubDate since 2014")
   expectedResults <- q@totalResults
   matches <- fetchAll(q)@collectedMatches
@@ -83,13 +83,13 @@
 
 test_that("Uncached query for non-matching search string return 0 results", {
   skip_if_offline()
-  q <- new("KorAPConnection", accessToken = NULL, cache = FALSE) %>% corpusQuery("Xmeisenplagx")
+  q <- KorAPConnection(accessToken = NULL, cache = FALSE) %>% corpusQuery("Xmeisenplagx")
   expect_equal( q@totalResults, 0)
 })
 
 test_that("Empty query result is printable", {
   skip_if_offline()
-  q <- new("KorAPConnection", accessToken = NULL, cache = TRUE, verbose = TRUE) %>%
+  q <- KorAPConnection(accessToken = NULL, cache = TRUE, verbose = TRUE) %>%
     corpusQuery("Xmeisenplagx", vc = "pubDate in 2012") %>%
     fetchNext()
   expect_output(print(q), "Xmeisenplagx.*pubDate in 2012")
@@ -97,7 +97,7 @@
 
 test_that("Non-empty query result is printable", {
   skip_if_offline()
-  q <- new("KorAPConnection", accessToken = NULL, cache = TRUE, verbose = TRUE) %>%
+  q <- KorAPConnection(accessToken = NULL, cache = TRUE, verbose = TRUE) %>%
     corpusQuery("Ameisenplage", "pubDate since 2014", fields=c("textSigle")) %>%
     fetchRest()
   expect_output(print(q), "Ameisenplage.*pubDate since 2014")
@@ -105,7 +105,7 @@
 
 test_that("Query from KorAP URL returns as many results as corresponding direct query", {
   skip_if_offline()
-  kco <- new("KorAPConnection", accessToken = NULL)
+  kco <- KorAPConnection(accessToken = NULL)
   r1 <- corpusQuery(kco, KorAPUrl = "https://korap.ids-mannheim.de/?q=Ameisenplage&cq=pubDate+since+2014&ql=poliqarp")@totalResults
   r2 <- corpusQuery(kco, "Ameisenplage", "pubDate since 2014")@totalResults
   expect_equal(r1, r2)
@@ -113,13 +113,13 @@
 
 test_that("Typo in query causes error", {
   skip_if_offline()
-  kco <- new("KorAPConnection", accessToken = NULL, verbose = TRUE)
+  kco <- KorAPConnection(accessToken = NULL, verbose = TRUE)
   expect_message(kco %>% corpusQuery("[[xx"), "unbalanced")
 })
 
 test_that("corpusQuery token API works", {
   skip_if_offline()
-  kco <- new("KorAPConnection", accessToken = NULL,
+  kco <- KorAPConnection(accessToken = NULL,
              verbose = TRUE)
   q <- corpusQuery(kco, "focus([tt/p=ADJA] {Newstickeritis})", vc = "corpusSigle=/W.D17/", metadataOnly = FALSE)
   q <- fetchNext(q)
@@ -138,7 +138,7 @@
 
 test_that("matchStart and matchEnd are present and correct", {
   skip_if_offline()
-  kco <- new("KorAPConnection", accessToken = NULL, verbose = TRUE)
+  kco <- KorAPConnection(accessToken = NULL, verbose = TRUE)
   q <- corpusQuery(kco, "focus([tt/p=ADJA] {Newstickeritis})", vc = "corpusSigle=/W.D17/", metadataOnly = FALSE)
   q <- fetchNext(q)
   matches <-q@collectedMatches
@@ -147,7 +147,7 @@
 })
 
 test_that("extended metadata fields work cortrectly on instane KED", {
-  kco <- new("KorAPConnection", KorAPUrl = "https://korap.ids-mannheim.de/instance/ked", accessToken = NULL,
+  kco <- KorAPConnection(KorAPUrl = "https://korap.ids-mannheim.de/instance/ked", accessToken = NULL,
              verbose = TRUE)
   q <- corpusQuery(
     kco,
@@ -191,7 +191,7 @@
 
 test_that("corpusQuery token API works when textSigle field is deselected", {
   skip_if_offline()
-  kco <- new("KorAPConnection", accessToken = NULL, verbose = TRUE)
+  kco <- KorAPConnection(accessToken = NULL, verbose = TRUE)
   q <- corpusQuery(kco, "focus([tt/p=ADJA] {Newstickeritis})",
                    vc = "corpusSigle=/W.D17/",
                    fields = c("tokens"),
diff --git a/tests/testthat/test-corpusStats.R b/tests/testthat/test-corpusStats.R
index c25670d..f12159d 100644
--- a/tests/testthat/test-corpusStats.R
+++ b/tests/testthat/test-corpusStats.R
@@ -1,6 +1,6 @@
 test_that("corpusStats works", {
   skip_if_offline()
-  stats <- new("KorAPConnection", accessToken = NULL) %>% corpusStats("pubDate since 2020 & pubDate until 2021")
+  stats <- KorAPConnection(accessToken = NULL) %>% corpusStats("pubDate since 2020 & pubDate until 2021")
   expect_gt(stats@tokens, 0)
   expect_gt(stats@paragraphs, 0)
   expect_gt(stats@documents, 0)
@@ -9,7 +9,7 @@
 
 test_that("corpusStats with result as df works", {
   skip_if_offline()
-  stats <- new("KorAPConnection", accessToken = NULL) %>% corpusStats("pubDate since 2020 & pubDate until 2021", as.df = TRUE)
+  stats <- KorAPConnection(accessToken = NULL) %>% corpusStats("pubDate since 2020 & pubDate until 2021", as.df = TRUE)
   expect_gt(stats$tokens, 0)
   expect_gt(stats$paragraphs, 0)
   expect_gt(stats$documents, 0)
@@ -18,12 +18,12 @@
 
 test_that("Printing corpusStats for the whole corpus works", {
   skip_if_offline()
-  stats <- new("KorAPConnection", accessToken = NULL) %>% corpusStats()
+  stats <- KorAPConnection(accessToken = NULL) %>% corpusStats()
   expect_error(print(stats), NA)
 })
 
 test_that("Printing corpusStats for a sub-corpus works", {
   skip_if_offline()
-  stats <- new("KorAPConnection", accessToken = NULL) %>% corpusStats("pubDate since 2020 & pubDate until 2021")
+  stats <- KorAPConnection(accessToken = NULL) %>% corpusStats("pubDate since 2020 & pubDate until 2021")
   expect_error(print(stats), NA)
 })
diff --git a/tests/testthat/test-demos.R b/tests/testthat/test-demos.R
index 2e1a0a3..7bd38e4 100644
--- a/tests/testthat/test-demos.R
+++ b/tests/testthat/test-demos.R
@@ -2,7 +2,7 @@
   skip_if_offline()
   year <- c(2013:2018)
   alternatives <- c("macht []{0,3} Sinn", "ergibt []{0,3} Sinn")
-  hc <- new("KorAPConnection", accessToken = NULL, verbose = TRUE) %>%
+  hc <- KorAPConnection(accessToken = NULL, verbose = TRUE) %>%
     frequencyQuery(
       query = alternatives,
       vc = paste("textType = /Zeit.*/ & pubDate in", year),
@@ -17,7 +17,7 @@
   year <- c(2013:2018)
   alternatives <- c("macht []{0,3} Sinn", "ergibt []{0,3} Sinn")
 
-  hc <- new("KorAPConnection", accessToken = NULL, verbose = TRUE) %>%
+  hc <- KorAPConnection(accessToken = NULL, verbose = TRUE) %>%
     frequencyQuery(
       query = alternatives,
       vc = paste("textType = /Zeit.*/ & pubDate in", year),
@@ -32,7 +32,7 @@
   year <- c(2013:2018)
   alternatives <- c("macht []{0,3} Sinn", "ergibt []{0,3} Sinn")
 
-  hc <- new("KorAPConnection", accessToken = NULL, verbose = TRUE) %>%
+  hc <- KorAPConnection(accessToken = NULL, verbose = TRUE) %>%
     frequencyQuery(
       query = alternatives,
       vc = paste("textType = /Zeit.*/ & pubDate in", year),
@@ -47,7 +47,7 @@
   year <- c(2013:2018)
   q <- c("macht []{0,3} Sinn")
 
-  hc <- new("KorAPConnection", accessToken = NULL, verbose = TRUE) %>%
+  hc <- KorAPConnection(accessToken = NULL, verbose = TRUE) %>%
     frequencyQuery(
       query = q,
       vc = paste("textType = /Zeit.*/ & pubDate in", year),
@@ -59,7 +59,7 @@
 
 test_that("Auto conditions over time highcharter example works", {
   skip_if_offline()
-  kco <- new("KorAPConnection", accessToken = NULL, verbose=TRUE)
+  kco <- KorAPConnection(accessToken = NULL, verbose=TRUE)
   hc <- expand_grid(
     myconditions = c("textDomain = /Wirtschaft.*/",
                   "textDomain != /Wirtschaft.*/"),
@@ -76,7 +76,7 @@
 
 test_that("Single condition over time highcharter example works", {
   skip_if_offline()
-  kco <- new("KorAPConnection", accessToken = NULL, verbose=TRUE)
+  kco <- KorAPConnection(accessToken = NULL, verbose=TRUE)
   hc <- expand_grid(
     condition = c("textDomain = /Wirtschaft.*/"),
     year = (2011:2013)
@@ -92,7 +92,7 @@
 
 test_that("Multiple conditions over time highcharter example works", {
   skip_if_offline()
-  kco <- new("KorAPConnection", accessToken = NULL, verbose=TRUE)
+  kco <- KorAPConnection(accessToken = NULL, verbose=TRUE)
   hc <- expand_grid(
     condition = c("textDomain = /Wirtschaft.*/",
                   "textDomain != /Wirtschaft.*/"),
@@ -109,7 +109,7 @@
 
 test_that("Multiple conditions and queries over time highcharter example works", {
   skip_if_offline()
-  kco <- new("KorAPConnection", accessToken = NULL, verbose=TRUE)
+  kco <- KorAPConnection(accessToken = NULL, verbose=TRUE)
   hc <- expand_grid(
     qx = c("[tt/l=Heuschrecke]", "Ameise"),
     condition = c("textDomain = /Wirtschaft.*/",
@@ -127,7 +127,7 @@
 
 test_that("collocationScoreQuery works with hchart and hc_add_onclick_korap_search", {
   skip_if_offline()
-  kco <- new("KorAPConnection", accessToken = NULL, cache = TRUE, verbose = TRUE)
+  kco <- KorAPConnection(accessToken = NULL, cache = TRUE, verbose = TRUE)
   df <- collocationScoreQuery(kco,"Ameisenplage", "heimgesucht", leftContextSize=0, rightContextSize=1)
   hc <- hchart(df, type="spline", hcaes(label, logDice))
   hc <- hc_add_onclick_korap_search(hc)
diff --git a/tests/testthat/test-textMetadata.R b/tests/testthat/test-textMetadata.R
index 2355322..ab9ba01 100644
--- a/tests/testthat/test-textMetadata.R
+++ b/tests/testthat/test-textMetadata.R
@@ -1,18 +1,18 @@
 test_that("textMetadata works", {
   skip_if_offline()
-  m <- new("KorAPConnection", accessToken = NULL) %>% textMetadata(c("WUD17/B96/57558", "WUD17/A97/08541"))
+  m <- KorAPConnection(accessToken = NULL) %>% textMetadata(c("WUD17/B96/57558", "WUD17/A97/08541"))
   expect("textType" %in% names(m), "textMetadata value should contain a textType column")
 })
 
 
 test_that("textMetadata works for unknown text sigles", {
   skip_if_offline()
-  m <- new("KorAPConnection", accessToken = NULL) %>% textMetadata(c("WUD17/B96/57558", "unknownsigle"))
+  m <- KorAPConnection(accessToken = NULL) %>% textMetadata(c("WUD17/B96/57558", "unknownsigle"))
   expect("errors" %in% names(m), "textMetadata should return an errors column if a text does not exist")
 })
 
 test_that("textMetadata works with list valued fields", {
   skip_if_offline()
-  m <- new("KorAPConnection", accessToken = NULL) %>% textMetadata("WUD17/B96/57558")
+  m <- KorAPConnection(accessToken = NULL) %>% textMetadata("WUD17/B96/57558")
   expect("staat-gesellschaft\\tbiographien-interviews" == m$textClass[1], "multiple text classes / domnains should be tab separated")
 })