diff --git a/Changelog.md b/Changelog.md
index fd952d1..9b4f875 100644
--- a/Changelog.md
+++ b/Changelog.md
@@ -1,5 +1,10 @@
 # Changelog
 
+* use httr2 instead of httr 
+* improve error handling even more
+  * error out also on empty results
+  * print request urls
+
 ## 0.2.9000
 * improve error handling:
   * show error if token is empty
diff --git a/DESCRIPTION b/DESCRIPTION
index 954d79d..2e66cbc 100644
--- a/DESCRIPTION
+++ b/DESCRIPTION
@@ -24,7 +24,7 @@
     keyring,
     stringr,
     utils,
-    httr,
+    httr2
 Suggests:
     testthat
 Collate: 
diff --git a/NAMESPACE b/NAMESPACE
index 5840a09..9148b1c 100644
--- a/NAMESPACE
+++ b/NAMESPACE
@@ -16,7 +16,6 @@
 export(select)
 export(summarise)
 export(year)
-import(httr)
 import(keyring)
 import(tibble)
 importFrom(dplyr,bind_cols)
@@ -27,6 +26,12 @@
 importFrom(dplyr,rowwise)
 importFrom(dplyr,select)
 importFrom(dplyr,summarise)
+importFrom(httr2,req_error)
+importFrom(httr2,req_perform)
+importFrom(httr2,req_url_query)
+importFrom(httr2,request)
+importFrom(httr2,resp_body_json)
+importFrom(httr2,resp_body_raw)
 importFrom(jsonlite,fromJSON)
 importFrom(lubridate,year)
 importFrom(magrittr,"%>%")
diff --git a/R/matomoquery.R b/R/matomoquery.R
index 28ad2f0..cfdfb86 100644
--- a/R/matomoquery.R
+++ b/R/matomoquery.R
@@ -17,7 +17,7 @@
 #' @param getMethod    API method to call – default: VisitsSummary.get
 #' @return Data frame with visits summary as returned by matomo. Note that the \code{date} column in the returned data frame refers to the first day of the respective period.
 #'
-#' @import httr
+#' @importFrom httr2 request req_url_query req_perform resp_body_json resp_body_raw req_error
 #' @importFrom jsonlite fromJSON
 #' @importFrom dplyr mutate rowwise bind_rows select summarise n
 #' @import tibble
@@ -51,9 +51,8 @@
       call. = FALSE
     )
   }
-  httr::GET(
-    url = matomoUrl,
-    query = list(
+  res <- httr2::request(matomoUrl) %>%
+    httr2::req_url_query(
       module = "API",
       method = getMethod,
       format = "json",
@@ -63,32 +62,25 @@
       filter_limit = filter_limit,
       language = "de",
       token_auth = accessToken
-    )
-  ) -> res
+    ) %>%
+    httr2::req_error(body = error_body) %>%
+    httr2::req_perform()
 
-  if (status_code(res) != 200) {
-    stop(paste("API call failed:", httr::content(res, "text", encoding = "UTF-8")), call. = FALSE)
-  }
+  l <-res %>% httr2::resp_body_json()
 
-  if (!http_type(res) %in% c("application/json", "application/ld+json")) {
-    stop(paste("API did not return json:", httr::content(res, "text", encoding = "UTF-8")), call. = FALSE)
-  }
-
-  json <- httr::content(res, "text", encoding = "UTF-8")
-  warning(json)
-  l <- jsonlite::fromJSON(json)
-
-  if("result" %in% colnames(l) && l$result == 'error') {
-    stop(paste("in api call:", l$message), call. = FALSE)
+  if("result" %in% names(l) && l[["result"]] == 'error') {
+    stop(paste("In api call", res$url, ":", l[["message"]], "\n"), call. = FALSE)
   }
 
   if (period=="range") {
     df <- if (is.list(l) && length(l) == 0) {
-      warning("API call returned an empty list.\n", call. = FALSE)
+      stop(paste0("API call ",  res$url, " returned the empty list [].\n"), call. = FALSE)
+    } else if (is.list(l)) {
+      df <- bind_rows(l)
     } else if (length(siteId) == 1) {
       l %>%  mutate(site_id=siteId)
     } else {
-      bind_rows(jsonlite::fromJSON(json), .id = "site_id")
+      bind_rows(l, .id = "site_id")
     }
   } else {
     df <- (if (length(siteId) == 1) {
@@ -130,6 +122,11 @@
   return(df)
 }
 
+
+error_body <- function(resp) {
+  return(paste0("getting ", resp$url))
+}
+
 utils::globalVariables(c("year", "month", "day", "week"))
 
 #' Save access token persistently to your keyring
@@ -157,7 +154,6 @@
 }
 
 
-
 #' get access token for matomo from keyring
 #'
 #' @param matomoUrl   base URL of your matomo instance
