diff --git a/.regressionignore b/.regressionignore
index 43285f509ca962d6d99f7d202d64479b67ee2288..44aced51723929d2b68509f61dd2e192ef30f2d9 100644
--- a/.regressionignore
+++ b/.regressionignore
@@ -13,8 +13,10 @@ Param_Sets_GR4J RunOptions_Cal
 Param_Sets_GR4J RunOptions_Val
 * OutputsModel$Param
 * OutputsModel$WarmUpQsim
+* OutputsModel$StateEnd
 Param_Sets_GR4J OutputsModel_Val
 RunModel_Lag InputsModel
+RunModel_Lag OutputsModel
 RunModel_Lag OutputsModelDown
 SeriesAggreg SimulatedMonthlyRegime
 * InputsCrit$FUN_CRIT
diff --git a/R/CreateRunOptions.R b/R/CreateRunOptions.R
index 8fd3022a680a5500cfd0271201ad0eeb41818de6..8f5235bb0ae82ad478defd0a99fa0231a5f2f5af 100644
--- a/R/CreateRunOptions.R
+++ b/R/CreateRunOptions.R
@@ -303,6 +303,9 @@ CreateRunOptions <- function(FUN_MOD, InputsModel,
 
   ##Outputs_all
   Outputs_all <- c("DatesR", unlist(FortranOutputs), "WarmUpQsim", "StateEnd", "Param")
+  if (FeatFUN_MOD$IsSD) {
+    Outputs_all <- c(Outputs_all, "QsimDown", "Qsim_m3")
+  }
 
   ##check_Outputs_Sim
   if (!is.vector(Outputs_Sim)) {
diff --git a/R/RunModel_Lag.R b/R/RunModel_Lag.R
index dea36093c0ba94564c16d8e721963847bc2751b8..e6b8fe565ae05b296527222d1b18b3366b08bc92 100644
--- a/R/RunModel_Lag.R
+++ b/R/RunModel_Lag.R
@@ -116,14 +116,21 @@ RunModel_Lag <- function(InputsModel, RunOptions, Param, QcontribDown) {
 
   ## OutputsModel
 
-  OutputsModel$Qsim_m3 <- Qsim_m3[IndPeriod2]
+  if ("Qsim_m3" %in% RunOptions$Outputs_Sim) {
+    OutputsModel$Qsim_m3 <- Qsim_m3[IndPeriod2]
+  }
 
   if ("Qsim" %in% RunOptions$Outputs_Sim) {
     # Convert back Qsim to mm
-    OutputsModel$Qsim <- OutputsModel$Qsim_m3 / sum(InputsModel$BasinAreas, na.rm = TRUE) / 1e3
+    OutputsModel$Qsim <- Qsim_m3[IndPeriod2] / sum(InputsModel$BasinAreas, na.rm = TRUE) / 1e3
     # message("Qsim: ", paste(OutputsModel$Qsim, collapse = ", "))
   }
 
+  if ("QsimDown" %in% RunOptions$Outputs_Sim) {
+    # Convert back Qsim to mm
+    OutputsModel$QsimDown <- QsimDown[IndPeriod2]
+  }
+
   # Warning for negative flows or NAs only in extended outputs
   if (length(RunOptions$Outputs_Sim) > 2) {
     if (any(OutputsModel$Qsim[!is.na(OutputsModel$Qsim)] < 0)) {
@@ -149,7 +156,7 @@ RunModel_Lag <- function(InputsModel, RunOptions, Param, QcontribDown) {
     # message("StateEnd: ", paste(OutputsModel$StateEnd$SD, collapse = ", "))
   }
   if ("WarmUpQsim" %in% RunOptions$Outputs_Sim) {
-    OutputsModel$WarmUpQsim <- Qsim_m3[seq_len(length(RunOptions$IndPeriod_WarmUp))]
+    OutputsModel$WarmUpQsim <- Qsim_m3[seq_len(length(RunOptions$IndPeriod_WarmUp))] / sum(InputsModel$BasinAreas, na.rm = TRUE) / 1e3
   }
 
   if ("Param" %in% RunOptions$Outputs_Sim) {
diff --git a/tests/testthat/test-RunModel_Lag.R b/tests/testthat/test-RunModel_Lag.R
index 374a797e7fa741b2e98515f133e0c6bdfb8d013f..23889967f71f1fef5983d51c86c92931481842fd 100644
--- a/tests/testthat/test-RunModel_Lag.R
+++ b/tests/testthat/test-RunModel_Lag.R
@@ -81,6 +81,14 @@ test_that("'QcontribDown$Qim' should have the same lenght as 'RunOptions$IndPeri
   )
 })
 
+test_that("OutputsModel must have a item 'QsimDown' equal to GR4J Qsim contribution", {
+  expect_equal(OutputsGR4JOnly$Qsim,
+               RunModel_Lag(InputsModel = InputsModel,
+                            RunOptions = RunOptions,
+                            Param = 1,
+                            QcontribDown = OutputsGR4JOnly)$QsimDown)
+})
+
 test_that("RunModel(FUN=RunModel_Lag) should give same result as RunModel_Lag", {
   QcontribDown <- OutputsGR4JOnly
   Output_RunModel_Lag <- RunModel_Lag(InputsModel = InputsModel,