diff --git a/.Rbuildignore b/.Rbuildignore
index 7c1c5baa8f03668a04b8d352020ed07372de4599..acd9e68a9a2e50eff8ef783a77b63bab66e63424 100644
--- a/.Rbuildignore
+++ b/.Rbuildignore
@@ -8,3 +8,4 @@
 ^\.gitlab-ci\.yml$
 ^\.vscode$
 ^Rplots\.pdf$
+^ci$
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 73d31f89ad7f752944b114e78ad61f76eab5b84a..5019ac1352059b7b2b59b477057deee4cc35084f 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,36 +1,14 @@
 stages:
-  - update_packages
-  - build
+  - check
   - regression
-  - tests
+  - revdepcheck
 
 default:
   before_script:
     - echo "setwd(\"$(pwd)\")" > .Rprofile
+    - echo ".libPaths <- c(Sys.getenv(\"R_LIBS_USER\"), .libPaths())" >> .Rprofile
     - PATH=~/R/sources/R-${R_VERSION}/bin:$PATH
-    - rename "s/${R_VERSION}.airGR/airGR/" *.tar.gz
-    - R -e 'chooseCRANmirror(graphics = FALSE, ind = 1); pkg <- "caRamel"; pkgInst <- installed.packages()[, "Package"]; pkgMiss <- setdiff(pkg, pkgInst); if (length(pkgMiss) > 0) install.packages(pkgMiss)'
-
-.update_packages:
-  stage: update_packages
-  only:
-    refs:
-      - tags
-      - schedules
-  script:
-    - Rscript -e "update.packages(ask=FALSE, repos=\"http://cran.r-project.org\")"
-
-.build:
-  stage: build
-  script:
-    - cd ..
-    - echo "setwd(\"$(pwd)\")" > .Rprofile
-    - R CMD build airgr
-    - rename "s/airGR/${R_VERSION}.airGR/" airGR_*.tar.gz
-    - mv *.tar.gz airgr/
-  artifacts:
-    untracked: true
-    expire_in: 1 week
+    - R -e 'remotes::install_deps(dep = T)'
 
 .regression:
   stage: regression
@@ -40,27 +18,20 @@ default:
     - Rscript tests/testthat/regression_tests.R dev
     - Rscript tests/testthat/regression_tests.R compare
 
+.check:
+  stage: check
+  script:
+  - R -e ' rcmdcheck::rcmdcheck(args = ifelse(as.logical(Sys.getenv("NOT_CRAN")), "", "--as-cran"), error_on = "warning")'
+
 .check_not_cran:
-  stage: tests
   variables:
     NOT_CRAN: "true"
-  script:
-    - R CMD check airGR_*.tar.gz
+  extends: .check
 
 .check_as_cran:
-  stage: tests
-  script:
-    - R CMD check --as-cran airGR_*.tar.gz
-
-update_packages_patched:
   variables:
-    R_VERSION: "patched"
-  extends: .update_packages
-
-build_patched:
-  variables:
-    R_VERSION: "patched"
-  extends: .build
+    NOT_CRAN: "false"
+  extends: .check
 
 regression_patched:
   variables:
@@ -93,20 +64,6 @@ check_as_cran_patched:
     R_VERSION: "patched"
   extends: .check_as_cran
 
-update_packages_devel:
-  variables:
-    R_VERSION: "devel"
-  extends: .update_packages
-
-build_devel:
-  only:
-    refs:
-      - tags
-      - schedules
-  variables:
-    R_VERSION: "devel"
-  extends: .build
-
 check_not_cran_devel:
   only:
     refs:
@@ -125,35 +82,39 @@ check_as_cran_devel:
     R_VERSION: "devel"
   extends: .check_as_cran
 
-update_packages_oldrel:
-  variables:
-    R_VERSION: "oldrel"
-  extends: .update_packages
-
-build_oldrel:
+check_not_cran_oldrel:
   only:
     refs:
       - tags
       - schedules
   variables:
     R_VERSION: "oldrel"
-  extends: .build
+  extends: .check_not_cran
 
