diff --git a/DESCRIPTION b/DESCRIPTION
index 6fb0b7d4d4454282c72e093b4d4670677c2e4544..125da67c33cc7258ca8e0a7ce783e9d880d630a0 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.7.9
+Version: 1.2.7.10
 Date: 2019-03-06
 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 48f4ef9fd4c9b1352eedc74352fbaa18979f5577..81a14a71701c4274385f01f94bf2c68972f95dba 100644
--- a/NEWS.rmd
+++ b/NEWS.rmd
@@ -13,7 +13,7 @@ output:
 
 
 
-### 1.2.7.9 Release Notes (2019-03-06) 
+### 1.2.7.10 Release Notes (2019-03-06) 
 
 
 
@@ -32,7 +32,7 @@ output:
 
 - <code>CreateInputsCrit()</code> now presents a <code>varObs</code> argument in order to prepare an <code>InputsCrit</code> object in order run a criterion on other variable than observed discharges with the <code>ErrorCrit()</code> function (e.g. SCA, SWE).
 
-- <code>CreateInputsCrit()</code> now presents a <code>weights</code> argument in order to prepare an <code>InputsCrit</code> object in order to compute a composite criterion  (<code>Compo</code> class) with <code>ErrorCrit()</code> or <code>Calibration_Michel()</code>.
+- <code>CreateInputsCrit()</code> now presents a <code>weights</code> argument in order to prepare an <code>InputsCrit</code> object in order to compute a composite criterion (<code>Compo</code> class) with <code>ErrorCrit()</code> or <code>Calibration_Michel()</code>.
 
 - <code>CreateInputsCrit()</code> now presents a <code>warnings</code> argument to replace the verbose action (the <code>verbose</code> argument is keep to print messages).
 
@@ -45,7 +45,9 @@ output:
 
 - <code>ErrorCrit_&#42;()</code> functions now return an error message if the <code>InputsCrit</code> object is of class <code>Multi</code> or <code>Compo</code>.
 
-- <code>ErrorCrit()</code> function can now run on a multiple <code>InputsCrit</code>. It returns a list of <code>InputsCrit</code>.
+- <code>ErrorCrit()</code> function can now run on a multiple or a composite <code>InputsCrit</code>. It returns a list of <code>InputsCrit</code>.
+
+- <code>ErrorCrit()</code> and <code>ErrorCrit_&#42;()</code> functions can now run on Q, SCA or SWE.
 
 - <code>Calibration_Michel()</code> function can now run on a composite <code>InputsCrit</code>. It returns a composite value of error and the list of <code>InputsCrit</code> used to calculate this composite criterion.
 
