diff --git a/DESCRIPTION b/DESCRIPTION
index a8180bc49055cfb626d9a9b819569a71c8d3cd6e..b2be25dec8bbfc716249eb972e70332e0a35de14 100644
--- a/DESCRIPTION
+++ b/DESCRIPTION
@@ -1,8 +1,8 @@
 Package: airGR
 Type: Package
 Title: Suite of GR Hydrological Models for Precipitation-Runoff Modelling
-Version: 1.6.1.16
-Date: 2020-06-04
+Version: 1.6.2.1
+Date: 2020-06-05
 Authors@R: c(
   person("Laurent", "Coron", role = c("aut", "trl"), comment = c(ORCID = "0000-0002-1503-6204")),
   person("Olivier", "Delaigue", role = c("aut", "cre"), comment = c(ORCID = "0000-0002-7668-8468"), email = "airGR@inrae.fr"),
diff --git a/NEWS.md b/NEWS.md
index 488dde8cf33507c4f752722af1818637f96e951e..173a46a9284cfde05987613917c5c4da7443a314 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -1,5 +1,12 @@
 ## Release History of the airGR Package
 
+### 1.6.2.1 Release Notes (2020-06-05)
+
+#### New features
+
+- Add direct upstream flow not associated to an area in semi-distributed model
+
+____________________________________________________________________________________
 
 
 ### 1.6.1.11 Release Notes (2020-04-07)
diff --git a/R/RunModel.R b/R/RunModel.R
index 002c4d45457479f03c6cb71484db1e90ca03d27f..269cca120d19e7db59652aef8c146e15e1aefc43 100644
--- a/R/RunModel.R
+++ b/R/RunModel.R
@@ -14,27 +14,30 @@ RunModel <- function (InputsModel, RunOptions, Param, FUN_MOD) {
       TimeStep <- 60 * 60
     }
 
-    # total area
-    AreaTot <- sum(InputsModel$BasinAreas)
-
     # propagation time from upstream meshes to outlet
     PT <- InputsModel$LengthHydro / Param[length(Param)] / TimeStep
     HUTRANS <- rbind(1 - (PT - floor(PT)), PT - floor(PT))
 
     NbUpBasins <- length(InputsModel$LengthHydro)
     LengthTs <- length(OutputsModelDown$QsimDown)
-    OutputsModelDown$Qsim <- OutputsModelDown$QsimDown * InputsModel$BasinAreas[length(InputsModel$BasinAreas)] / AreaTot
+    OutputsModelDown$Qsim <- OutputsModelDown$QsimDown * InputsModel$BasinAreas[length(InputsModel$BasinAreas)] * 1E3
 
     for (upstream_basin in seq_len(NbUpBasins)) {
       Qupstream <- InputsModel$Qupstream[RunOptions$IndPeriod_Run, upstream_basin]
+      if(!is.na(InputsModel$BasinAreas[upstream_basin])) {
+        # Upstream flow with area needs to be converted to m3 by time step
+        Qupstream <- Qupstream * InputsModel$BasinAreas[upstream_basin] * 1E3
+      }
       OutputsModelDown$Qsim <- OutputsModelDown$Qsim +
         c(rep(0, floor(PT[upstream_basin])),
           Qupstream[(1 + floor(PT[upstream_basin])):LengthTs]) *
-        HUTRANS[1, upstream_basin] * InputsModel$BasinAreas[upstream_basin] / AreaTot +
+        HUTRANS[1, upstream_basin] +
         c(rep(0, floor(PT[upstream_basin] + 1)),
           Qupstream[(2 + floor(PT[upstream_basin])):LengthTs]) *
-        HUTRANS[2, upstream_basin] * InputsModel$BasinAreas[upstream_basin] / AreaTot
+        HUTRANS[2, upstream_basin]
     }
+    # Convert back Qsim to mm
+    OutputsModelDown$Qsim <- OutputsModelDown$Qsim / sum(InputsModel$BasinAreas, na.rm = TRUE) / 1E3
 
   } else {
 
diff --git a/tests/testthat/test-RunModel_LAG.R b/tests/testthat/test-RunModel_LAG.R
index 71b34a2103db5f4011551ccf72d222be1c84887d..42a18ceb240f9c51f0be93a844fdee3636efdd83 100644
--- a/tests/testthat/test-RunModel_LAG.R
+++ b/tests/testthat/test-RunModel_LAG.R
@@ -63,30 +63,22 @@ OutputsGR4JOnly <-
 
 test_that("Upstream basin with nil area should return same Qdown as GR4J alone", {
   UpstBasinArea = InputsModel$BasinAreas[1]
-  InputsModel$BasinAreas[1] <<- 0
+  InputsModel$BasinAreas[1] <- 0
   OutputsSD <-
     RunModel(InputsModel,
              RunOptions,
              Param = c(Param, 1),
              FUN_MOD = RunModel_GR4J)
   expect_equal(OutputsGR4JOnly$Qsim, OutputsSD$Qsim)
-  InputsModel$BasinAreas[1] <<- UpstBasinArea
 })
 
 test_that(
   "Downstream basin with nil area and nul upstream length should return same Qdown as Qupstream alone",
   {
-    InputsModelZeroDown <- CreateInputsModel(
-      FUN_MOD = RunModel_GR4J,
-      DatesR = BasinObs$DatesR,
-      Precip = BasinObs$P,
-      PotEvap = BasinObs$E,
-      Qupstream = matrix(Qupstream, ncol = 1),
-      LengthHydro = 0,
-      BasinAreas = c(BasinInfo$BasinArea, 0)
-    )
+    InputsModel$LengthHydro <- 0
+    InputsModel$BasinAreas <- c(BasinInfo$BasinArea, 0)
     OutputsSD <-
-      RunModel(InputsModelZeroDown,
+      RunModel(InputsModel,
                RunOptions,
                Param = c(Param, 1),
                FUN_MOD = RunModel_GR4J)
@@ -95,12 +87,12 @@ test_that(
 )
 
 ParamSD = c(Param, InputsModel$LengthHydro / (24 * 60 * 60)) # Speed corresponding to one time step delay
-OutputsSD <-
-  RunModel(InputsModel, RunOptions, Param = ParamSD, FUN_MOD = RunModel_GR4J)
 
 test_that("1 input with lag of 1 time step delay out gives an output delayed of one time step", {
   QlsGR4Only <-
     OutputsGR4JOnly$Qsim * InputsModel$BasinAreas[2] * 1E6 / 86400
+  OutputsSD <-
+    RunModel(InputsModel, RunOptions, Param = ParamSD, FUN_MOD = RunModel_GR4J)
   QlsSdSim <-
     OutputsSD$Qsim * sum(InputsModel$BasinAreas) * 1E6 / 86400
   QlsUpstLagObs <-
@@ -130,3 +122,23 @@ test_that("Params from calibration with simulated data should be similar to init
     )
   expect_equal(OutputsCalib$ParamFinalR, ParamSD, tolerance = 1E-3)
 })
+
+test_that("1 no area input with lag of 1 time step delay out gives an output delayed of one time step converted to mm", {
+  Qm3GR4Only <-
+    OutputsGR4JOnly$Qsim * InputsModel$BasinAreas[2] * 1E3
+  # Specify that upstream flow is not related to an area
+  InputsModel$BasinAreas = c(NA, BasinInfo$BasinArea)
+  # Convert upstream flow to Liter/day
+  InputsModel$Qupstream <- matrix(Qupstream, ncol = 1) * BasinInfo$BasinArea * 2
+  OutputsSD <-
+    RunModel(InputsModel, RunOptions, Param = ParamSD, FUN_MOD = RunModel_GR4J)
+  
+  expect_false(any(is.na(OutputsSD$Qsim)))
+  
+  Qm3SdSim <-
+    OutputsSD$Qsim * sum(InputsModel$BasinAreas, na.rm = TRUE) * 1E3
+  Qm3UpstLagObs <-
+    c(0, InputsModel$Qupstream[Ind_Run[1:(length(Ind_Run) - 1)] + 1])
+  
+  expect_equal(Qm3SdSim - Qm3GR4Only, Qm3UpstLagObs)
+})