-check_not_cran_oldrel:
+check_as_cran_oldrel:
   only:
     refs:
       - tags
       - schedules
   variables:
     R_VERSION: "oldrel"
-  extends: .check_not_cran
+  extends: .check_as_cran
 
-check_as_cran_oldrel:
+revdepcheck_patched:
+  stage: revdepcheck
   only:
     refs:
       - tags
       - schedules
   variables:
-    R_VERSION: "oldrel"
-  extends: .check_as_cran
-
+    R_VERSION: "patched"
+  script:
+    - R -e 'remotes::install_github("https://github.com/r-lib/revdepcheck")'
+    - R -e 'revdepcheck::revdep_check(num_workers = 2)'
+    - R -e 'if (any(sapply(revdepcheck::revdep_summary(), function(x) {any(x$cmp$change == 1)}))) stop()'
+  artifacts:
+    paths:
+      - revdep/README.md
+      - revdep/problems.md
+      - revdep/failures.md
+      - revdep/cran.md
diff --git a/R/Calibration.R b/R/Calibration.R
index 2bfceaf482145a80b51a80953787323c133f1c3c..a66c78154e42b49ab80a61db832a6327da4dd962 100644
--- a/R/Calibration.R
+++ b/R/Calibration.R
@@ -1,13 +1,14 @@
-Calibration <- function(InputsModel, 
-                        RunOptions, 
-                        InputsCrit, 
+Calibration <- function(InputsModel,
+                        RunOptions,
+                        InputsCrit,
                         CalibOptions,
-                        FUN_MOD, 
+                        FUN_MOD,
                         FUN_CRIT,                      # deprecated
-                        FUN_CALIB = Calibration_Michel, 
+                        FUN_CALIB = Calibration_Michel,
                         FUN_TRANSFO = NULL,
-                        verbose = TRUE) {
-  
+                        verbose = TRUE,
+                        ...) {
+
   FUN_MOD   <- match.fun(FUN_MOD)
   if (!missing(FUN_CRIT)) {
     FUN_CRIT <- match.fun(FUN_CRIT)
@@ -16,10 +17,10 @@ Calibration <- function(InputsModel,
   if (!is.null(FUN_TRANSFO)) {
     FUN_TRANSFO <- match.fun(FUN_TRANSFO)
   }
-  
+
   return(FUN_CALIB(InputsModel = InputsModel, RunOptions = RunOptions, InputsCrit = InputsCrit,
                    CalibOptions = CalibOptions,
                    FUN_MOD = FUN_MOD, FUN_TRANSFO = FUN_TRANSFO,
-                   verbose = verbose))
+                   verbose = verbose, ...))
 }
 
diff --git a/man/Calibration.Rd b/man/Calibration.Rd
index c4779f0bd4ffa5478cdaaf36a3fc4a1783e5a04a..7368556f2202b4d24ecfbc9badb85d888fd3fd3c 100644
--- a/man/Calibration.Rd
+++ b/man/Calibration.Rd
@@ -16,7 +16,7 @@ Calibration algorithm that optimises the error criterion selected as objective f
 \usage{
 Calibration(InputsModel, RunOptions, InputsCrit, CalibOptions,
             FUN_MOD, FUN_CRIT, FUN_CALIB = Calibration_Michel,
-            FUN_TRANSFO = NULL, verbose = TRUE)
+            FUN_TRANSFO = NULL, verbose = TRUE, ...)
 }
 
 
@@ -38,6 +38,8 @@ Calibration(InputsModel, RunOptions, InputsCrit, CalibOptions,
 \item{FUN_TRANSFO}{(optional) [function] model parameters transformation function, if the \code{FUN_MOD} used is native in the package \code{FUN_TRANSFO} is automatically defined}
 
 \item{verbose}{(optional) [boolean] boolean indicating if the function is run in verbose mode or not, default = \code{TRUE}}
+
+\item{...}{Further arguments to pass to \code{\link{RunModel}}}
 }
 
 
