diff --git a/R/constructNWISURL.r b/R/constructNWISURL.r
index 30df1d4bcefbe2aec487bfa641bafb3ef2ae3d38..c20ce648e70008a929b892ae04b25dd2306d30b5 100644
--- a/R/constructNWISURL.r
+++ b/R/constructNWISURL.r
@@ -171,29 +171,29 @@ constructNWISURL <- function(siteNumber,parameterCd="00060",startDate="",endDate
             }
           )
 
-          url <- drURL(service, paste0("&site=",siteNumber, "&format=", formatURL))
+          url <- drURL(service, Access=pkg.env$access, site=siteNumber, format=formatURL)
           
           if("gwlevels"!= service){
-            url <- paste0(url, "&ParameterCd=",parameterCd)
+            url <- appendDrURL(url, ParameterCd=parameterCd)
           }
           
           if("dv"==service) {
             if(length(statCd) > 1){
               statCd <- paste(statCd, collapse=",")
             }            
-            url <- paste0(url, "&StatCd=", statCd)
+            url <- appendDrURL(url, StatCd=statCd)
           }
           
           if (nzchar(startDate)) {
-            url <- paste0(url,"&startDT=",startDate)
+            url <- appendDrURL(url, startDT=startDate)
           } else {
             startorgin <- "1851-01-01"
             if ("iv" == service) startorgin <- "1900-01-01"            
-            url <- paste0(url,"&startDT=",startorgin)
+            url <- appendDrURL(url, startDT=startorgin)
           }
           
           if (nzchar(endDate)) {
-            url <- paste0(url,"&endDT=",endDate)
+            url <- appendDrURL(url, endDT=endDate)
           }
         }
          
diff --git a/R/setAccess.R b/R/setAccess.R
index b9b5041e8a9b297d82178e358207db6d2e0001b9..2e4bb7e2dbc483fd44c96a31267f1638b4833263 100644
--- a/R/setAccess.R
+++ b/R/setAccess.R
@@ -22,19 +22,38 @@ setAccess = function(access="public"){
   access = match.arg(access, c('public','internal'))
   
   if(access=="internal"){
-    access.param = '?Access=3'
+    pkg.env$access = '3'
     message('setting access to internal')
   }else {
-    access.param = '?Access=0'
+    pkg.env$access = '0'
+    message('setting access to public')
   }
   
-  pkg.env$waterservices = paste0("http://waterservices.usgs.gov/nwis/site/", access.param)
-  pkg.env$iv =  paste0("http://nwis.waterservices.usgs.gov/nwis/iv/", access.param)
-  pkg.env$dv =  paste0("http://waterservices.usgs.gov/nwis/dv/", access.param)
-  pkg.env$gwlevels = paste0("http://waterservices.usgs.gov/nwis/gwlevels/", access.param)
+  pkg.env$waterservices = "http://waterservices.usgs.gov/nwis/site/"
+  pkg.env$iv = "http://nwis.waterservices.usgs.gov/nwis/iv/"
+  pkg.env$dv =  "http://waterservices.usgs.gov/nwis/dv/"
+  pkg.env$gwlevels = "http://waterservices.usgs.gov/nwis/gwlevels/"
   
 }
 
-drURL = function(base.name, params){
-  return(paste0(pkg.env[[base.name]], params))
+drURL <- function(base.name, ..., arg.list=NULL){
+  
+  
+  queryString <- drQueryArgs(..., arg.list=arg.list)
+  #to do: add something to check for redundant params
+  
+  return(paste0(pkg.env[[base.name]], '?', queryString))
+}
+
+drQueryArgs <- function(..., arg.list){
+  args <- append(expand.grid(..., stringsAsFactors = FALSE), arg.list)
+  # get the args into name=value strings
+  keyValues <- paste0(names(args),unname(lapply(args, function(x) paste0('=',x[[1]]))))
+  return(paste(keyValues, collapse='&'))
+}
+
+appendDrURL <- function(url, ..., arg.list=NULL){
+  
+  queryString <- drQueryArgs(..., arg.list=arg.list)
+  return(paste0(url, "&", queryString))
 }
\ No newline at end of file
diff --git a/R/whatNWISData.r b/R/whatNWISData.r
index 38bce2caa63d92fb4b411b9808b254c4ca6edca6..50067b22ebb23b2ce00d3b994f33d49b69df3871 100644
--- a/R/whatNWISData.r
+++ b/R/whatNWISData.r
@@ -87,7 +87,7 @@ whatNWISdata <- function(siteNumbers,service="all",parameterCd="all",statCd="all
     }
   }
   
-  urlSitefile <- paste(drURL('waterservices', '&format=rdb&seriesCatalogOutput=true&sites='),siteNumber,sep = "")
+  urlSitefile <- drURL('waterservices', Access=pkg.env$access, format='rdb', seriesCatalogOutput='true',sites=paste(siteNumber))
  
   SiteFile <- importRDB1(urlSitefile, asDateTime = FALSE)
   
diff --git a/R/whatNWISsites.R b/R/whatNWISsites.R
index 4ad9d93d2ca7b8759c40376dc15233595a1cf08e..c7b864aed875a4466876972aba4488f8c8fb8935 100644
--- a/R/whatNWISsites.R
+++ b/R/whatNWISsites.R
@@ -35,14 +35,11 @@ whatNWISsites <- function(...){
   matchReturn <- list(...)
   values <- sapply(matchReturn, function(x) URLencode(as.character(paste(eval(x),collapse=",",sep=""))))
   
-  urlCall <- paste(paste(names(values),values,sep="="),collapse="&")
-  
   names(values)[names(values) == "siteNumber"] <- "sites"
   names(values)[names(values) == "siteNumbers"] <- "sites"
   
-  baseURL <- drURL('waterservices',"&format=mapper&")
-  urlCall <- paste(baseURL,
-                   urlCall,sep = "")
+  urlCall <- drURL('waterservices',Access=pkg.env$access, format="mapper", arg.list = values)
+
 
   rawData <- getWebServiceData(urlCall)
 
diff --git a/tests/testthat/tests_userFriendly_fxns.R b/tests/testthat/tests_userFriendly_fxns.R
index b03dba89bbf893a6ad7eb43bac1a0af0ab1f8650..87803e3d8c57191fa3605c8744f42d5289d2b9b1 100644
--- a/tests/testthat/tests_userFriendly_fxns.R
+++ b/tests/testthat/tests_userFriendly_fxns.R
@@ -19,7 +19,7 @@ test_that("Unit value data returns correct types", {
   expect_is(rawData$dateTime, 'POSIXct')
   expect_is(rawData$Flow_Inst, 'numeric')
   expect_that(attr(rawData, "url"), equals(
-      "http://nwis.waterservices.usgs.gov/nwis/iv/?Access=1&site=05114000&format=waterml,1.1&ParameterCd=00060&startDT=2014-10-10&endDT=2014-10-10")
+      "http://nwis.waterservices.usgs.gov/nwis/iv/?Access=0&site=05114000&format=waterml,1.1&ParameterCd=00060&startDT=2014-10-10&endDT=2014-10-10")
   )
 #   #First switchover to standard time:
 #   expect_that(as.numeric(timeZoneChange[which(timeZoneChange$tz_cd == "America/Chicago")[1],"dateTime"]),