diff --git a/wdfn-server/waterdata/services/nwissite.py b/wdfn-server/waterdata/services/nwissite.py
index 10136015973c99900ec191012a4f0593892135b2..6c1a917b07005b33c59d19061a4726b1d35e6bf7 100644
--- a/wdfn-server/waterdata/services/nwissite.py
+++ b/wdfn-server/waterdata/services/nwissite.py
@@ -21,17 +21,18 @@ async def get(session, params):
         - site_data - list of dictionaries
     """
     endpoint = app.config["SITE_DATA_ENDPOINT"]
-    app.logger.debug(f'Requesting data from {endpoint}')
+    app.logger.debug(f'Requesting data from {endpoint} and {params}')
     default_params = {
         'format': 'rdb'
     }
     default_params.update(params)
-    async with session.get(endpoint, params=default_params) as response:
-        if response.status_code == 200:
-            async with response.iter_lines(decode_unicode=True) as lines:
-                return 200, response.reason, list(parse_rdb(lines))
+    response = await session.get(endpoint, params=default_params)
+    if response.status == 200:
+        lines = await response.text()
+        app.logger.debug(f'Received data from {endpoint} and {params}')
+        return 200, response.reason, list(parse_rdb(iter(lines.splitlines())))
 
-        return response.status_code, response.reason, []
+    return response.status_code, response.reason, []
 
 
 async def get_site_data(session, site_no, agency_cd=''):
@@ -68,7 +69,7 @@ async def get_period_of_record(session, site_no, agency_cd=''):
     """
     params = {
         'sites': site_no,
-        'seriesCatalogOutput': True,
+        'seriesCatalogOutput': 'true',
         'siteStatus': 'all'
     }
     if agency_cd:
diff --git a/wdfn-server/waterdata/services/sifta.py b/wdfn-server/waterdata/services/sifta.py
index d647518badca8871b2f05d6d61ce4aea510cf2db..ed5be6a8852c8b71d63b7c63e3bbb3cb73ea62a4 100644
--- a/wdfn-server/waterdata/services/sifta.py
+++ b/wdfn-server/waterdata/services/sifta.py
@@ -20,10 +20,10 @@ async def get_cooperators(session, site_no):
         # TODO: Add exception handling
         app.logger.debug(f'Retrieved data from {url}')  # pylint: disable=no-member
 
-        if response.status_code != 200:
+        if response.status != 200:
             return []
         try:
-            resp_json = response.json()
+            resp_json = await response.json()
         except ValueError:
             return []
         else:
diff --git a/wdfn-server/waterdata/services/timezone.py b/wdfn-server/waterdata/services/timezone.py
index f237d295f8c49d7c6f7218e62220b98f75656cbf..23ecafef6d492feb6b0098c00c0b352f1a182e72 100644
--- a/wdfn-server/waterdata/services/timezone.py
+++ b/wdfn-server/waterdata/services/timezone.py
@@ -25,6 +25,8 @@ class TimeZoneService:
         :return str
         """
         url = f'{self.endpoint}/points/{latitude},{longitude}'
+
+        app.logger.debug(f'Requesting timezone')
         try:
             response = self.session.get(url)
         except (request_exceptions.Timeout, request_exceptions.ConnectionError) as err:
@@ -33,5 +35,7 @@ class TimeZoneService:
         if response.status_code != 200:
             return None
 
+        app.logger.debug(f'Received timezone')
+
         json_data = response.json()
         return json_data['properties'].get('timeZone', None) if 'properties' in json_data else None
diff --git a/wdfn-server/waterdata/utils.py b/wdfn-server/waterdata/utils.py
index f13fae09b003a3364e0f8e56abc455195e825bb1..3ed433741e085d7416df2158aeea1a545aa9b704 100644
--- a/wdfn-server/waterdata/utils.py
+++ b/wdfn-server/waterdata/utils.py
@@ -2,9 +2,10 @@
 Utility functions
 
 """
-from functools import update_wrapper
-from urllib.parse import urlencode, urljoin
+import asyncio
 from email.message import EmailMessage
+from functools import update_wrapper, wraps
+from urllib.parse import urlencode, urljoin
 
 from flask import request
 
@@ -101,7 +102,7 @@ def parse_rdb(rdb_iter_lines):
     """
     Parse records in an RDB file into dictionaries.
 
-    :param iterator rdb_iter_lines: iterator containing lines from an RDB file
+    :param str rdb_iter_lines: iterator containing lines from an RDB file
     :rtype: Iterator
 
     """
@@ -124,23 +125,3 @@ def parse_rdb(rdb_iter_lines):
             continue
         record_values = record.split('\t')
         yield dict(zip(headers, record_values))