@@ -53,11 +55,11 @@ library(airGR)
 data(L0123001)
 
 ## preparation of InputsModel object
-InputsModel <- CreateInputsModel(FUN_MOD = RunModel_GR4J, DatesR = BasinObs$DatesR, 
+InputsModel <- CreateInputsModel(FUN_MOD = RunModel_GR4J, DatesR = BasinObs$DatesR,
                                  Precip = BasinObs$P, PotEvap = BasinObs$E)
 
 ## calibration period selection
-Ind_Run <- seq(which(format(BasinObs$DatesR, format = "\%Y-\%m-\%d")=="1990-01-01"), 
+Ind_Run <- seq(which(format(BasinObs$DatesR, format = "\%Y-\%m-\%d")=="1990-01-01"),
                which(format(BasinObs$DatesR, format = "\%Y-\%m-\%d")=="1999-12-31"))
 
 ## preparation of RunOptions object
@@ -65,7 +67,7 @@ RunOptions <- CreateRunOptions(FUN_MOD = RunModel_GR4J,
                                InputsModel = InputsModel, IndPeriod_Run = Ind_Run)
 
 ## calibration criterion: preparation of the InputsCrit object
-InputsCrit <- CreateInputsCrit(FUN_CRIT = ErrorCrit_NSE, InputsModel = InputsModel, 
+InputsCrit <- CreateInputsCrit(FUN_CRIT = ErrorCrit_NSE, InputsModel = InputsModel,
                                RunOptions = RunOptions, Obs = BasinObs$Qmm[Ind_Run])
 
 ## preparation of CalibOptions object
@@ -74,24 +76,24 @@ CalibOptions <- CreateCalibOptions(FUN_MOD = RunModel_GR4J, FUN_CALIB = Calibrat
 ## calibration
 OutputsCalib <- Calibration(InputsModel = InputsModel, RunOptions = RunOptions,
                             InputsCrit = InputsCrit, CalibOptions = CalibOptions,
-                            FUN_MOD = RunModel_GR4J, 
+                            FUN_MOD = RunModel_GR4J,
                             FUN_CALIB = Calibration_Michel)
 
 ## simulation
 Param <- OutputsCalib$ParamFinalR
-OutputsModel <- RunModel(InputsModel = InputsModel, RunOptions = RunOptions, 
+OutputsModel <- RunModel(InputsModel = InputsModel, RunOptions = RunOptions,
                          Param = Param, FUN = RunModel_GR4J)
 
 ## results preview
 plot(OutputsModel, Qobs = BasinObs$Qmm[Ind_Run])
 
 ## efficiency criterion: Nash-Sutcliffe Efficiency
-InputsCrit  <- CreateInputsCrit(FUN_CRIT = ErrorCrit_NSE, InputsModel = InputsModel, 
+InputsCrit  <- CreateInputsCrit(FUN_CRIT = ErrorCrit_NSE, InputsModel = InputsModel,
                                 RunOptions = RunOptions, Obs = BasinObs$Qmm[Ind_Run])
 OutputsCrit <- ErrorCrit_NSE(InputsCrit = InputsCrit, OutputsModel = OutputsModel)
 
 ## efficiency criterion: Kling-Gupta Efficiency
-InputsCrit  <- CreateInputsCrit(FUN_CRIT = ErrorCrit_KGE, InputsModel = InputsModel, 
+InputsCrit  <- CreateInputsCrit(FUN_CRIT = ErrorCrit_KGE, InputsModel = InputsModel,
                                 RunOptions = RunOptions, Obs = BasinObs$Qmm[Ind_Run])
 OutputsCrit <- ErrorCrit_KGE(InputsCrit = InputsCrit, OutputsModel = OutputsModel)
 }
@@ -105,7 +107,7 @@ Laurent Coron, Olivier Delaigue
 \seealso{
 \code{\link{Calibration_Michel}},
 \code{\link{ErrorCrit}}, \code{\link{TransfoParam}},
-\code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}, 
+\code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}},
 \code{\link{CreateInputsCrit}}, \code{\link{CreateCalibOptions}}.
 }