diff --git a/xos/coreapi/grpc_server.py b/xos/coreapi/grpc_server.py
index 5dabb35..ac339f4 100644
--- a/xos/coreapi/grpc_server.py
+++ b/xos/coreapi/grpc_server.py
@@ -34,6 +34,9 @@
 Config.init()
 log = create_logger(Config().get("logging"))
 
+# Must be imported after Config.init()
+from xos_version import get_version_dict
+
 SERVER_KEY = "/opt/cord_profile/core_api_key.pem"
 SERVER_CERT = "/opt/cord_profile/core_api_cert.pem"
 SERVER_CA = "/usr/local/share/ca-certificates/local_certs.crt"
@@ -189,6 +192,8 @@
     def start(self):
         log.info("Starting GRPC Server")
 
+        log.info("XOS Core Build Details", **get_version_dict())
+
         self.service_names = []
 
         self.register(
diff --git a/xos/coreapi/protos/utility.proto b/xos/coreapi/protos/utility.proto
index c351f1f..b0203de 100644
--- a/xos/coreapi/protos/utility.proto
+++ b/xos/coreapi/protos/utility.proto
@@ -41,6 +41,7 @@
     string buildTime = 4;
     string os = 5;
     string arch = 6;
+    string djangoVersion = 7;
 };
 
 message DatabaseInfo {
diff --git a/xos/coreapi/xos_utility_api.py b/xos/coreapi/xos_utility_api.py
index 3ebe405..3e6b90d 100644
--- a/xos/coreapi/xos_utility_api.py
+++ b/xos/coreapi/xos_utility_api.py
@@ -12,7 +12,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-import datetime
 import inspect
 from apistats import REQUEST_COUNT, track_request_time
 import grpc
@@ -26,11 +25,11 @@
 from django.contrib.auth import authenticate as django_authenticate
 import fnmatch
 import os
-import sys
 from protos import utility_pb2, utility_pb2_grpc
 from google.protobuf.empty_pb2 import Empty
 from importlib import import_module
 from django.conf import settings
+from xos_version import get_version_dict
 from xosconfig import Config
 from multistructlog import create_logger
 
@@ -281,29 +280,21 @@
         ).inc()
         return response
 
+
     @translate_exceptions("Utilities", "GetVersion")
     @track_request_time("Utilities", "GetVersion")
     def GetVersion(self, request, context):
+        version = get_version_dict()
+
         res = utility_pb2.VersionInfo()
 
-        try:
-            res.version = open("/opt/xos/VERSION").readline().strip()
-        except Exception:
-            log.exception("Exception while determining build version")
-            res.version = "unknown"
-
-        try:
-            res.gitCommit = open("/opt/xos/COMMIT").readline().strip()
-            res.buildTime = datetime.datetime.utcfromtimestamp(
-                os.stat("/opt/xos/COMMIT").st_ctime).strftime("%Y-%m-%dT%H:%M:%SZ")
-        except Exception:
-            log.exception("Exception while determining build information")
-            res.buildDate = "unknown"
-            res.gitCommit = "unknown"
-
-        res.pythonVersion = sys.version.split("\n")[0].strip()
-        res.os = os.uname()[0].lower()
-        res.arch = os.uname()[4].lower()
+        res.version = version["version"]
+        res.gitCommit = version["gitCommit"]
+        res.buildTime = version["buildTime"]
+        res.pythonVersion = version["pythonVersion"]
+        res.os = version["os"]
+        res.arch = version["arch"]
+        res.djangoVersion = version["djangoVersion"]
 
         REQUEST_COUNT.labels(
             "xos-core", "Utilities", "GetVersion", grpc.StatusCode.OK
diff --git a/xos/coreapi/xos_version.py b/xos/coreapi/xos_version.py
new file mode 100644
index 0000000..d2dca16
--- /dev/null
+++ b/xos/coreapi/xos_version.py
@@ -0,0 +1,48 @@
+# Copyright 2017-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import datetime
+from django import VERSION as DJANGO_VERSION
+import os
+import sys
+from xosconfig import Config
+from multistructlog import create_logger
+
+log = create_logger(Config().get("logging"))
+
+
+def get_version_dict():
+    """ Return built-time version information """
+    res = {}
+    try:
+        res["version"] = open("/opt/xos/VERSION").readline().strip()
+    except Exception:
+        log.exception("Exception while determining build version")
+        res["version"] = "unknown"
+
+    try:
+        res["gitCommit"] = open("/opt/xos/COMMIT").readline().strip()
+        res["buildTime"] = datetime.datetime.utcfromtimestamp(
+            os.stat("/opt/xos/COMMIT").st_ctime).strftime("%Y-%m-%dT%H:%M:%SZ")
+    except Exception:
+        log.exception("Exception while determining build information")
+        res["buildDate"] = "unknown"
+        res["gitCommit"] = "unknown"
+
+    res["pythonVersion"] = sys.version.split("\n")[0].strip().split(" ")[0]
+    res["os"] = os.uname()[0].lower()
+    res["arch"] = os.uname()[4].lower()
+    res["djangoVersion"] = ".".join([str(x) for x in DJANGO_VERSION])
+
+    return res