-
-
-def defined_when(condition, fallback):
-    """
-    Decorator that fallsback to a specified function if `condition` is False.
-    :param condition: bool Decorated function will be called if True, otherwise
-                           fallback will be called
-    :param fallback: function to be called if condition is False
-    :return: Decorated function
-    :rtype: function
-    """
-    def wrap(f):  # pylint: disable=invalid-name
-        if condition:
-            # pylint:disable=do-not-assign-a-lambda-expression-use-a-def, unnecessary-lambda
-            func = lambda *args, **kwargs: f(*args, **kwargs)  # flake8: noqa
-        else:
-            func = fallback
-        return update_wrapper(func, f)
-
-    return wrap
diff --git a/wdfn-server/waterdata/views.py b/wdfn-server/waterdata/views.py
index e0dc7af8780e09918c28eafa1af09a0e8a45c416..b1b780c1d8bcee891792f60042f68ae5162eed61 100644
--- a/wdfn-server/waterdata/views.py
+++ b/wdfn-server/waterdata/views.py
@@ -16,7 +16,7 @@ from markdown import markdown
 from . import app, __version__
 from .location_utils import build_linked_data, get_disambiguated_values, rollup_dataseries, \
     get_period_of_record_by_parm_cd, get_default_parameter_code
-from .utils import defined_when, set_cookie_for_banner_message, create_message
+from .utils import set_cookie_for_banner_message, create_message
 from .services.camera import get_monitoring_location_camera_details
 from .services.nwissite import get_county_sites, get_huc_sites, get_site_data, get_period_of_record
 from .services.ogc import MonitoringLocationNetworkService
@@ -233,7 +233,6 @@ def return_404():
 
 @app.route('/hydrological-unit/', defaults={'huc_cd': None}, methods=['GET'])
 @app.route('/hydrological-unit/<huc_cd>/', methods=['GET'])
-@defined_when(app.config['HYDROLOGIC_PAGES_ENABLED'], return_404)
 async def hydrological_unit(huc_cd, show_locations=False):
     """
     Hydrological unit view
@@ -242,6 +241,9 @@ async def hydrological_unit(huc_cd, show_locations=False):
     """
 
     # Get the data corresponding to this HUC
+    if not app.config['HYDROLOGIC_PAGES_ENABLED']:
+        return return_404()
+
     monitoring_locations = []
     if huc_cd:
         huc = app.config['HUC_LOOKUP']['hucs'].get(huc_cd, None)
@@ -271,12 +273,11 @@ async def hydrological_unit(huc_cd, show_locations=False):
 
 
 @app.route('/hydrological-unit/<huc_cd>/monitoring-locations/', methods=['GET'])
-@defined_when(app.config['HYDROLOGIC_PAGES_ENABLED'], return_404)
-def hydrological_unit_locations(huc_cd):
+async def hydrological_unit_locations(huc_cd):
     """
     Returns a HUC page with a list of monitoring locations included.
     """
-    return hydrological_unit(huc_cd, show_locations=True)
+    return await hydrological_unit(huc_cd, show_locations=True)
 
 
 @app.route('/networks/', defaults={'network_cd': ''}, methods=['GET'])
@@ -322,7 +323,6 @@ def networks(network_cd):
 @app.route('/states/', defaults={'state_cd': None, 'county_cd': None}, methods=['GET'])
 @app.route('/states/<state_cd>/', defaults={'county_cd': None}, methods=['GET'])
 @app.route('/states/<state_cd>/counties/<county_cd>/', methods=['GET'])
-@defined_when(app.config['STATE_COUNTY_PAGES_ENABLED'], return_404)
 async def states_counties(state_cd, county_cd, show_locations=False):
     """
     State unit view
@@ -331,6 +331,8 @@ async def states_counties(state_cd, county_cd, show_locations=False):
     :param county_cd: ID for this political unit - 'county'
     :param bool show_locations:
     """
+    if not app.config['STATE_COUNTY_PAGES_ENABLED']:
+        return return_404()
 
     monitoring_locations = []
     political_unit = {}
@@ -370,18 +372,18 @@ async def states_counties(state_cd, county_cd, show_locations=False):
 
 
 @app.route('/states/<state_cd>/counties/<county_cd>/monitoring-locations/', methods=['GET'])
-@defined_when(app.config['STATE_COUNTY_PAGES_ENABLED'], return_404)
-def county_station_locations(state_cd, county_cd):
+async def county_station_locations(state_cd, county_cd):
     """
     Returns a page listing monitoring locations within a county.
     """
-    return states_counties(state_cd, county_cd, show_locations=True)
+    return await states_counties(state_cd, county_cd, show_locations=True)
 
 
 @app.route('/components/time-series/<site_no>/', methods=['GET'])
-@defined_when(app.config['EMBED_IMAGE_FEATURE_ENABLED'], return_404)
 def time_series_component(site_no):
     """
     Returns an unadorned page with the time series component for a site.
     """
+    if not app.config['EMBED_IMAGE_FEATURE_ENABLED']:
+        return_404()
     return render_template('monitoring_location_embed.html', site_no=site_no)