diff --git a/xos/xos_client/xosapi/convenience/service.py b/xos/xos_client/xosapi/convenience/service.py
index 063e73c..f8d108f 100644
--- a/xos/xos_client/xosapi/convenience/service.py
+++ b/xos/xos_client/xosapi/convenience/service.py
@@ -48,5 +48,21 @@
     def get_service_instance_class(self):
         return getattr(self.stub, self.get_service_instance_class_name())
 
+    @property
+    def provider_services(self):
+        svcs = []
+        service_deps = self.subscribed_dependencies.all()
+        for dep in service_deps:
+            svcs.append(dep.provider_service)
+        return svcs
+
+    @property
+    def subscriber_services(self):
+        svcs = []
+        service_deps = self.provided_dependencies.all()
+        for dep in service_deps:
+            svcs.append(dep.subscriber_service)
+        return svcs
+
 
 register_convenience_wrapper("Service", ORMWrapperService)
diff --git a/xos/xos_client/xosapi/convenience/serviceinstance.py b/xos/xos_client/xosapi/convenience/serviceinstance.py
index 5bc79d7..5ed3883 100644
--- a/xos/xos_client/xosapi/convenience/serviceinstance.py
+++ b/xos/xos_client/xosapi/convenience/serviceinstance.py
@@ -75,12 +75,15 @@
         wi = self.westbound_service_instances
 
         if len(wi) == 0:
-            raise Exception('ServiceInstance %s has no westbound service instances')
+            log.error("ServiceInstance with id %s has no westbound service instances, can't find property %s in the chain" % (self.id, prop_name))
+            raise Exception("ServiceInstance with id %s has no westbound service instances" % self.id)
 
         for i in wi:
             if hasattr(i, prop_name):
                 return getattr(i, prop_name)
             else:
+                # cast to the ServiceInstance model
+                i = self.stub.ServiceInstance.objects.get(id=i.id)
                 return i.get_westbound_service_instance_properties(prop_name)
 
 register_convenience_wrapper("ServiceInstance", ORMWrapperServiceInstance)
\ No newline at end of file
diff --git a/xos/xos_client/xosapi/convenience/voltserviceinstance.py b/xos/xos_client/xosapi/convenience/voltserviceinstance.py
index aff3ac4..9d2b7aa 100644
--- a/xos/xos_client/xosapi/convenience/voltserviceinstance.py
+++ b/xos/xos_client/xosapi/convenience/voltserviceinstance.py
@@ -55,18 +55,65 @@
             'VOLTServiceInstance.c_tag is DEPRECATED, use get_westbound_service_instance_properties instead')
         return self.subscriber.c_tag
 
-    @property
-    def s_tag(self):
-        log.warning(
-            'VOLTServiceInstance.s_tag is DEPRECATED, use get_westbound_service_instance_properties instead')
+    def get_olt_device_by_subscriber(self):
         if not self.subscriber:
-            raise Exception("vOLT %s has no subscriber" % self.name)
+            raise Exception("vOLTServiceInstance %s has no subscriber" % self.name)
 
         olt_device = self.stub.OLTDevice.objects.get(name=self.subscriber.olt_device)
-        olt_port = self.stub.PONPort.objects.get(name=self.subscriber.olt_port, olt_device_id=olt_device.id)
+        return olt_device
 
-        if olt_port:
-            return olt_port.s_tag
-        return None
+    def get_olt_port_by_subscriber(self):
+        if not self.subscriber:
+            raise Exception("vOLTServiceInstance %s has no subscriber" % self.name)
+
+        olt_device = self.get_olt_device_by_subscriber()
+        olt_port = self.stub.PONPort.objects.get(name=self.subscriber.olt_port, olt_device_id=olt_device.id)
+        return olt_port
+
+    @property
+    def s_tag(self):
+        try:
+            olt_port = self.get_olt_device_by_subscriber()
+
+            if olt_port:
+                return olt_port.s_tag
+            return None
+        except Exception, e:
+            log.warning('Error while reading c_tag: %s' % e.message)
+            return None
+
+    @property
+    def switch_datapath_id(self):
+        try:
+            olt_device = self.get_olt_device_by_subscriber()
+            if olt_device:
+                return olt_device.switch_datapath_id
+            return None
+        except Exception, e:
+            log.warning('Error while reading switch_datapath_id: %s' % e.message)
+            return None
+
+    @property
+    def switch_port(self):
+        try:
+            olt_device = self.get_olt_device_by_subscriber()
+            if olt_device:
+                return olt_device.switch_port
+            return None
+        except Exception, e:
+            log.warning('Error while reading switch_port: %s' % e.message)
+            return None
+
+    @property
+    def outer_tpid(self):
+        try:
+            olt_device = self.get_olt_device_by_subscriber()
+            if olt_device:
+                return olt_device.outer_tpid
+            return None
+        except Exception, e:
+            log.warning('Error while reading outer_tpid: %s' % e.message)
+            return None
+
 
 register_convenience_wrapper("VOLTServiceInstance", ORMWrapperVOLTServiceInstance)
