diff --git a/R/CreateGRiwrm.R b/R/CreateGRiwrm.R
index 456290093f4467e65e14e2ab279f4c00df8d980c..6ff7945830ecb56f856eec834b2f6a56de19b9a3 100644
--- a/R/CreateGRiwrm.R
+++ b/R/CreateGRiwrm.R
@@ -146,11 +146,14 @@ getNodeRanking <- function(griwrm) {
     g <- g[!g$id %in% upIds, ]
     #Search for ungauged ids
     upIds <- unique(g$id[!g$id %in% g$down & g$id != g$donor])
-    for(upId in upIds) {
+    while(length(upIds) > 0) {
+      upId <- upIds[1]
       #Browse the ungauged sub-network until the donor
-      g2 <- g %>% filter(donor == g$donor[g$id == upId])
+      upDonor <- g$donor[g$id == upId]
+      g2 <- g %>% filter(donor == upDonor)
       g2$donor <- g2$id
       ungaugedIds <- getNodeRanking(g2)
+      upIds <- upIds[!upIds %in% ungaugedIds]
       r <- c(r, ungaugedIds)
       g <- g[!g$id %in% ungaugedIds, ]
     }