diff --git a/workspace/00_get_data.Rmd b/workspace/00_get_data.Rmd
index 0e5779524ea69edae35573d10786450417e3a563..35221327b35d169a0100c40625f0f161c4eb34c6 100644
--- a/workspace/00_get_data.Rmd
+++ b/workspace/00_get_data.Rmd
@@ -281,13 +281,18 @@ waterbodies_path <- file.path(nhdplus_dir, "nhdplus_waterbodies.rds")
 if(!file.exists(waterbodies_path)) {
   message("formatting NHDPlus watebodies...")
   
-  data.table::rbindlist(list(
+  data.table::rbindlist(
+    list(
+    
     read_sf(out_list$nhdplus_gdb, "NHDWaterbody") |>
       st_transform(proj_crs) |>
       mutate(layer = "NHDWaterbody"), 
+    
     read_sf(out_list$nhdplus_gdb, "NHDArea") |>
       st_transform(proj_crs) |>
-      mutate(layer = "NHDArea")), fill = TRUE) |>
+      mutate(layer = "NHDArea")
+    
+    ), fill = TRUE) |>
     st_as_sf() |>
     saveRDS(waterbodies_path)
   
@@ -305,114 +310,37 @@ when aggregating at points of interest.
 fullcat_path <- file.path(nhdplus_dir, "nhdcat_full.rds")
 islandcat_path <- file.path(islands_dir, "nhdcat_full.rds")
 
-# Create full cat dataset
-if(!file.exists(fullcat_path)){
-  
-  cat_tab <- cat_rpu(out_list$ref_cat, nhdplus_gdb)
-  saveRDS(cat_tab, fullcat_path)
-  
-  island_tab <- cat_rpu(out_list$islands_gdb, islands_gdb)
-  saveRDS(island_tab, islandcat_path)
-}
+if(!file.exists(fullcat_path))
+  saveRDS(cat_rpu(out_list$ref_cat, nhdplus_gdb), 
+          fullcat_path)
+
+if(!file.exists(islandcat_path))
+  saveRDS(cat_rpu(out_list$islands_gdb, islands_gdb), 
+          islandcat_path)
   
-out_list <- c(out_list, list(fullcats_table = fullcat_path)) 
-out_list <- c(out_list, list(islandcats_table = islandcat_path))
+out_list <- c(out_list, list(fullcats_table = fullcat_path, islandcats_table = islandcat_path)) 
+
 ```
 
 Download NHDPlusV2 FDR and FAC grids for refactoring and catcment splitting.
 
 ```{r NHDPlusV2 FDR_FAC}
 # NHDPlus FDR/FAC grids available by raster processing unit
+# TODO: set this up for a per-region download for #134
+out_list<- c(out_list, make_fdr_fac_list(file.path(data_dir, "fdrfac")))
 
-fdr_fac_dir <- file.path(data_dir, "fdrfac")
-
-if(!dir.exists(fdr_fac_dir)) {
-  dir.create(fdr_fac_dir, recursive = TRUE, showWarnings = FALSE)
-
-  download_elev("FDRFAC", fdr_fac_dir)
-}
-
-dirs <- unique(dirname(list.files(fdr_fac_dir, recursive = TRUE, 
-                                  full.names = TRUE)))
-fdr <- dirs[grepl(".*/fdr$", dirs)]
-fac <- dirs[grepl(".*/fac$", dirs)]
-
-out <- list(fdr = list(), fac = list())
-
-rpu <- substr(fdr, (nchar(fdr) - 6), (nchar(fdr) - 4))
-
-out$fdr <- as.list(setNames(fdr, paste0("rpu_", rpu)))
-out$fac <- as.list(setNames(fac, paste0("rpu_", rpu)))
-
-out_list<- c(out_list, out)
 ```
 
 Download NHDPlusV2 elevation grids for headwater extensions and splitting 
 catchments into left and right banks.
 
 ```{r NHDPlusV2 elev}
-# NHDPlus FDR/FAC grids available by raster processing unit
-
-elev_dir <- file.path(data_dir, "nhdplusv2_elev")
-
-if(!dir.exists(elev_dir)) {
-  dir.create(elev_dir, recursive = TRUE, showWarnings = FALSE)
+# NHDPlus elev grids available by raster processing unit
+# TODO: set this up for a per-region download for #134
+out_list<- c(out_list, make_nhdplus_elev_list(file.path(data_dir, "nhdplusv2_elev")))
 
-  download_elev("DEM", elev_dir)
-}
-
-dirs <- unique(dirname(list.files(elev_dir, recursive = TRUE, 
-                                  full.names = TRUE)))
-elev_cm <- dirs[grepl(".*/elev_cm$", dirs)]
-
-out <- list(elev_cm = list())
-
-rpu <- substr(elev_cm, (nchar(elev_cm) - 10), (nchar(elev_cm) - 8))
-
-out$elev_cm <- as.list(setNames(elev_cm, paste0("rpu_", rpu)))
-
-out_list<- c(out_list, out)
 ```
 
-Download the current WBD snapshot.
-
-```{r WBD}
-# Snapshot of National WBD
-
-wbd_dir <- file.path(data_dir, "wbd")
-
-wbd_file <- "WBD_National_GDB"
-if(!dir.exists(wbd_dir)) {
-  
-  dir.create(wbd_dir, recursive = TRUE)
-  wbd <- download.file(
-    "https://prd-tnm.s3.amazonaws.com/StagedProducts/Hydrography/WBD/National/GDB/WBD_National_GDB.zip",
-    destfile = file.path(wbd_dir, "WBD_National_GDB.zip"), mode = "wb")
-}
-
-out_gdb <- file.path(wbd_dir, paste0(wbd_file, ".gdb"))
-out <- list(latest_wbd = file.path(wbd_dir, "WBD.rds"))
-
-if(!file.exists(out$latest_wbd)) {
-  wbd <- file.path(wbd_dir, paste0(wbd_file, ".zip"))
-  system(paste0(sevenz,  " x ", wbd, " -o", wbd_dir), 
-         ignore.stdout = TRUE, intern = TRUE)
-  
-  # Read the feature class
-  wbdfc <- sf::read_sf(out_gdb,
-                       "WBDHU12") %>% 
-    st_as_sf() %>% 
-    st_transform(crs = proj_crs)
-  
-  saveRDS(wbdfc, out$latest_wbd)
-}
-
-out_rds <- list(latest_wbd_rds = out$latest_wbd)
-
-out_list <- c(out_list, out_rds)
-```
-
-
 Merrit Topographic and Hydrographic data for deriving GIS Features of the 
 National Hydrologic Modeling, Alaska Domain
 
@@ -427,72 +355,35 @@ National Hydrologic Modeling, Alaska Domain
 
 merit_dir <- file.path(data_dir, "merged_AK_MERIT_Hydro")
 
-out <- list(merit_catchments = file.path(merit_dir, "merged_AK_MERIT_Hydro",
-                                         "cat_pfaf_78_81_82_MERIT_Hydro_v07_Basins_v01.shp"),
-            merit_rivers = file.path(merit_dir, "merged_AK_MERIT_Hydro",
-                                     "riv_pfaf_78_81_82_MERIT_Hydro_v07_Basins_v01.shp"),
-            aster_dem = file.path(merit_dir, "dem.tif"),
-            merit_dem = file.path(merit_dir, "ak_merit_dem.tif"),
-            merit_fdr = file.path(merit_dir, "ak_merit_fdr.tif"),
-            merit_fac = file.path(merit_dir, "ak_merit_fac.tif"))
-
-if(!dir.exists(merit_dir)) {
-  dir.create(merit_dir, recursive = TRUE, showWarnings = FALSE)
-  
-  m <- "merged_AK_MERIT_Hydro.zip"
-  check_auth()
-  sbtools::item_file_download("5dbc53d4e4b06957974eddae", names = m, 
-                              destinations = file.path(merit_dir, m))
-  
-  unzip(file.path(merit_dir, m), exdir = merit_dir)
-  
-  rm(m)
-
-  get_sbfile <- function(f, itm) {
-    if(!file.exists(o <- gsub("zip", "tif", f))) {
-      check_auth()
-      sbtools::item_file_download(itm, names = basename(f), 
-                                destinations = f)
-    }
-    #unzip(f, exdir = merit_dir)
-    system(paste0(sevenz,  " x ", f, " -o", merit_dir), ignore.stdout = TRUE, 
-           intern = TRUE)
-    return(o)
-  
-  }
-  
-  # Out folders
-  out <- list(aster_dem = get_sbfile(file.path(merit_dir, "dem.zip"), 
-                                   "5fbbc6b6d34eb413d5e21378"),
-            merit_dem = get_sbfile(file.path(merit_dir, 
-                                             "ak_merit_dem.zip"), 
-                                   "5fbbc6b6d34eb413d5e21378"),
-            merit_fdr = get_sbfile(file.path(merit_dir, 
-                                             "ak_merit_fdr.zip"), 
-                                   "64ff628ed34ed30c2057b430"),
-            merit_fac = get_sbfile(file.path(merit_dir, 
-                                             "ak_merit_fac.zip"), 
-                                   "64ff628ed34ed30c2057b430"))
-
-  out <- list(aster_dem = get_sbfile(file.path(merit_dir, "dem.zip"), "5fbbc6b6d34eb413d5e21378"),
-              merit_dem = get_sbfile(file.path(merit_dir, 
-                                               "ak_merit_dem.zip"), "5fc51e65d34e4b9faad8877b"),
-              merit_fdr = get_sbfile(file.path(merit_dir, 
-                                               "ak_merit_fdr.zip"), "5fc51e65d34e4b9faad8877b"),
-              merit_fac = get_sbfile(file.path(merit_dir, 
-                                               "ak_merit_fac.zip"), "5fc51e65d34e4b9faad8877b"))
-  
-}
+get_sb_file("5dbc53d4e4b06957974eddae", "merged_AK_MERIT_Hydro.zip", merit_dir)
 
+# TODO: update to use "6644f85ed34e1955f5a42dc4" when released (roughly Dec 10,)
+get_sb_file("5fbbc6b6d34eb413d5e21378", "dem.zip", merit_dir)
 
+get_sb_file("64ff628ed34ed30c2057b430", 
+            c("ak_merit_dem.zip", "ak_merit_fdr.zip", "ak_merit_fac.zip"),
+            merit_dir)
 
-out_list <- c(out_list, out)
-```
+out_list <- c(
+  out_list, 
+  list(merit_catchments = file.path(merit_dir, 
+                                    "merged_AK_MERIT_Hydro", 
+                                    "cat_pfaf_78_81_82_MERIT_Hydro_v07_Basins_v01.shp"),
+       merit_rivers = file.path(merit_dir, 
+                                "merged_AK_MERIT_Hydro", 
+                                "riv_pfaf_78_81_82_MERIT_Hydro_v07_Basins_v01.shp"),
+       aster_dem = file.path(merit_dir, "dem.tif"),
+       merit_dem = file.path(merit_dir, "ak_merit_dem.tif"),
+       merit_fdr = file.path(merit_dir, "ak_merit_fdr.tif"),
+       merit_fac = file.path(merit_dir, "ak_merit_fac.tif")))
 
-Source data for deriving GIS Featurs of the National Hydrologic Modeling, 
+```
+  
+  Source data for deriving GIS Featurs of the National Hydrologic Modeling, 
 Alaska Domain
 
 ```{r AK GF Source data}
+# TODO: fix this citation
 #  Bock, A.R., Rosa, S.N., McDonald, R.R., Wieczorek, M.E., Santiago, M., 
 #  Blodgett, D.L., and Norton, P.A., 2024,   Geospatial Fabric for National 
 #  Hydrologic Modeling, Hawaii Domain: U.S. Geological Survey data release,  
@@ -501,18 +392,10 @@ Alaska Domain
 AK_GF_source <- "ak.7z"
 AK_dir <- file.path(data_dir, "AK")
 
-if(!dir.exists(AK_dir)) {
-  dir.create(AK_dir, recursive = TRUE)
-  check_auth()
-  sbtools::item_file_download("5dbc53d4e4b06957974eddae", names = AK_GF_source, 
-                              destinations = file.path(AK_dir, AK_GF_source))
-  
-  system(paste0(sevenz, " e -o", AK_dir, " ", file.path(AK_dir, AK_GF_source)))
-  
-} else {
-  out_ak <- list(ak_source = file.path(AK_dir, "ak.gpkg"))
-  out_list <- c(out_list, out_ak)
-}
+get_sb_file("5dbc53d4e4b06957974eddae", AK_GF_source, AK_dir)
+
+out_list <- c(out_list, list(ak_source = file.path(AK_dir, "ak.gpkg")))
+
 ```
 
 Source data for deriving GIS Featurs of the National Hydrologic Modeling, 
@@ -524,80 +407,10 @@ Hawaii Domain
 #  Hydrologic Modeling, Hawaii Domain: U.S. Geological Survey data release,  
 #  https://doi.org/10.5066/P9HMKOP8
 
-HI_GF_source <- "hi.7z"
-out_hi <- list(hi_source = file.path(islands_dir, "hi.gpkg"))
+get_sb_file("5dbc53d4e4b06957974eddae", "hi.7z", islands_dir)
 
-if(!file.exists(file.path(islands_dir, "hi.gpkg"))) {
-  check_auth()
-  sbtools::item_file_download("5dbc53d4e4b06957974eddae", names = HI_GF_source, 
-                              destinations = file.path(islands_dir, 
-                                                       HI_GF_source))
-  
-  system(paste0(sevenz, " e -o", islands_dir, " ", 
-                file.path(islands_dir, HI_GF_source)))
-} 
+out_list <- c(out_list, list(hi_source = file.path(islands_dir, "hi.gpkg")))
 
-out_list <- c(out_list, out_hi)
-```
-
-National Water Model Network Topology
-
-```{r nwm_topology}
-nwm_targz_url <- 
-  "https://www.nohrsc.noaa.gov/pub/staff/keicher/NWM_live/NWM_parameters/NWM_parameter_files_v2.1.tar.gz"
-nwm_parm_url <- 
-  "https://www.nohrsc.noaa.gov/pub/staff/keicher/NWM_live/web/data_tools/NWM_v2.1_channel_hydrofabric.tar.gz"
-
-targz <- file.path(data_dir, basename(nwm_targz_url))
-
-out <- list(nwm_network = file.path(data_dir, "NWM_parameters_v2.1", "RouteLink_CONUS.nc"))
-
-if(!file.exists(out$nwm_network)) {
-  options(timeout = 60000)
-  download.file(nwm_targz_url, destfile = targz)
-  
-  utils::untar(targz, exdir = data_dir)
-  
-}
-
-out_list <- c(out_list, out)
-
-parmtgz <- file.path(data_dir, basename(nwm_parm_url))
-
-out <- list(nwm_parm = file.path(data_dir,
-                                 "NWM_v2.1_channel_hydrofabric_10262020",
-                                 "nwm_v2_1_hydrofabric.gdb"))
-
-if(!file.exists(out$nwm_parm)) {
-
-  download.file(nwm_parm_url, destfile = parmtgz)
-
-  utils::untar(parmtgz, exdir = data_dir)
-
-}
-
-out_list <- c(out_list, out)
-
-```
-
-e2nhd Network Attributes 
-
-```{r nhdplus_attributes}
-#  Blodgett, D.L., 2023, Updated CONUS river network attributes based on the 
-#  E2NHDPlusV2 and NWMv2.1 networks (ver. 2.0, February 2023): U.S. Geological 
-#  Survey data release, https://doi.org/10.5066/P976XCVT.
-
-out <- list(new_nhdp_atts = file.path("cache", 
-                                      (sb_f <- "enhd_nhdplusatts.csv")))
-
-if(!file.exists(out$new_nhdp_atts)) {
-  check_auth()
-  sbtools::item_file_download("63cb311ed34e06fef14f40a3",
-                              names = sb_f,
-                              destinations = out$new_nhdp_atts)
-}
-
-out_list <- c(out_list, out)
 ```
 
 GIS Features of the Geospatial Fabric for National Hydrologic Modeling, 
@@ -610,65 +423,39 @@ version 1.1, Transboundary Geospatial Fabric
 #  https://doi.org/10.5066/P971JAGF.
 
 GFv11_dir <- file.path(data_dir, "GFv11")
+
 out <- list(GFv11_gages_lyr = file.path(data_dir, "GFv11/GFv11_gages.rds"),
             GFv11_gdb = file.path(GFv11_dir, "GFv1.1.gdb"),
             GFv11_tgf = file.path(GFv11_dir, "TGF.gdb"))
 
-# Download the GFv1.1 geodatabase
-if(!dir.exists(GFv11_dir)) {
-  dir.create(GFv11_dir, recursive = TRUE)
-  check_auth()
-  sbtools::item_file_download("5e29d1a0e4b0a79317cf7f63", 
-                              names = "GFv1.1.gdb.zip", 
-                              destinations = file.path(GFv11_dir, 
-                                                       "GFv1.1.gdb.zip"))
-  
-  tgf_f <- file.path(GFv11_dir, "TGF.gdb.zip")
-  check_auth()
-  sbtools::item_file_download("5d967365e4b0c4f70d113923", 
-                              names = basename(tgf_f), 
-                              destinations = tgf_f)
-  
-  unzip(file.path(GFv11_dir, "GFv1.1.gdb.zip"), exdir = GFv11_dir)
-  unzip(tgf_f, exdir = GFv11_dir)
-  
-  file.remove(tgf_f)
-  # Extract gages
-  GFv11_gages <- read_sf(out$GFv11_gdb, "POIs_v1_1") %>%
-    filter(Type_Gage != 0) 
-  
-  saveRDS(GFv11_gages, out$GFv11_gages_lyr)
-  
-  file.remove(file.path(GFv11_dir, "GFv1.1.gdb.zip"))
-}
+get_sb_file("5e29d1a0e4b0a79317cf7f63", "GFv1.1.gdb.zip", GFv11_dir)
+
+get_sb_file("5d967365e4b0c4f70d113923", "TGF.gdb.zip", GFv11_dir)
+
+cat("", file = file.path(GFv11_dir,  "GFv1.1.gdb.zip"))
+cat("", file = file.path(GFv11_dir,  "TGF.gdb.zip"))
+
+# Extract gages
+read_sf(out$GFv11_gdb, "POIs_v1_1") |>
+  filter(Type_Gage != 0) |>
+  saveRDS(out$GFv11_gages_lyr)
 
 out_list <- c(out_list, out)
+
 if(mapview)(mapview(readRDS(out_list$GFv11_gages_lyr)))
 ```
 
 GAGESII dataset
 
 ```{r Gages_II}
-# https://doi.org/10.3133/70046617
-
-if(!dir.exists(SWIM_points_path)) 
-  dir.create(SWIM_points_path, recursive = TRUE)
+# Falcone, J., 2011, GAGES-II: Geospatial Attributes of Gages for Evaluating 
+# Streamflow: U.S. Geological Survey data release, https://doi.org/10.5066/P96CPHOT. 
 
-g2_out <- list(gagesii_lyr = file.path(SWIM_points_path, 
-                                       "gagesII_9322_point_shapefile"))
+get_sb_file("631405bbd34e36012efa304a", "gagesII_9322_point_shapefile.zip", SWIM_points_path)
 
-gagesII_url <- "https://water.usgs.gov/GIS/dsdl/gagesII_9322_point_shapefile.zip"
+out_list <- c(out_list, list(
+  gagesii_lyr = file.path(SWIM_points_path, "gagesII_9322_point_shapefile")))
 
-zip <- file.path(SWIM_points_path, basename(gagesII_url))
-
-if(!file.exists(g2_out$gagesii_lyr)) {
-  
-  download.file(gagesII_url, destfile = zip)
-  
-  unzip(zip, exdir = g2_out$gagesii_lyr)
-}
-
-out_list <- c(out_list, g2_out)
 if(mapview)(mapview(read_sf(out_list$gagesii_lyr)))
 ```
 
@@ -684,25 +471,16 @@ locations
 hilarri_dir <- file.path(data_dir, "HILARRI")
 hilarri_out <- list(hilari_sites = file.path(hilarri_dir, "HILARRI_v2.csv"))
 
-# Download the HILARRI points
-if(!dir.exists(hilarri_dir)) 
-  dir.create(hilarri_dir, recursive = TRUE)
-
-hilarri_url <- "https://hydrosource.ornl.gov/sites/default/files/2023-03/HILARRI_v2.zip"
+download_file("https://hydrosource.ornl.gov/sites/default/files/2023-03/HILARRI_v2.zip", 
+              out_path = hilarri_dir, check_path = hilarri_out$hilari_sites)
 
-if(!file.exists(file.path(hilarri_dir, "HILARRI_v2.csv"))){
-  download.file(hilarri_url,
-                dest = file.path(hilarri_dir, basename(hilarri_url)), 
-                mode = "wb")
-  
-  unzip(file.path(hilarri_dir, basename(hilarri_url)), exdir = hilarri_dir)
-}
 out_list <- c(out_list, hilarri_out)
 
-if(mapview){
-  hill_sf <- st_as_sf(read.csv(out_list$hilari_sites),
-                      coords = c("longitude", "latitude"), crs = 4326)
-  mapview(hill_sf)}
+if(mapview) {
+  mapview(st_as_sf(read.csv(out_list$hilari_sites),
+                      coords = c("longitude", "latitude"), 
+                   crs = 4326))
+}
 
 ```
 
@@ -722,51 +500,44 @@ ResOpsUS dataset and indexed locations
 #  management. Frontiers in Ecology and the Environment 9 (9): 494-502.
 #  https://ln.sync.com/dl/bd47eb6b0/anhxaikr-62pmrgtq-k44xf84f-pyz4atkm/view/default/447819520013
 
+res_path <- file.path(data_dir,"reservoir_data")
+
 # Set Data download links
 res_att_url <- "https://zenodo.org/record/5367383/files/ResOpsUS.zip?download=1"
 # ISTARF  - Inferred Storage Targets and Release Functions for CONUS large reservoirs
 istarf_url <- "https://zenodo.org/record/4602277/files/ISTARF-CONUS.csv?download=1"
 # Download GRanD zip from above
-GRanD_zip <- "GRanD_Version_1_3.zip"
+GRanD_zip <- file.path(res_path, "GRanD_Version_1_3.zip")
 
-# - ResOpsUS - reservoir operations
-res_path <- file.path(data_dir,"reservoir_data")
-if(!dir.exists(res_path)) 
-  dir.create(res_path, recursive = TRUE)
+download_file(res_att_url, res_path, file_name = "ResOpsUS.zip")
+
+tab_out <- c(out_list, list(res_attributes = file.path(res_path, "ResOpsUS", "attributes", 
+                                                       "reservoir_attributes.csv")))
 
-the_ex_dir <- file.path(res_path, "ResOpsUS")
-tab_out <- list(res_attributes = file.path(the_ex_dir, "attributes", 
-                                           "reservoir_attributes.csv"))
-# Download istarf data
 istarf_csv <- file.path(res_path, "ISTARF-CONUS.csv")
-if(!file.exists(istarf_csv)) {
-  download.file(istarf_url, destfile = istarf_csv, mode = "wb")
-}
-tab_out <- list(istarf = istarf_csv)
-out_list <- c(out_list, tab_out)
+
+download_file(istarf_url, res_path, istarf_csv, file_name = "ISTARF-CONUS.csv")
+
+out_list <- c(out_list, list(istarf = istarf_csv))
+
+grand_dir <- file.path(res_path, "GRanD_Version_1_3")
 
 # Extract GRanD data
-if(!file.exists(GRanD_zip)) {
-  # set mode wb for a file of type zip
-  unzip(file.path(res_path, GRanD_zip), exdir = res_path)
-} else {
-  print("Download GRanD data")
+if(!dir.exists(grand_dir)) {
+  if(!file.exists(GRanD_zip)) 
+    stop("Download GRanD data from https://ln.sync.com/dl/bd47eb6b0/anhxaikr-62pmrgtq-k44xf84f-pyz4atkm/view/default/447819520013 to ",
+         res_path)
+  
+  unzip(GRanD_zip, exdir = res_path)
 }
-out_list <- c(out_list, tab_out)
 
-# crosswalk of selected (fit %in% c("full", "storage_only") 595 ResOpsUS to NID 
-#   - derived by msant and abock; currently hosted at GFv2 POI Source data page
+out_list <- c(out_list, list(GRanD = grand_dir))
+
 resops_to_nid_path <- file.path(res_path, "cw_ResOpsUS_NID.csv")
 
-if(!file.exists(resops_to_nid_path)) {
-    check_auth()
-    sbtools::item_file_download("5dbc53d4e4b06957974eddae", 
-                                names = "cw_ResOpsUS_NID.csv", 
-                                destinations = resops_to_nid_path)
-}
+get_sb_file("5dbc53d4e4b06957974eddae", "cw_ResOpsUS_NID.csv", resops_to_nid_path)
 
-tab_out <- list(resops_NID_CW = resops_to_nid_path)
-out_list <- c(out_list, tab_out)
+out_list <- c(out_list, list(resops_NID_CW = resops_to_nid_path))
 ```
 
 All Hydro-linked Network Data Index (NLDI) datasets
@@ -777,23 +548,8 @@ All Hydro-linked Network Data Index (NLDI) datasets
 
 nldi_dir <- file.path(data_dir, "nldi")
 
-# Download the HILARRI points
-if(!dir.exists(nldi_dir)) 
-  dir.create(nldi_dir, recursive = TRUE)
-
-nldi_list <- item_list_files("60c7b895d34e86b9389b2a6c", recursive = FALSE, 
-                             fetch_cloud_urls = TRUE)
-
-for (fname in nldi_list$fname){
-  print(fname)
-  floc <- file.path(nldi_dir, fname)
-  if(!file.exists(floc)){
-    #check_auth()
-    sbtools::item_file_download("60c7b895d34e86b9389b2a6c", 
-                                names = fname, 
-                                destinations = floc)
-    }
-}
+get_sb_file("60c7b895d34e86b9389b2a6c", "all", nldi_dir)
+
 ```
 
 ```{r}
diff --git a/workspace/R/1_get_data.R b/workspace/R/1_get_data.R
index 53e00d97a4ab2ddfb75186537546499fd1e28da5..be28d955b519bc7657d4213b7be7bff66f97e5d6 100644
--- a/workspace/R/1_get_data.R
+++ b/workspace/R/1_get_data.R
@@ -42,14 +42,17 @@ get_sb_file <- function(item, item_files, out_destination, unzip = TRUE) {
 #' @param url character url where the file can be retrieved
 #' @param out_path character path the directory to save the downloaded file
 #' @param check_path character path to check that should exist when done
+#' @param file_name character name to use instead of basename of url
 #' @param unzip logical whether to try to unzip the file
-download_file <- function(url, out_path, check_path = NULL, unzip = TRUE) {
+download_file <- function(url, out_path, check_path = NULL, unzip = TRUE, file_name = NULL) {
 
-  if(file.exists(check_path)) return(invisible(check_path))
+  if(!is.null(check_path) && file.exists(check_path)) return(invisible(check_path))
 
   dir.create(out_path, showWarnings = FALSE, recursive = TRUE)
   
-  out <- file.path(out_path, basename(url))
+  if(is.null(file_name)) file_name <- basename(url)
+  
+  out <- file.path(out_path, file_name)
   
   if(!file.exists(out)) {
     httr::RETRY("GET", url, httr::write_disk(out))
@@ -59,7 +62,49 @@ download_file <- function(url, out_path, check_path = NULL, unzip = TRUE) {
     
   }
   
-  if(file.exists(check_path)) return(invisible(check_path))
+  if(!is.null(check_path) && file.exists(check_path)) return(invisible(check_path))
+  
+  if(!is.null(check_path))
+    stop("did not create ", check_path)
+}
+
+#' make flow direction and flow accumulation file list
+#' @param fdr_fac_dir directory where flow direction and flow accumulation are
+#' @return list containing all flow direction and flow accumulation files
+make_fdr_fac_list <- function(fdr_fac_dir) {
+  if(!dir.exists(fdr_fac_dir))
+    download_elev("FDRFAC", fdr_fac_dir)
+  
+  dirs <- unique(dirname(list.files(fdr_fac_dir, recursive = TRUE, full.names = TRUE)))
+  
+  fdr <- dirs[grepl(".*/fdr$", dirs)]
+  fac <- dirs[grepl(".*/fac$", dirs)]
+  
+  out <- list(fdr = list(), fac = list())
+  
+  rpu <- substr(fdr, (nchar(fdr) - 6), (nchar(fdr) - 4))
+  
+  out$fdr <- as.list(setNames(fdr, paste0("rpu_", rpu)))
+  out$fac <- as.list(setNames(fac, paste0("rpu_", rpu)))
+  
+  out
+}
+
+make_nhdplus_elev_list <- function(elev_dir) {
+  
+  if(!dir.exists(elev_dir))
+    download_elev("DEM", elev_dir)
+  
+  dirs <- unique(dirname(list.files(elev_dir, recursive = TRUE, full.names = TRUE)))
+  
+  elev_cm <- dirs[grepl(".*/elev_cm$", dirs)]
   
-  stop("did not create ", check_file)
-}
\ No newline at end of file
+  out <- list(elev_cm = list())
+  
+  rpu <- substr(elev_cm, (nchar(elev_cm) - 10), (nchar(elev_cm) - 8))
+  
+  out$elev_cm <- as.list(setNames(elev_cm, paste0("rpu_", rpu)))
+  
+  out
+  
+}