diff --git a/DESCRIPTION b/DESCRIPTION
index db0c7da3757143d024ddf15b641fa32f63b85a81..7aca8b5a54bc6491cbb6767419029c3adcec22da 100644
--- a/DESCRIPTION
+++ b/DESCRIPTION
@@ -1,6 +1,6 @@
 Package: inldata
 Title: Collection of Datasets for the USGS-INL Monitoring Networks
-Version: 1.2.6
+Version: 1.2.7
 Authors@R: c(
     person(given = c("Jason", "C."),
            family = "Fisher", role = c("aut", "cre"),
diff --git a/NEWS.md b/NEWS.md
index 7dacf38f0f4a22941875b9f340ebfa08f9e70914..11581bfed5c1bd650cc9064f69c8e4d5a9823b21 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -1,3 +1,8 @@
+# inldata 1.2.7
+
+- Calculate the water level in feet above vertical datum (`gwl$sl_lev_va`) rather than download from NWIS.
+  This change addresses a backward compatibility issue introduced in version 2.7.16 of the **dataRetrieval** package.
+
 # inldata 1.2.6
 
 - Remove `full_names` argument from `write_datasets` function.
diff --git a/R/make_datasets.R b/R/make_datasets.R
index 77698214979ea4c5c5a85b0f515b3c2be35b30f5..f0e37d8445da9e708aa2a9f07ebfe6734b12095b 100644
--- a/R/make_datasets.R
+++ b/R/make_datasets.R
@@ -1159,13 +1159,10 @@ mds_gwl <- function(sites, tz) {
   checkmate::assert_class(sites, classes = "sf")
   checkmate::assert_string(tz)
 
-  # download data from NWIS
+  # download depth to water level in feet below land surface from NWIS
   d <- dataRetrieval::readNWISgwl(
     siteNumbers = sites$site_no,
-    parameterCd = c(
-      "72019", # depth to water level, in feet below land surface.
-      "62611" # groundwater level above NAVD 88, in feet
-    ),
+    parameterCd = "72019",
     convertType = FALSE
   )
 
@@ -1191,11 +1188,11 @@ mds_gwl <- function(sites, tz) {
   d$lev_va <- as.numeric(d$lev_va)
   d$sl_lev_va <- as.numeric(d$sl_lev_va)
 
-  # place water-level depth and elevation on same row
-  d$id <- paste(d$site_no, d$site_tp_cd, d$lev_dt)
-  sl <- d[d$parameter_cd == "62611", c("id", "sl_lev_va")]
+  # calculate water level in feet above vertical datum
+  idxs <- match(d$site_no, sites$site_no)
+  d$alt_va <- sites$alt_va[idxs]
+  d$sl_lev_va <- d$alt_va - d$lev_va
   cols <- c(
-    "id",
     "site_nm",
     "site_no",
     "lev_dt",
@@ -1203,11 +1200,10 @@ mds_gwl <- function(sites, tz) {
     "lev_meth_cd",
     "lev_status_cd",
     "lev_age_cd",
-    "lev_va"
+    "lev_va",
+    "sl_lev_va"
   )
-  d <- d[d$parameter_cd == "72019", cols]
-  d <- merge(d, sl, by = "id")
-  d$id <- NULL
+  d <- d[, cols]
 
   # remove missing values
   is <- is.na(d$lev_va) | is.na(d$sl_lev_va)
@@ -1227,8 +1223,13 @@ mds_gwl <- function(sites, tz) {
   lev_acy <- c("0" = 1, "1" = 0.1, "2" = 0.01)
   d$lev_acy_va <- lev_acy[match(d$lev_acy_cd, names(lev_acy))]
   d$lev_acy_cd <- NULL
-  d$sl_lev_acy_va <- sites$alt_acy_va[match(d$site_no, sites$site_no)] + d$lev_acy_va
+  idxs <- match(d$site_no, sites$site_no)
+  d$sl_lev_acy_va <- sites$alt_acy_va[idxs] + d$lev_acy_va
+
+  # round water level in feet above vertical datum
+  d$sl_lev_va <- round(d$sl_lev_va / d$sl_lev_acy_va) * d$sl_lev_acy_va
 
+  # set factor class
   d$lev_meth_cd <- as.factor(d$lev_meth_cd)
   d$lev_status_cd <- as.factor(d$lev_status_cd)
   d$lev_age_cd <- as.factor(d$lev_age_cd)
diff --git a/data-raw/output.log b/data-raw/output.log
index a9a90291797cd6bad345970ae5fee57e04f5652f..4fd51de2e3c9f77d96aaeee936c35bfda1a6a554 100644
--- a/data-raw/output.log
+++ b/data-raw/output.log
@@ -1,7 +1,7 @@
 running
   '/usr/lib/R/bin/R --no-echo --no-restore --no-save --no-restore --file=data-raw/make-datasets.R'
 
-TIMESTAMP: 2024-07-25 09:33:22 PDT
+TIMESTAMP: 2024-07-30 21:39:41 PDT
 
 STATUS: making 'crs' dataset ...
 STATUS: making 'parameters' dataset ...
@@ -289,7 +289,6 @@ Warning: Removed duplicated timestamp records:
 STATUS: making 'gwl' dataset ...
 Warning: Unknown date-time format, removed records:
   433823112460401 'USGS 139B' date '2014-03' time 'NA'
-  433823112460401 'USGS 139B' date '2014-03' time 'NA'
 STATUS: making 'units' dataset ...
 STATUS: making 'background' dataset ...
 STATUS: making 'esrp' dataset ...
@@ -302,10 +301,12 @@ STATUS: making 'cities' dataset ...
 STATUS: making 'counties' dataset ...
 STATUS: making 'roads' dataset ...
 STATUS: making 'lakes' dataset ...
-â ™ 21 extracted | 307 MB ( 77 MB/s) | 4s
+â ™ 21 extracted | 211 MB (104 MB/s) | 2s
+â ¹ 21 extracted | 331 MB ( 66 MB/s) | 5s
 STATUS: making 'streams' dataset ...
-â ™ 21 extracted | 295 MB ( 85 MB/s) | 3.5s
+â ™ 21 extracted | 270 MB ( 86 MB/s) | 3.1s
+â ¹ 26 extracted | 398 MB ( 65 MB/s) | 6.1s
 STATUS: compress dataset files ...
 STATUS: copy dataset files to destination directory ...
 
-DURATION: 6.443838 mins
+DURATION: 6.900758 mins
diff --git a/data/gwl.rda b/data/gwl.rda
index 81f652900093e7229bcf0c782e6cb7a25caed460..7eecafa6d42a8fd0b682fc56cb1bfe857fc58730 100644
Binary files a/data/gwl.rda and b/data/gwl.rda differ
diff --git a/data/parameters.rda b/data/parameters.rda
index c0f88c9ee85dca9ebe1e2e7fd3949b06d663e067..0c94ff5374f68b1237ab2d306720d22e5f3b85f6 100644
Binary files a/data/parameters.rda and b/data/parameters.rda differ
diff --git a/data/sites.rda b/data/sites.rda
index 4f85f579808f2f7c673c84db17fd425db365f8d9..530d0ec2f7943e772e3bc216b3eb1dab1ded3a3a 100644
Binary files a/data/sites.rda and b/data/sites.rda differ
diff --git a/inst/tinytest/test_data.R b/inst/tinytest/test_data.R
index d7705f09e8651094914f07940bd23acabd912d18..2eb36ac4ddad133b2968db0190ea050788762a3a 100644
--- a/inst/tinytest/test_data.R
+++ b/inst/tinytest/test_data.R
@@ -29,7 +29,7 @@ site_no <- "432700112470801" # well USGS 1
 is <- gwl$lev_dt == dt & gwl$site_no == site_no
 d <- gwl[is, ]
 expect_set_equal(d$lev_va, 593.27)
-expect_set_equal(d$sl_lev_va, 4432.53)
+expect_set_equal(d$sl_lev_va, 4432.54)
 expect_set_equal(d$lev_acy_va, 0.01)
 expect_set_equal(d$sl_lev_acy_va, 0.02)