diff --git a/xos/synchronizers/new_base/diag.py b/xos/synchronizers/new_base/diag.py
index 86874d6..b4868ac 100644
--- a/xos/synchronizers/new_base/diag.py
+++ b/xos/synchronizers/new_base/diag.py
@@ -4,19 +4,18 @@
 import traceback
 import json
 
-from core.models import Diag
 from xos.config import Config, XOS_DIR
 from xos.logger import Logger, logging, logger
 
 logger = Logger(level=logging.INFO)
 
-def update_diag(loop_end=None, loop_start=None, syncrecord_start=None, sync_start=None, backend_status=None):
+def update_diag(diag_class, loop_end=None, loop_start=None, syncrecord_start=None, sync_start=None, backend_status=None):
     observer_name = Config().observer_name
 
     try:
-        diag = Diag.objects.filter(name=observer_name).first()
+        diag = diag_class.objects.filter(name=observer_name).first()
         if (not diag):
-            diag = Diag(name=observer_name)
+            diag = diag_class(name=observer_name)
         br_str = diag.backend_register
         br = json.loads(br_str)
         if loop_end:
diff --git a/xos/synchronizers/new_base/djangoaccessor.py b/xos/synchronizers/new_base/djangoaccessor.py
index 01d5884..66ded70 100644
--- a/xos/synchronizers/new_base/djangoaccessor.py
+++ b/xos/synchronizers/new_base/djangoaccessor.py
@@ -4,7 +4,6 @@
 from django.db import reset_queries
 from django.utils import timezone
 from modelaccessor import ModelAccessor
-from diag import update_diag
 from django.db import connection
 from django.db.models import F, Q
 from django import setup as django_setup # django 1.7
@@ -71,9 +70,6 @@
     def now(self):
         return timezone.now()
 
-    def update_diag(self, loop_end=None, loop_start=None, syncrecord_start=None, sync_start=None, backend_status=None):
-        return update_diag(loop_end, loop_start, syncrecord_start, sync_start, backend_status)
-
     def is_type(self, obj, name):
         return type(obj) == self.get_model_class(name)
 
diff --git a/xos/synchronizers/new_base/modelaccessor.py b/xos/synchronizers/new_base/modelaccessor.py
index bc1d74f..62475bc 100644
--- a/xos/synchronizers/new_base/modelaccessor.py
+++ b/xos/synchronizers/new_base/modelaccessor.py
@@ -11,6 +11,7 @@
 import functools
 import os
 from xos.config import Config
+from diag import update_diag
 
 class ModelAccessor(object):
     def __init__(self):
@@ -24,6 +25,10 @@
         """ Given a class name, return that model class """
         return self.all_model_classes[name]
 
+    def has_model_class(self, name):
+        """ Given a class name, return that model class """
+        return name in self.all_model_classes
+
     def fetch_pending(self, name, deletion=False):
         """ Execute the default fetch_pending query """
         raise Exception("Not Implemented")
@@ -57,8 +62,8 @@
         raise Exception("Not Implemented")
 
     def update_diag(self, loop_end=None, loop_start=None, syncrecord_start=None, sync_start=None, backend_status=None):
-        """ Update the diagnostic object """
-        pass
+        if self.has_model_class("Diag"):
+            return update_diag(self.get_model_class("Diag"), loop_end, loop_start, syncrecord_start, sync_start, backend_status)
 
     def is_type(self, obj, name):
         """ returns True is obj is of model type "name" """
diff --git a/xos/xos_client/xosapi/orm.py b/xos/xos_client/xosapi/orm.py
index 37f706d..69d37b0 100644
--- a/xos/xos_client/xosapi/orm.py
+++ b/xos/xos_client/xosapi/orm.py
@@ -169,6 +169,14 @@
 
         return d
 
+class ORMQuerySet(list):
+    """ Makes lists look like django querysets """
+    def first(self):
+        if len(self)>0:
+            return self[0]
+        else:
+            return None
+
 class ORMLocalObjectManager(object):
     """ Manages a local list of objects """
 
@@ -213,7 +221,7 @@
         result=[]
         for item in obj.items:
             result.append(make_ORMWrapper(item, self._stub))
-        return result
+        return ORMQuerySet(result)
 
     def all(self):
         return self.wrap_list(self._stub.invoke("List%s" % self._modelName, Empty()))
