diff --git a/inventory_provider/db/__init__.py b/inventory_provider/db/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/inventory_provider/alarmsdb.py b/inventory_provider/db/alarmsdb.py
similarity index 98%
rename from inventory_provider/alarmsdb.py
rename to inventory_provider/db/alarmsdb.py
index 7eb2cba54356fffcf55ae51151e9d0e78c03210d..597b47ff36fd1f70e566c158873ef9f9b8a273c1 100644
--- a/inventory_provider/alarmsdb.py
+++ b/inventory_provider/db/alarmsdb.py
@@ -1,4 +1,4 @@
-from inventory_provider import db
+from inventory_provider.db import db
 
 
 def get_last_known_infinera_interface_status(crs, equipment, interface):
diff --git a/inventory_provider/db.py b/inventory_provider/db/db.py
similarity index 100%
rename from inventory_provider/db.py
rename to inventory_provider/db/db.py
diff --git a/inventory_provider/opsdb.py b/inventory_provider/db/opsdb.py
similarity index 99%
rename from inventory_provider/opsdb.py
rename to inventory_provider/db/opsdb.py
index 7848f09de3407fd5c77a56f18b3ae0833e1bd6c1..60ed03c35d6a3f2386c975142c887096a0956407 100644
--- a/inventory_provider/opsdb.py
+++ b/inventory_provider/db/opsdb.py
@@ -1,4 +1,4 @@
-from inventory_provider import db
+from inventory_provider.db import db
 
 
 equipment_location_query = """SELECT
diff --git a/inventory_provider/routes/classifier.py b/inventory_provider/routes/classifier.py
index 9f3c35277e1e1f6478888593f0f9402153263f56..0069a77ed758a34560063c3bdbff0c048d48964d 100644
--- a/inventory_provider/routes/classifier.py
+++ b/inventory_provider/routes/classifier.py
@@ -1,7 +1,6 @@
-import functools
-
-from flask import Blueprint, request, Response, current_app, jsonify
 import json
+
+from flask import Blueprint, Response, current_app, jsonify
 import jsonschema
 
 from inventory_provider.routes import common
@@ -9,27 +8,8 @@ from inventory_provider.routes import common
 routes = Blueprint("inventory-data-classifier-support-routes", __name__)
 
 
-def require_accepts_json(f):
-    """
-    used as a route handler decorator to return an error
-    unless the request allows responses with type "application/json"
-    :param f: the function to be decorated
-    :return: the decorated function
-    """
-    @functools.wraps(f)
-    def decorated_function(*args, **kwargs):
-        # TODO: use best_match to disallow */* ...?
-        if not request.accept_mimetypes.accept_json:
-            return Response(
-                response="response will be json",
-                status=406,
-                mimetype="text/html")
-        return f(*args, **kwargs)
-    return decorated_function
-
-
 @routes.route("/infinera-dna-addresses", methods=['GET', 'POST'])
-@require_accepts_json
+@common.require_accepts_json
 def infinera_addresses():
     infinera_config = current_app.config[
         "INVENTORY_PROVIDER_CONFIG"]["infinera-dna"]
@@ -37,7 +17,7 @@ def infinera_addresses():
 
 
 @routes.route("/coriant-tnms-addresses", methods=['GET', 'POST'])
-@require_accepts_json
+@common.require_accepts_json
 def coriant_addresses():
     coriant_config = current_app.config[
         "INVENTORY_PROVIDER_CONFIG"]["coriant-tnms"]
@@ -45,7 +25,7 @@ def coriant_addresses():
 
 
 @routes.route("/juniper-server-addresses", methods=['GET', 'POST'])
-@require_accepts_json
+@common.require_accepts_json
 def juniper_addresses():
     backend_data_schema = {
         "$schema": "http://json-schema.org/draft-07/schema#",
@@ -73,7 +53,7 @@ def juniper_addresses():
 
 @routes.route("/trap-metadata/<trap_type>/<source_equipment>/<path:interface>",
               methods=['GET', 'POST'])
-@require_accepts_json
+@common.require_accepts_json
 def get_trap_metadata(trap_type, source_equipment, interface):
     # todo - Move this to config
     interface_info_key = "interface_services"
diff --git a/inventory_provider/routes/data.py b/inventory_provider/routes/data.py
index ce73e476af52f131cdbf139a6f3c38d7bfebebfd..85fb5f010cdbf51324bcf02d068bb2c36214ac8b 100644
--- a/inventory_provider/routes/data.py
+++ b/inventory_provider/routes/data.py
@@ -1,8 +1,7 @@
-import functools
 import json
 import pkg_resources
 
-from flask import Blueprint, jsonify, request, Response, current_app
+from flask import Blueprint, jsonify, Response, current_app
 from lxml import etree
 import redis
 
@@ -14,27 +13,8 @@ routes = Blueprint("inventory-data-query-routes", __name__)
 API_VERSION = '0.1'
 
 
-def require_accepts_json(f):
-    """
-    used as a route handler decorator to return an error
-    unless the request allows responses with type "application/json"
-    :param f: the function to be decorated
-    :return: the decorated function
-    """
-    @functools.wraps(f)
-    def decorated_function(*args, **kwargs):
-        # TODO: use best_match to disallow */* ...?
-        if not request.accept_mimetypes.accept_json:
-            return Response(
-                response="response will be json",
-                status=406,
-                mimetype="text/html")
-        return f(*args, **kwargs)
-    return decorated_function
-
-
 @routes.route("/version", methods=['GET', 'POST'])
-@require_accepts_json
+@common.require_accepts_json
 def version():
     return Response(
         json.dumps({
@@ -47,7 +27,7 @@ def version():
 
 
 @routes.route("/routers", methods=['GET', 'POST'])
-@require_accepts_json
+@common.require_accepts_json
 def routers():
     redis_config = current_app.config["INVENTORY_PROVIDER_CONFIG"]["redis"]
     r = redis.StrictRedis(
@@ -59,7 +39,7 @@ def routers():
 
 
 @routes.route("/interfaces/<hostname>", methods=['GET', 'POST'])
-@require_accepts_json
+@common.require_accepts_json
 def router_interfaces(hostname):
     redis_config = current_app.config["INVENTORY_PROVIDER_CONFIG"]["redis"]
     r = redis.StrictRedis(
@@ -87,7 +67,7 @@ def router_interfaces(hostname):
 
 
 @routes.route("/snmp/<hostname>", methods=['GET', 'POST'])
-@require_accepts_json
+@common.require_accepts_json
 def snmp_ids(hostname):
     redis_config = current_app.config["INVENTORY_PROVIDER_CONFIG"]["redis"]
     r = redis.StrictRedis(
@@ -117,7 +97,7 @@ def snmp_ids(hostname):
 
 
 @routes.route("/debug-dump/<hostname>", methods=['GET', 'POST'])
-@require_accepts_json
+@common.require_accepts_json
 def debug_dump_router_info(hostname):
     redis_config = current_app.config["INVENTORY_PROVIDER_CONFIG"]["redis"]
     r = redis.StrictRedis(
@@ -138,7 +118,7 @@ def debug_dump_router_info(hostname):
 
 
 @routes.route("/bgp/<hostname>", methods=['GET', 'POST'])
-@require_accepts_json
+@common.require_accepts_json
 def bgp_configs(hostname):
     redis_config = current_app.config["INVENTORY_PROVIDER_CONFIG"]["redis"]
     r = redis.StrictRedis(
@@ -167,7 +147,7 @@ def bgp_configs(hostname):
 
 @routes.route("/interfaces/status/<hostname>/<path:interface>",
               methods=['GET', 'POST'])
-@require_accepts_json
+@common.require_accepts_json
 def interface_statuses(hostname, interface):
     r = common.get_redis()
     result = r.hget("interface_statuses",
@@ -182,6 +162,7 @@ def interface_statuses(hostname, interface):
 
 @routes.route("/services/<hostname>/<path:interface>",
               methods=['GET', 'POST'])
+@common.require_accepts_json
 def services_for_interface(hostname, interface):
     r = common.get_redis()
     result = r.hget("interface_services",
diff --git a/inventory_provider/routes/opsdb.py b/inventory_provider/routes/opsdb.py
index 84faab3d11dafb639906079c4086949f56e320db..0cb54efb54d0b1a6f8e8959730f819e736cb4c3a 100644
--- a/inventory_provider/routes/opsdb.py
+++ b/inventory_provider/routes/opsdb.py
@@ -1,7 +1,6 @@
-import functools
 import json
 
-from flask import Blueprint, request, Response
+from flask import Blueprint, Response
 from inventory_provider.routes import common
 
 routes = Blueprint("inventory-opsdb-query-routes", __name__)
@@ -13,25 +12,6 @@ service_parent_to_children_key = "parent_to_children_circuit_relations"
 interface_status_key = "interface_statuses"
 
 
-def require_accepts_json(f):
-    """
-    used as a route handler decorator to return an error
-    unless the request allows responses with type "application/json"
-    :param f: the function to be decorated
-    :return: the decorated function
-    """
-    @functools.wraps(f)
-    def decorated_function(*args, **kwargs):
-        # TODO: use best_match to disallow */* ...?
-        if not request.accept_mimetypes.accept_json:
-            return Response(
-                response="response will be json",
-                status=406,
-                mimetype="text/html")
-        return f(*args, **kwargs)
-    return decorated_function
-
-
 def _decode_utf8_dict(d):
     return {k.decode('utf8'): json.loads(v) for k, v in d.items()}
 
diff --git a/inventory_provider/tasks/worker.py b/inventory_provider/tasks/worker.py
index 2f48358a17bc2b5480ace087e8ab60391a4ea6af..9923dc9430196fb8141e5085d38c5750fd5d833e 100644
--- a/inventory_provider/tasks/worker.py
+++ b/inventory_provider/tasks/worker.py
@@ -7,12 +7,10 @@ import redis
 from lxml import etree
 
 from inventory_provider.tasks.app import app
-from inventory_provider import alarmsdb
 from inventory_provider import config
 from inventory_provider import constants
-from inventory_provider import db
 from inventory_provider import environment
-from inventory_provider import opsdb
+from inventory_provider.db import db, opsdb, alarmsdb
 from inventory_provider import snmp
 from inventory_provider import juniper
 
diff --git a/test/test_alarmsdb.py b/test/test_alarmsdb.py
index 7236721fc5f43d4931214a98a8d610049429c8a1..6e6b336956dad0d49c035d928682167a752ce0e5 100644
--- a/test/test_alarmsdb.py
+++ b/test/test_alarmsdb.py
@@ -1,4 +1,4 @@
-import inventory_provider.alarmsdb as alarmsdb
+import inventory_provider.db.alarmsdb as alarmsdb
 
 
 def test_infinera_interface_status(mocker):
@@ -77,13 +77,15 @@ def test_juniper_interface_status(mocker):
 
 def test_interface_status(mocker):
     mocked_infinera = mocker.patch(
-        'inventory_provider.alarmsdb.get_last_known_infinera_interface_status')
+        'inventory_provider.db.alarmsdb'
+        '.get_last_known_infinera_interface_status')
     mocked_infinera.return_value = "unknown"
     mocked_coriant = mocker.patch(
-        'inventory_provider.alarmsdb.get_last_known_coriant_interface_status')
+        'inventory_provider.db.alarmsdb'
+        '.get_last_known_coriant_interface_status')
     mocked_coriant.return_value = "unknown"
     mocked_juniper = mocker.patch(
-        'inventory_provider.alarmsdb.'
+        'inventory_provider.db.alarmsdb.'
         'get_last_known_juniper_link_interface_status')
     mocked_juniper.return_value = "unknown"
     assert alarmsdb.get_last_known_interface_status(None, '', '') == "unknown"
diff --git a/test/test_opsdb.py b/test/test_opsdb.py
index 7e6c1848378c14f31ea6ede92b04a1bc2a65f2e2..2b0a299b3ebccff745cbe2108745711e01711d13 100644
--- a/test/test_opsdb.py
+++ b/test/test_opsdb.py
@@ -1,19 +1,23 @@
-import inventory_provider.opsdb
+import inventory_provider.db.opsdb
 
 
 def test_update_fields(mocker):
-    mocker.patch("inventory_provider.opsdb._juniper_field_update")
+    mocker.patch("inventory_provider"
+                 ".db.opsdb._juniper_field_update")
     t = {"manufacturer": "juniper"}
-    inventory_provider.opsdb._update_fields(t)
-    inventory_provider.opsdb._juniper_field_update.assert_called_once_with(t)
+    inventory_provider.db.opsdb._update_fields(t)
+    inventory_provider.db.opsdb \
+        ._juniper_field_update.assert_called_once_with(t)
 
-    mocker.patch("inventory_provider.opsdb._infinera_field_update")
+    mocker.patch("inventory_provider"
+                 ".db.opsdb._infinera_field_update")
     t = {"manufacturer": "infinera"}
-    inventory_provider.opsdb._update_fields(t)
-    inventory_provider.opsdb._infinera_field_update.assert_called_once_with(t)
+    inventory_provider.db.opsdb._update_fields(t)
+    inventory_provider.db.opsdb \
+        ._infinera_field_update.assert_called_once_with(t)
 
     f = {"manufacturer": "non-existent"}
-    r = inventory_provider.opsdb._update_fields(f)
+    r = inventory_provider.db.opsdb._update_fields(f)
     assert f == r
 
 
@@ -23,7 +27,7 @@ def test_infinera_field_update():
         "card_id": "tim-b-5-7",
         "port": "1"
          }
-    r = inventory_provider.opsdb._infinera_field_update(i)
+    r = inventory_provider.db.opsdb._infinera_field_update(i)
     assert r["equipment"] == "AMS01-DTNX10-1"
     assert r["interface_name"] == "1-B-5-7-1"
 
@@ -32,7 +36,7 @@ def test_infinera_field_update():
         "card_id": "tim-1/2",
         "port": "1"
          }
-    r = inventory_provider.opsdb._infinera_field_update(i)
+    r = inventory_provider.db.opsdb._infinera_field_update(i)
     assert r["equipment"] == "BUD01_CX_01"
     assert r["interface_name"] == "1/2-1"
 
@@ -41,7 +45,7 @@ def test_infinera_field_update():
         "card_id": "tim_1/2",
         "port": "1"
          }
-    r = inventory_provider.opsdb._infinera_field_update(i)
+    r = inventory_provider.db.opsdb._infinera_field_update(i)
     assert r["interface_name"] == "TIM_1/2-1"
 
 
@@ -50,50 +54,50 @@ def test_juniper_field_update():
         "interface_name": "xe-1/2",
         "logical_unit": None
          }
-    r = inventory_provider.opsdb._juniper_field_update(i)
+    r = inventory_provider.db.opsdb._juniper_field_update(i)
     assert r["interface_name"] == "xe-1/2"
 
     i["interface_name"] = "xe-1/2"
     i["logical_unit"] = 101
-    r = inventory_provider.opsdb._juniper_field_update(i)
+    r = inventory_provider.db.opsdb._juniper_field_update(i)
     assert r["interface_name"] == "xe-1/2.101"
 
     i["interface_name"] = "xe-1/2"
     i["logical_unit"] = 0
-    r = inventory_provider.opsdb._juniper_field_update(i)
+    r = inventory_provider.db.opsdb._juniper_field_update(i)
     assert r["interface_name"] == "xe-1/2.0"
 
     i["interface_name"] = "xe-1/2"
     i["logical_unit"] = None
     i["port"] = 0
-    r = inventory_provider.opsdb._juniper_field_update(i)
+    r = inventory_provider.db.opsdb._juniper_field_update(i)
     assert r["interface_name"] == "xe-1/2"
 
     i["interface_name"] = None
     i["card_id"] = "xe-2/0"
     i["logical_unit"] = None
     i["port"] = None
-    r = inventory_provider.opsdb._juniper_field_update(i)
+    r = inventory_provider.db.opsdb._juniper_field_update(i)
     assert r["interface_name"] == "xe-2/0"
 
     i["interface_name"] = None
     i["port"] = "0"
-    r = inventory_provider.opsdb._juniper_field_update(i)
+    r = inventory_provider.db.opsdb._juniper_field_update(i)
     assert r["interface_name"] == "xe-2/0/0"
 
     i["interface_name"] = None
     i["port"] = 0
-    r = inventory_provider.opsdb._juniper_field_update(i)
+    r = inventory_provider.db.opsdb._juniper_field_update(i)
     assert r["interface_name"] == "xe-2/0/0"
 
     i["interface_name"] = None
     i["logical_unit"] = "123"
-    r = inventory_provider.opsdb._juniper_field_update(i)
+    r = inventory_provider.db.opsdb._juniper_field_update(i)
     assert r["interface_name"] == "xe-2/0/0.123"
 
     i["interface_name"] = None
     i["logical_unit"] = 123
-    r = inventory_provider.opsdb._juniper_field_update(i)
+    r = inventory_provider.db.opsdb._juniper_field_update(i)
     assert r["interface_name"] == "xe-2/0/0.123"
 
 
@@ -103,7 +107,7 @@ def test_coriant_update_fields():
         "card_id": "2-3",
         "port": None
          }
-    r = inventory_provider.opsdb._coriant_field_update(i)
+    r = inventory_provider.db.opsdb._coriant_field_update(i)
     assert r["interface_name"] == "2-3"
 
     i = {
@@ -111,24 +115,24 @@ def test_coriant_update_fields():
         "card_id": "2-3",
         "port": "4"
          }
-    r = inventory_provider.opsdb._coriant_field_update(i)
+    r = inventory_provider.db.opsdb._coriant_field_update(i)
     assert r["interface_name"] == "2-3/4"
 
 
 def test_get_circuits(mocker):
-    mocker.patch("inventory_provider.opsdb.db.cursor")
+    mocker.patch("inventory_provider.db.db.cursor")
     mocked_convert_to_dict = mocker.patch(
-        "inventory_provider.opsdb._convert_to_dict")
+        "inventory_provider.db.opsdb._convert_to_dict")
     i = {"manufacturer": "infinera"}
     j = {"manufacturer": "juniper"}
     mocked_convert_to_dict.return_value = [i, j]
 
     mocked_infinera_update = mocker.patch(
-        "inventory_provider.opsdb._infinera_field_update")
+        "inventory_provider.db.opsdb._infinera_field_update")
     mocked_juniper_update = mocker.patch(
-        "inventory_provider.opsdb._juniper_field_update")
+        "inventory_provider.db.opsdb._juniper_field_update")
 
-    inventory_provider.opsdb.get_circuits(None)
+    inventory_provider.db.opsdb.get_circuits(None)
 
     mocked_infinera_update.assert_called_once_with(i)
     mocked_juniper_update.assert_called_once_with(j)