diff --git a/api/pom.xml b/api/pom.xml
index cde1c47..b9afe7f 100644
--- a/api/pom.xml
+++ b/api/pom.xml
@@ -24,6 +24,7 @@
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
+    <version>${dhcpl2relay.api.version}</version>
     <artifactId>dhcpl2relay-api</artifactId>
     <packaging>bundle</packaging>
     <description>DHCP L2 Relay application API</description>
diff --git a/app/app.xml b/app/app.xml
index f2d29af..b2b3cfc 100644
--- a/app/app.xml
+++ b/app/app.xml
@@ -18,8 +18,9 @@
      version="${project.version}"
      category="default" url="http://onosproject.org" title="DHCP L2 Relay"
      featuresRepo="mvn:${project.groupId}/${project.artifactId}/${project.version}/xml/features"
-     features="${project.artifactId}" apps="org.opencord.sadis">
+     features="${project.artifactId}">
     <description>${project.description}</description>
     <artifact>mvn:${project.groupId}/${project.artifactId}/${project.version}</artifact>
-    <artifact>mvn:${project.groupId}/dhcpl2relay-api/${project.version}</artifact>
+    <artifact>mvn:${project.groupId}/dhcpl2relay-api/${dhcpl2relay.api.version}</artifact>
+    <artifact>mvn:${project.groupId}/sadis-api/${sadis.api.version}</artifact>
 </app>
diff --git a/app/features.xml b/app/features.xml
index ba4b895..f23167b 100644
--- a/app/features.xml
+++ b/app/features.xml
@@ -18,7 +18,8 @@
     <feature name="${project.artifactId}" version="${project.version}"
              description="${project.description}">
         <feature>onos-api</feature>
-        <bundle>mvn:${project.groupId}/dhcpl2relay-api/${project.version}</bundle>
+        <bundle>mvn:${project.groupId}/dhcpl2relay-api/${dhcpl2relay.api.version}</bundle>
         <bundle>mvn:${project.groupId}/${project.artifactId}/${project.version}</bundle>
+        <bundle>mvn:${project.groupId}/sadis-api/${sadis.api.version}</bundle>
     </feature>
 </features>
diff --git a/app/pom.xml b/app/pom.xml
index 25a8fab..4137aed 100644
--- a/app/pom.xml
+++ b/app/pom.xml
@@ -65,7 +65,7 @@
         <dependency>
             <groupId>org.opencord</groupId>
             <artifactId>dhcpl2relay-api</artifactId>
-            <version>${project.version}</version>
+            <version>${dhcpl2relay.api.version}</version>
             <scope>compile</scope>
         </dependency>
 
diff --git a/app/src/main/java/org/opencord/dhcpl2relay/impl/DhcpL2Relay.java b/app/src/main/java/org/opencord/dhcpl2relay/impl/DhcpL2Relay.java
index 7f523b9..84765a9 100755
--- a/app/src/main/java/org/opencord/dhcpl2relay/impl/DhcpL2Relay.java
+++ b/app/src/main/java/org/opencord/dhcpl2relay/impl/DhcpL2Relay.java
@@ -116,6 +116,7 @@
 import org.osgi.service.component.annotations.Modified;
 import org.osgi.service.component.annotations.Reference;
 import org.osgi.service.component.annotations.ReferenceCardinality;
+import org.osgi.service.component.annotations.ReferencePolicy;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -137,7 +138,7 @@
 public class DhcpL2Relay
         extends AbstractListenerManager<DhcpL2RelayEvent, DhcpL2RelayListener>
         implements DhcpL2RelayService {
-
+    private static final String SADIS_NOT_RUNNING = "Sadis is not running.";
     public static final String DHCP_L2RELAY_APP = "org.opencord.dhcpl2relay";
     private static final String HOST_LOC_PROVIDER =
             "org.onosproject.provider.host.impl.HostLocationProvider";
@@ -147,8 +148,8 @@
 
     private final Set<ConfigFactory> factories = ImmutableSet.of(
             new ConfigFactory<ApplicationId, DhcpL2RelayConfig>(APP_SUBJECT_FACTORY,
-                                                                DhcpL2RelayConfig.class,
-                                                                "dhcpl2relay") {
+                    DhcpL2RelayConfig.class,
+                    "dhcpl2relay") {
                 @Override
                 public DhcpL2RelayConfig createConfig() {
                     return new DhcpL2RelayConfig();
@@ -171,8 +172,11 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
     protected ComponentConfigService componentConfigService;
 
-    @Reference(cardinality = ReferenceCardinality.MANDATORY)
-    protected SadisService sadisService;
+    @Reference(cardinality = ReferenceCardinality.OPTIONAL,
+            bind = "bindSadisService",
+            unbind = "unbindSadisService",
+            policy = ReferencePolicy.DYNAMIC)
+    protected volatile SadisService sadisService;
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
     protected DeviceService deviceService;
@@ -263,8 +267,11 @@
         mastershipService.addListener(changeListener);
         deviceService.addListener(deviceListener);
 
-        subsService = sadisService.getSubscriberInfoService();
-
+        if (sadisService != null) {
+            subsService = sadisService.getSubscriberInfoService();
+        } else {
+            log.warn(SADIS_NOT_RUNNING);
+        }
         factories.forEach(cfgService::registerConfigFactory);
         //update the dhcp server configuration.
         updateConfig();
@@ -326,11 +333,23 @@
                 packetProcessorExecutor.shutdown();
             }
             packetProcessorExecutor = newFixedThreadPool(packetProcessorThreads,
-                                                         groupedThreads("onos/dhcp",
-                                                                        "dhcp-packet-%d", log));
+                    groupedThreads("onos/dhcp",
+                            "dhcp-packet-%d", log));
         }
     }
 
