diff --git a/inventory_provider/db/opsdb.py b/inventory_provider/db/opsdb.py
index 5e6466ba768aeb9bb8b40e3edf1182ca502d2ecd..37c0f1b7984066105bba72d57ae9271d5682698a 100644
--- a/inventory_provider/db/opsdb.py
+++ b/inventory_provider/db/opsdb.py
@@ -436,3 +436,30 @@ AND circuit_type = 'Path'
         crs.execute(parent_query, [circuit['absid']])
         r = _convert_to_dict(crs)
         return _fields2rsp(r[0]) if r else None
+
+
+def get_service_users(connection, service_ids):
+
+    def _sublists(l, n):
+        for x in range(0, len(l), n):
+            yield l[x:x + n]
+
+    # not sure how to use a tuple in a prepared statement,
+    # so this is just doing a dumb string replacement ...
+    query = (
+        'select c.absid, o.name'
+        ' from organisation o'
+        ' join circuit_orgs co on co.org_absid=o.absid'
+        ' join circuit c on c.absid=co.circ_absid'
+        ' where co.org_type=\'Circuit User\''
+        ' and c.absid in (%s)')
+
+    with db.cursor(connection) as crs:
+        for chunk in _sublists(service_ids, 20):
+            crs.execute(query % ','.join([str(x) for x in chunk]))
+            for r in crs.fetchall():
+                yield {'service_id': r[0], 'user': r[1]}
+
+
+
+