diff --git a/R/RunModel.GRiwrmOutputsModel.R b/R/RunModel.GRiwrmOutputsModel.R
index cf8d00daae411a0ad29deccf41e662f5fabfd53e..878e614c2dced2902480983869edbabbba82a701 100644
--- a/R/RunModel.GRiwrmOutputsModel.R
+++ b/R/RunModel.GRiwrmOutputsModel.R
@@ -73,7 +73,7 @@ RunModel.GRiwrmOutputsModel <- function(x,
   for (id in names(RunOptions)) {
     # Run model for the sub-basin and one time step
     RunOptions[[id]]$IniResLevels <- NULL
-    RunOptions[[id]]$IniStates <- serializeIniStates(x[[id]]$StateEnd)
+    RunOptions[[id]]$IniStates <- serializeIniStates(x[[id]]$StateEnd, InputsModel[[id]])
     RunOptions[[id]]$IndPeriod_WarmUp <- 0L
     RunOptions[[id]]$IndPeriod_Run <- IndPeriod_Run
   }
diff --git a/R/RunModel.Supervisor.R b/R/RunModel.Supervisor.R
index 57a59f2cf0112f237578a40a04b3cae268c67c47..29591227d920cbad99303c0b707a06a457555497 100644
--- a/R/RunModel.Supervisor.R
+++ b/R/RunModel.Supervisor.R
@@ -120,7 +120,7 @@ RunModel.Supervisor <- function(x, RunOptions, Param, ...) {
     # Loop over sub-basin using SD model
     for (id in SD_Ids) {
       # Run model for the sub-basin and one time step
-      RunOptions[[id]]$IniStates <- serializeIniStates(x$OutputsModel[[id]]$StateEnd)
+      RunOptions[[id]]$IniStates <- serializeIniStates(x$OutputsModel[[id]]$StateEnd, x$InputsModel[[id]])
       RunOptions[[id]]$IndPeriod_Run <- iTS
       # Route upstream flows for SD nodes
       if (x$InputsModel[[id]]$isReservoir) {
diff --git a/R/utils.RunModel.R b/R/utils.RunModel.R
index dbf187bfb894844598d9b09ad1382b72f0005228..a881b678b9bbb0760449be014e5e798723709e5a 100644
--- a/R/utils.RunModel.R
+++ b/R/utils.RunModel.R
@@ -60,8 +60,26 @@ OutputsModelQsim <- function(InputsModel, OutputsModel, IndPeriod_Run) {
 #' @return A vector as in `RunOptions$IniStates`
 #' @noRd
 #'
-serializeIniStates <- function(IniStates) {
+serializeIniStates <- function(IniStates, InputsModel) {
+  ObjectClass <- class(InputsModel)
+  if (!"CemaNeige" %in% ObjectClass && any(is.na(IniStates$CemaNeigeLayers$G))) {
+    IniStates$CemaNeigeLayers$G <- NULL
+  }
+  if (!"CemaNeige" %in% ObjectClass && any(is.na(IniStates$CemaNeigeLayers$eTG))) {
+    IniStates$CemaNeigeLayers$eTG <- NULL
+  }
+  if (!"CemaNeige" %in% ObjectClass && any(is.na(IniStates$CemaNeigeLayers$Gthr))) {
+    IniStates$CemaNeigeLayers$Gthr <- NULL
+  }
+  if (!"CemaNeige" %in% ObjectClass && any(is.na(IniStates$CemaNeigeLayers$Glocmax))) {
+    IniStates$CemaNeigeLayers$Glocmax <- NULL
+  }
+  IniStates$Store$Rest <- rep(NA, 3)
   IniStates <- unlist(IniStates)
+  IniStates[is.na(IniStates) & !grepl("SD", names(IniStates))] <- 0
+  if ("monthly" %in% ObjectClass) {
+    IniStates <- IniStates[seq_len(NState)]
+  }
   return(IniStates)
 }