diff --git a/R/ErrorCrit_KGE.R b/R/ErrorCrit_KGE.R
index c5796743ecea6102209c27890340475b7de9cefb..219e25960a6329dc01c6c21579929fdd45470e0c 100644
--- a/R/ErrorCrit_KGE.R
+++ b/R/ErrorCrit_KGE.R
@@ -41,7 +41,15 @@ ErrorCrit_KGE <- function(InputsCrit, OutputsModel, warnings = TRUE, verbose = T
   ##Data_preparation_______________________________
   VarObs <- InputsCrit$obs
   VarObs[!InputsCrit$BoolCrit] <- NA
-  VarSim <- OutputsModel$Qsim
+  if (InputsCrit$varObs == "Q") {
+    VarSim <- OutputsModel$Qsim
+  }
+  if (InputsCrit$varObs == "SCA") {
+    VarSim <- rowMeans(sapply(OutputsModel$CemaNeigeLayers[InputsCrit$groupLayer], FUN = "[[", "Gratio"))
+  }
+  if (InputsCrit$varObs == "SWE") {
+    VarSim <- rowMeans(sapply(OutputsModel$CemaNeigeLayers[InputsCrit$groupLayer], FUN = "[[", "SnowPack"))
+  }
   VarSim[!InputsCrit$BoolCrit] <- NA
   
   ##Data_transformation
diff --git a/R/ErrorCrit_KGE2.R b/R/ErrorCrit_KGE2.R
index 868a614ef7f627101809a2c6a88eed09a0b9ccf5..156a58b2023f3585c468dcc809fd3469d6dac99b 100644
--- a/R/ErrorCrit_KGE2.R
+++ b/R/ErrorCrit_KGE2.R
@@ -41,7 +41,15 @@ ErrorCrit_KGE2 <- function(InputsCrit, OutputsModel, warnings = TRUE, verbose =
   ##Data_preparation_______________________________
   VarObs <- InputsCrit$obs
   VarObs[!InputsCrit$BoolCrit] <- NA
-  VarSim <- OutputsModel$Qsim
+  if (InputsCrit$varObs == "Q") {
+    VarSim <- OutputsModel$Qsim
+  }
+  if (InputsCrit$varObs == "SCA") {
+    VarSim <- rowMeans(sapply(OutputsModel$CemaNeigeLayers[InputsCrit$groupLayer], FUN = "[[", "Gratio"))
+  }
+  if (InputsCrit$varObs == "SWE") {
+    VarSim <- rowMeans(sapply(OutputsModel$CemaNeigeLayers[InputsCrit$groupLayer], FUN = "[[", "SnowPack"))
+  }
   VarSim[!InputsCrit$BoolCrit] <- NA
   
   ##Data_transformation
diff --git a/R/ErrorCrit_NSE.R b/R/ErrorCrit_NSE.R
index db3b8ad3fa25f9b87e354ceec957994c9ed0daf5..35a3126d0e9aa700cadd78111937d8fb18fee7e6 100644
--- a/R/ErrorCrit_NSE.R
+++ b/R/ErrorCrit_NSE.R
@@ -41,7 +41,15 @@ ErrorCrit_NSE <- function(InputsCrit, OutputsModel, warnings = TRUE, verbose = T
   ##Data_preparation_______________________________
   VarObs <- InputsCrit$obs
   VarObs[!InputsCrit$BoolCrit] <- NA
-  VarSim <- OutputsModel$Qsim
+  if (InputsCrit$varObs == "Q") {
+    VarSim <- OutputsModel$Qsim
+  }
+  if (InputsCrit$varObs == "SCA") {
+    VarSim <- rowMeans(sapply(OutputsModel$CemaNeigeLayers[InputsCrit$groupLayer], FUN = "[[", "Gratio"))
+  }
+  if (InputsCrit$varObs == "SWE") {
+    VarSim <- rowMeans(sapply(OutputsModel$CemaNeigeLayers[InputsCrit$groupLayer], FUN = "[[", "SnowPack"))
+  }
   VarSim[!InputsCrit$BoolCrit] <- NA
   
   ##Data_transformation
diff --git a/R/ErrorCrit_RMSE.R b/R/ErrorCrit_RMSE.R
index fd3fa6d470c0b203c35ce40e253f155a3843f1fa..1fef793fefacaccf44a54e49b4bf6522cd029096 100644
--- a/R/ErrorCrit_RMSE.R
+++ b/R/ErrorCrit_RMSE.R
@@ -41,7 +41,15 @@ ErrorCrit_RMSE <- function(InputsCrit, OutputsModel, warnings = TRUE, verbose =
   ##Data_preparation_______________________________
   VarObs <- InputsCrit$obs
   VarObs[!InputsCrit$BoolCrit] <- NA
-  VarSim <- OutputsModel$Qsim
+  if (InputsCrit$varObs == "Q") {
+    VarSim <- OutputsModel$Qsim
+  }
+  if (InputsCrit$varObs == "SCA") {
+    VarSim <- rowMeans(sapply(OutputsModel$CemaNeigeLayers[InputsCrit$groupLayer], FUN = "[[", "Gratio"))
+  }
+  if (InputsCrit$varObs == "SWE") {
+    VarSim <- rowMeans(sapply(OutputsModel$CemaNeigeLayers[InputsCrit$groupLayer], FUN = "[[", "SnowPack"))
+  }
   VarSim[!InputsCrit$BoolCrit] <- NA
   
   ##Data_transformation