diff --git a/R/retrieveNWISqwData.r b/R/retrieveNWISqwData.r
new file mode 100644
index 0000000000000000000000000000000000000000..34eadd8c196af6f3696a54ba9333068cd967de96
--- /dev/null
+++ b/R/retrieveNWISqwData.r
@@ -0,0 +1,97 @@
+#' Raw Data Import for USGS NWIS QW Data
+#'
+#' Imports data from NWIS web service. This function gets the data from here: \url{http://nwis.waterdata.usgs.gov/nwis/qwdata}
+#' A list of parameter codes can be found here: \url{http://nwis.waterdata.usgs.gov/nwis/pmcodes/}
+#' A list of statistic codes can be found here: \url{http://nwis.waterdata.usgs.gov/nwis/help/?read_file=stat&format=table}
+#'
+#' @param siteNumber string or vector of strings USGS site number.  This is usually an 8 digit number
+#' @param pCodes string or vector of USGS parameter code.  This is usually an 5 digit number.
+#' @param startDate string starting date for data retrieval in the form YYYY-MM-DD.
+#' @param endDate string ending date for data retrieval in the form YYYY-MM-DD.
+#' @keywords data import USGS web service
+#' @return data dataframe with agency, site, dateTime, value, and code columns
+#' @export
+#' @examples
+#' # These examples require an internet connection to run
+#' siteNumber <- c('04024430','04024000')
+#' startDate <- '2010-01-01'
+#' endDate <- ''
+#' pCodes <- c('34247', '30234','32104','34220')
+#' rawNWISqwData <- retrieveNWISqwData(siteNumber,pCodes,startDate,endDate)
+#' # To get data in Sample dataframe format:
+#' data <- rawNWISqwData[,names(rawNWISqwData) != "site"]
+#' data$dateTime <- as.Date(data$dateTime)
+#' compressedData <- compressData(data, interactive=interactive)
+#' Sample <- populateSampleColumns(compressedData)
+retrieveNWISqwData <- function (siteNumber,pCodes,startDate,endDate){  
+  
+  if(length(siteNumber) > 1){    
+    siteNumber <- paste(siteNumber, collapse=",")
+    siteNumber <- paste("multiple_site_no",siteNumber,sep="=")
+    searchCriteria <- "multiple_site_no"
+  } else {
+    siteNumber <- paste("search_site_no",siteNumber,sep="=")
+    siteNumber <- paste(siteNumber,"search_site_no_match_type=exact",sep="&")
+    searchCriteria <- "search_site_no"
+  }
+  
+  if(length(pCodes)>1){
+    pCodes <- paste(pCodes, collapse=",")
+    pCodes <- paste('multiple_parameter_cds', pCodes, sep="=")
+    pCodes <- paste(pCodes, "param_cd_operator=OR",sep="&")
+  } else {
+    pCodes <- paste("multiple_parameter_cds", pCodes, sep="=")
+    pCodes <- paste(pCodes, "param_cd_operator=AND",sep="&")
+  }
+  
+  searchCriteria <- paste(searchCriteria, "multiple_parameter_cds", sep=",")
+  searchCriteria <- paste("list_of_search_criteria",searchCriteria,sep="=")
+  baseURL <- "http://nwis.waterdata.usgs.gov/nwis/qwdata"
+  
+  url <- paste(baseURL,siteNumber,sep="?")
+  url <- paste(url, pCodes,searchCriteria,
+               "group_key=NONE&sitefile_output_format=html_table&column_name=agency_cd",
+               "column_name=site_no&column_name=station_nm&inventory_output=0&rdb_inventory_output=file",
+               "TZoutput=0&pm_cd_compare=Greater%20than&radio_parm_cds=previous_parm_cds&qw_attributes=0",
+               "format=rdb&qw_sample_wide=separated_wide&rdb_qw_attributes=0&date_format=YYYY-MM-DD",
+               "rdb_compression=value", sep = "&")
+  
+  if (nzchar(startDate)) {
+    url <- paste(url,"&begin_date=",startDate,sep="")
+  }
+  
+  if (nzchar(endDate)) {
+    url <- paste(url,"&end_date=",endDate,sep="")
+  }
+  
+  tmp <- read.delim(  
+    url, 
+    header = TRUE, 
+    quote="\"", 
+    dec=".", 
+    sep='\t',
+    colClasses=c('character'),
+    fill = TRUE, 
+    comment.char="#")
+  
+  # This takes slightly longer than the original method, but handles "Ice" or other characters in the numeric columns without error.
+  dataType <- tmp[1,]
+  data <- tmp[-1,]
+  row.names(data) <- NULL
+  data$site <- with(data,paste(agency_cd,site_no,sep="-"))
+  data$dateTime <- with(data, as.POSIXct(paste(sample_dt,sample_tm,sep=" "),tz="UTC"))
+  
+  rmCol <- c("agency_cd","site_no","tm_datum_rlbty_cd",
+             "coll_ent_cd","medium_cd","tu_id","body_part_id",
+             "sample_end_dt","sample_end_tm","sample_dt","sample_tm","sample_start_time_datum_cd")
+  data <- data[,!(names(data) %in% rmCol)]
+  
+  names(data) <- c(gsub("r", "qualifier_",names(data)[1:(length(names(data))-2)]),names(data)[(length(names(data))-1):length(names(data))])
+  names(data) <- c(gsub("p", "value_",names(data)[1:(length(names(data))-2)]),names(data)[(length(names(data))-1):length(names(data))])
+  
+  data[,grep("value",names(data))] <- sapply( data[,grep("value",names(data))], function(x) as.numeric(x))
+  
+  data <- data[,c(ncol(data):(ncol(data)-1),(1:(ncol(data)-2)))]
+  
+  return (data)
+}
\ No newline at end of file
diff --git a/man/retrieveNWISqwData.Rd b/man/retrieveNWISqwData.Rd
new file mode 100644
index 0000000000000000000000000000000000000000..b4d0fa8a743ea8863808ab56e440c1fc156a34c5
--- /dev/null
+++ b/man/retrieveNWISqwData.Rd
@@ -0,0 +1,52 @@
+\name{retrieveNWISqwData}
+\alias{retrieveNWISqwData}
+\title{Raw Data Import for USGS NWIS QW Data}
+\usage{
+  retrieveNWISqwData(siteNumber, pCodes, startDate,
+    endDate)
+}
+\arguments{
+  \item{siteNumber}{string or vector of strings USGS site
+  number.  This is usually an 8 digit number}
+
+  \item{pCodes}{string or vector of USGS parameter code.
+  This is usually an 5 digit number.}
+
+  \item{startDate}{string starting date for data retrieval
+  in the form YYYY-MM-DD.}
+
+  \item{endDate}{string ending date for data retrieval in
+  the form YYYY-MM-DD.}
+}
+\value{
+  data dataframe with agency, site, dateTime, value, and
+  code columns
+}
+\description{
+  Imports data from NWIS web service. This function gets
+  the data from here:
+  \url{http://nwis.waterdata.usgs.gov/nwis/qwdata} A list
+  of parameter codes can be found here:
+  \url{http://nwis.waterdata.usgs.gov/nwis/pmcodes/} A list
+  of statistic codes can be found here:
+  \url{http://nwis.waterdata.usgs.gov/nwis/help/?read_file=stat&format=table}
+}
+\examples{
+# These examples require an internet connection to run
+siteNumber <- c('04024430','04024000')
+startDate <- '2010-01-01'
+endDate <- ''
+pCodes <- c('34247', '30234','32104','34220')
+rawNWISqwData <- retrieveNWISqwData(siteNumber,pCodes,startDate,endDate)
+# To get data in Sample dataframe format:
+data <- rawNWISqwData[,names(rawNWISqwData) != "site"]
+data$dateTime <- as.Date(data$dateTime)
+compressedData <- compressData(data, interactive=interactive)
+Sample <- populateSampleColumns(compressedData)
+}
+\keyword{USGS}
+\keyword{data}
+\keyword{import}
+\keyword{service}
+\keyword{web}
+