diff --git a/xos/coreapi/core_main.py b/xos/coreapi/core_main.py
index ada3222..93e5559 100644
--- a/xos/coreapi/core_main.py
+++ b/xos/coreapi/core_main.py
@@ -3,7 +3,8 @@
 import time
 
 import django
-sys.path.append('/opt/xos')
+xos_path = os.path.abspath(os.path.dirname(os.path.realpath(__file__)) + '/..')
+sys.path.append(xos_path)
 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "xos.settings")
 
 from reaper import ReaperThread
@@ -14,6 +15,7 @@
 
 
 if __name__ == '__main__':
+
     django.setup()
 
     reaper = ReaperThread()
diff --git a/xos/coreapi/protos/.gitignore b/xos/coreapi/protos/.gitignore
new file mode 100644
index 0000000..f84f48e
--- /dev/null
+++ b/xos/coreapi/protos/.gitignore
@@ -0,0 +1,3 @@
+*_pb2_grpc.py
+*_pb2.py
+*.desc
\ No newline at end of file
diff --git a/xos/coreapi/protos/utility.proto b/xos/coreapi/protos/utility.proto
index 88dd8f1..1169b9d 100644
--- a/xos/coreapi/protos/utility.proto
+++ b/xos/coreapi/protos/utility.proto
@@ -42,6 +42,10 @@
     repeated ModelListEntry items = 1;
 };
 
+message XProtos {
+    string xproto = 1;
+};
+
 service utility {
 
   rpc Login(LoginRequest) returns (LoginResponse) {
@@ -98,4 +102,10 @@
             get: "/xosapi/v1/utility/dirty_models"
         };
   }
-};
+
+  rpc GetXproto(google.protobuf.Empty) returns (XProtos) {
+        option (google.api.http) = {
+            get: "/xosapi/v1/xproto"
+        };
+  }
+};
\ No newline at end of file
diff --git a/xos/coreapi/reaper.py b/xos/coreapi/reaper.py
index 879831e..3ea9c23 100644
--- a/xos/coreapi/reaper.py
+++ b/xos/coreapi/reaper.py
@@ -70,9 +70,9 @@
             deleted.
         """
         collector = XOSCollector(using=router.db_for_write(m.__class__, instance=m))
-        collector.collect([m])
-        deps=[]
-        for (k, models) in collector.data.items():
+        collector.collect([m])
+        deps=[]
+        for (k, models) in collector.data.items():
             for model in models:
                 if model==m:
                     # collector will return ourself; ignore it.
diff --git a/xos/coreapi/xos_utility_api.py b/xos/coreapi/xos_utility_api.py
index bce9bf0..46a5964 100644
--- a/xos/coreapi/xos_utility_api.py
+++ b/xos/coreapi/xos_utility_api.py
@@ -8,8 +8,8 @@
 from google.protobuf.empty_pb2 import Empty
 
 from importlib import import_module
-from django.conf import settings
-SessionStore = import_module(settings.SESSION_ENGINE).SessionStore
+from django.conf import settings
+SessionStore = import_module(settings.SESSION_ENGINE).SessionStore
 
 from django.contrib.auth import authenticate as django_authenticate
 import django.apps
@@ -38,6 +38,13 @@
         return True
     return False
 
+def get_xproto(folder):
+    matches = []
+    for root, dirnames, filenames in os.walk(folder):
+        for filename in fnmatch.filter(filenames, '*.xproto'):
+            matches.append(os.path.join(root, filename))
+    return matches
+
 class UtilityService(utility_pb2.utilityServicer, XOSAPIHelperMixin):
     def __init__(self, thread_pool):
         self.thread_pool = thread_pool
@@ -183,3 +190,25 @@
 
         return dirty_models
 
+    @translate_exceptions
+    def GetXproto(self, request, context):
+        res = utility_pb2.XProtos()
+
+        core_dir = os.path.abspath(os.path.dirname(os.path.realpath(__file__)) + '/../core/models/')
+        core_xprotos = get_xproto(core_dir)
+
+        service_dir = os.path.abspath(os.path.dirname(os.path.realpath(__file__)) + '/../services')
+        services_xprotos = get_xproto(service_dir)
+
+        xprotos = core_xprotos + services_xprotos
+
+        xproto = ""
+
+        for f in xprotos:
+            content = open(f).read()
+            xproto += "\n"
+            xproto += content
+
+        res.xproto = xproto
+        return res
+
