diff --git a/DESCRIPTION b/DESCRIPTION
index c8e6049b6981951a41ab7738b9db7bd6dafd2e7c..0e54386dcb44b137bf09ffc9e403ff01b73d21c6 100644
--- a/DESCRIPTION
+++ b/DESCRIPTION
@@ -1,7 +1,7 @@
 Package: airGR
 Type: Package
 Title: Suite of GR Hydrological Models for Precipitation-Runoff Modelling
-Version: 1.2.14.4
+Version: 1.2.14.5
 Date: 2019-04-16
 Authors@R: c(
   person("Laurent", "Coron", role = c("aut", "trl"), comment = c(ORCID = "0000-0002-1503-6204")),
diff --git a/NEWS.rmd b/NEWS.rmd
index d55dcb006d647be36c676493bd68e39c369a0dc4..02a15af12da423d478c7a7bc2b67d9ce13296e46 100644
--- a/NEWS.rmd
+++ b/NEWS.rmd
@@ -14,7 +14,7 @@ output:
 
 
 
-### 1.2.14.4 Release Notes (2019-04-16)
+### 1.2.14.5 Release Notes (2019-04-16)
 
 
 #### New features
diff --git a/R/ErrorCrit_RMSE.R b/R/ErrorCrit_RMSE.R
index 826db9c098265c823663902d6e18b8bb6d745bd4..173f875791fb1e1aa997cde243ca0102e65fc747 100644
--- a/R/ErrorCrit_RMSE.R
+++ b/R/ErrorCrit_RMSE.R
@@ -1,147 +1,41 @@
 ErrorCrit_RMSE <- function(InputsCrit, OutputsModel, warnings = TRUE, verbose = TRUE) {
   
-  
-  ##Arguments_check________________________________
-  if (!inherits(InputsCrit, "InputsCrit")) {
-    stop("'InputsCrit' must be of class 'InputsCrit'")
-  }
-  if (inherits(InputsCrit, "Multi") | inherits(InputsCrit, "Compo")) {
-    stop("'InputsCrit' must be of class 'Single'. Use the 'ErrorCrit' function on objects of class 'Multi' with RMSE")
-  }
+  ## Arguments check
   if (!inherits(OutputsModel, "OutputsModel")) {
     stop("'OutputsModel' must be of class 'OutputsModel'")
   }
   
+  OutputsCritCheck <- .ErrorCrit(InputsCrit = InputsCrit, crit = "RMSE")
   
-  ##Initialisation_________________________________
-  CritName <- NA
-  CritVar  <- InputsCrit$VarObs
-  if (InputsCrit$transfo == "") {
-    CritName <- "RMSE[CritVar]"
-  }
-  if (InputsCrit$transfo == "sqrt") {
-    CritName <- "RMSE[sqrt(CritVar)]"
-  }
-  if (InputsCrit$transfo == "log") {
-    CritName <- "RMSE[log(CritVar)]"
-  }
-  if (InputsCrit$transfo == "inv") {
-    CritName <- "RMSE[1/CritVar]"
-  }
-  if (InputsCrit$transfo == "sort") {
-    CritName <- "RMSE[sort(CritVar)]"
-  }
-  CritName      <- gsub(pattern = "CritVar", replacement = CritVar, x = CritName)
-  CritValue     <- NA
-  CritBestValue <- +1
-  Multiplier    <- +1
-  ### must be equal to -1 or +1 only
-  
-  
-  ##Data_preparation_______________________________
-  VarObs <- InputsCrit$Obs
-  VarObs[!InputsCrit$BoolCrit] <- NA
-  if (InputsCrit$VarObs == "Q") {
-    VarSim <- OutputsModel$Qsim
-  }
-  if (InputsCrit$VarObs == "SCA") {
-    VarSim <- rowMeans(sapply(OutputsModel$CemaNeigeLayers[InputsCrit$idLayer], FUN = "[[", "Gratio"))
-  }
-  if (InputsCrit$VarObs == "SWE") {
-    VarSim <- rowMeans(sapply(OutputsModel$CemaNeigeLayers[InputsCrit$idLayer], FUN = "[[", "SnowPack"))
-  }
-  VarSim[!InputsCrit$BoolCrit] <- NA
-  
-  ##Data_transformation
-  if (InputsCrit$transfo %in% c("log", "inv") & is.null(InputsCrit$epsilon) & warnings) {
-    if (any(VarObs %in% 0)) {
-      warning("zeroes detected in 'Qobs': the corresponding time-steps will be excluded from the criteria computation if the epsilon argument of 'CreateInputsCrit' = NULL")
-    }
-    if (any(VarSim %in% 0)) {
-      warning("zeroes detected in 'Qsim': the corresponding time-steps will be excluded from the criteria computation if the epsilon argument of 'CreateInputsCrit' = NULL")
-    }  
-  }
-  if ("epsilon" %in% names(InputsCrit) & !is.null(InputsCrit$epsilon)) {
-    VarObs <- VarObs + InputsCrit$epsilon
-    VarSim <- VarSim + InputsCrit$epsilon
-  }
-  if (InputsCrit$transfo == "sqrt") {
-    VarObs <- sqrt(VarObs)
-    VarSim <- sqrt(VarSim)
-  }
-  if (InputsCrit$transfo == "log") {
-    VarObs <- log(VarObs)
-    VarSim <- log(VarSim)
-    VarSim[VarSim      < -1e100] <- NA
-  }
-  if (InputsCrit$transfo == "inv") {
-    VarObs <- 1 / VarObs
-    VarSim <- 1 / VarSim
-    VarSim[abs(VarSim) > 1e+100] <- NA
-  }
-  if (InputsCrit$transfo == "sort") {
-    VarSim[is.na(VarObs)] <- NA
-    VarSim <- sort(VarSim, na.last = TRUE)
-    VarObs <- sort(VarObs, na.last = TRUE)
-    InputsCrit$BoolCrit <-
-      sort(InputsCrit$BoolCrit, decreasing = TRUE)
-  }
-  
-  ##TS_ignore
-  TS_ignore <- !is.finite(VarObs) | !is.finite(VarSim) | !InputsCrit$BoolCrit
-  Ind_TS_ignore <- which(TS_ignore)
-  if (length(Ind_TS_ignore) == 0) {
-    Ind_TS_ignore <- NULL
-  }
-  if (sum(!TS_ignore) == 0) {
-    OutputsCrit <- list(NA)
-    names(OutputsCrit) <- c("CritValue")
-    return(OutputsCrit)
-  }
-  if (inherits(OutputsModel, "hourly")) {
-    WarningTS <- 365
-  }
-  if (inherits(OutputsModel, "daily")) {
-    WarningTS <- 365
-  }
-  if (inherits(OutputsModel, "monthly")) {
-    WarningTS <-  12
-  }
-  if (inherits(OutputsModel, "yearly")) {
-    WarningTS <-   3
-  }
-  if (sum(!TS_ignore) < WarningTS & warnings) {
-    warning("\t criterion computed on less than ", WarningTS, " time-steps")
-  }
-  
-  
-  ##ErrorCrit______________________________________
-  Numer <- sum((VarSim - VarObs)^2, na.rm = TRUE)
-  Denom <- sum(!is.na(VarObs))
-  
-  if (Numer == 0) {
-    Crit <- 0
+  if (!OutputsCritCheck$CritCompute) {
+    CritValue <- NA
   } else {
-    Crit <- sqrt(Numer / Denom)
-  }
-  if (is.numeric(Crit) & is.finite(Crit)) {
-    CritValue <- Crit
-  }
-  
-  
-  ##Verbose______________________________________
-  if (verbose) {
-    message("Crit. ", CritName, " = ", sprintf("%.4f", CritValue), "\n")
+    ## ErrorCrit
+    Numer <- sum((OutputsCritCheck$VarSim - OutputsCritCheck$VarObs)^2, na.rm = TRUE)
+    Denom <- sum(!is.na(OutputsCritCheck$VarObs))
+    
+    if (Numer == 0) {
+      Crit <- 0
+    } else {
+      Crit <- sqrt(Numer / Denom)
+    }
+    if (is.numeric(Crit) & is.finite(Crit)) {
+      CritValue <- Crit
+    }
+    
+    ## Verbose
+    if (verbose) {
+      message("Crit. ", OutputsCritCheck$CritName, " = ", sprintf("%.4f", CritValue), "\n")
+    }
   }
   
   
-  ##Output_________________________________________
+  ## Output
   OutputsCrit <- list(CritValue       = CritValue,
-                      CritName        = CritName,
-                      CritBestValue   = CritBestValue,
-                      Multiplier      = Multiplier,
-                      Ind_notcomputed = Ind_TS_ignore
-  )
+                      CritName        = OutputsCritCheck$CritName,
+                      CritBestValue   = OutputsCritCheck$CritBestValue,
+                      Multiplier      = OutputsCritCheck$Multiplier,
+                      Ind_notcomputed = OutputsCritCheck$Ind_TS_ignore)
   
   class(OutputsCrit) <- c("RMSE", "ErrorCrit")
   return(OutputsCrit)