+    protected void bindSadisService(SadisService service) {
+        sadisService = service;
+        subsService = sadisService.getSubscriberInfoService();
+        log.info("Sadis-service binds to onos.");
+    }
+
+    protected void unbindSadisService(SadisService service) {
+        sadisService = null;
+        subsService = null;
+        log.info("Sadis-service unbinds from onos.");
+    }
+
     @Override
     public Map<String, DhcpAllocationInfo> getAllocationInfo() {
         return ImmutableMap.copyOf(allocations.asJavaMap());
@@ -464,6 +483,10 @@
      * are returned
      */
     private List<ConnectPoint> getUplinkPortsOfOlts() {
+        if (subsService == null) {
+            log.warn(SADIS_NOT_RUNNING);
+            return Lists.newArrayList();
+        }
         List<ConnectPoint> cps = new ArrayList<>();
 
         // find all the olt devices and if their uplink ports are visible
@@ -478,7 +501,7 @@
             }
 
             String devSerialNo = d.serialNumber();
-            SubscriberAndDeviceInformation deviceInfo = subsService.get(devSerialNo);
+            SubscriberAndDeviceInformation deviceInfo = getSubscriberAndDeviceInfo(devSerialNo);
             log.debug("getUplinkPortsOfOlts: Found device: {}", deviceInfo);
             if (deviceInfo != null) {
                 // check if the uplink port with that number is available on the device
@@ -493,6 +516,14 @@
         return cps;
     }
 
+    private SubscriberAndDeviceInformation getSubscriberAndDeviceInfo(String portOrDevice) {
+        if (subsService == null) {
+            log.warn(SADIS_NOT_RUNNING);
+            return null;
+        }
+        return subsService.get(portOrDevice);
+    }
+
     /**
      * Returns whether the passed port is the uplink port of the olt device.
      */
@@ -500,7 +531,7 @@
         log.debug("isUplinkPortOfOlt: DeviceId: {} Port: {}", dId, p);
 
         Device d = deviceService.getDevice(dId);
-        SubscriberAndDeviceInformation deviceInfo = subsService.get(d.serialNumber());
+        SubscriberAndDeviceInformation deviceInfo = getSubscriberAndDeviceInfo(d.serialNumber());
 
         if (deviceInfo != null) {
             return (deviceInfo.uplinkPort() == p.number().toLong());
@@ -515,7 +546,7 @@
     private ConnectPoint getUplinkConnectPointOfOlt(DeviceId dId) {
 
         Device d = deviceService.getDevice(dId);
-        SubscriberAndDeviceInformation deviceInfo = subsService.get(d.serialNumber());
+        SubscriberAndDeviceInformation deviceInfo = getSubscriberAndDeviceInfo(d.serialNumber());
         log.debug("getUplinkConnectPointOfOlt DeviceId: {} devInfo: {}", dId, deviceInfo);
         if (deviceInfo != null) {
             PortNumber pNum = PortNumber.portNumber(deviceInfo.uplinkPort());
@@ -1148,7 +1179,7 @@
         private SubscriberAndDeviceInformation getSubscriber(ConnectPoint subsCp) {
             if (subsCp != null) {
                 String portName = getPortName(subsCp);
-                return subsService.get(portName);
+                return getSubscriberAndDeviceInfo(portName);
             }
             return null;
         }
@@ -1163,7 +1194,7 @@
          */
         private SubscriberAndDeviceInformation getSubscriber(PacketContext context) {
             String portName = getPortName(context.inPacket().receivedFrom());
-            return subsService.get(portName);
+            return getSubscriberAndDeviceInfo(portName);
         }
 
         /**
@@ -1267,7 +1298,7 @@
             String serialNo = deviceService
                     .getDevice(context.inPacket().receivedFrom().deviceId())
                     .serialNumber();
-            return subsService.get(serialNo);
+            return getSubscriberAndDeviceInfo(serialNo);
         }
 
     }
diff --git a/app/src/test/java/org/opencord/dhcpl2relay/impl/DhcpL2RelayTestBase.java b/app/src/test/java/org/opencord/dhcpl2relay/impl/DhcpL2RelayTestBase.java
index ccecb51..2392947 100755
--- a/app/src/test/java/org/opencord/dhcpl2relay/impl/DhcpL2RelayTestBase.java
+++ b/app/src/test/java/org/opencord/dhcpl2relay/impl/DhcpL2RelayTestBase.java
@@ -354,6 +354,11 @@
         }
 
         @Override
+        public void clearLocalData() {
+
+        }
+
+        @Override
         public void invalidateAll() {}
         @Override
         public void invalidateId(String id) {}
diff --git a/pom.xml b/pom.xml
index 71317e5..2f648c2 100755
--- a/pom.xml
+++ b/pom.xml
@@ -20,7 +20,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-dependencies</artifactId>
-        <version>2.2.2</version>
+        <version>2.2.7</version>
     </parent>
 
     <groupId>org.opencord</groupId>
@@ -32,7 +32,8 @@
     <url>http://opencord.org</url>
 
     <properties>
-        <sadis.api.version>5.2.0</sadis.api.version>
+        <sadis.api.version>5.3.0-SNAPSHOT</sadis.api.version>
+        <dhcpl2relay.api.version>2.4.0-SNAPSHOT</dhcpl2relay.api.version>
     </properties>
 
     <modules>
