diff --git a/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/OpenstackNetworkService.java b/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/OpenstackNetworkService.java
index 7b192f1..d0bab0f 100644
--- a/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/OpenstackNetworkService.java
+++ b/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/OpenstackNetworkService.java
@@ -16,6 +16,7 @@
 package org.onosproject.openstacknetworking.api;
 
 import org.onlab.packet.IpAddress;
+import org.onlab.packet.IpPrefix;
 import org.onlab.packet.MacAddress;
 import org.onosproject.event.ListenerService;
 import org.openstack4j.model.network.ExternalGateway;
@@ -100,6 +101,14 @@
     Set<Port> ports(String networkId);
 
     /**
+     * Obtains a set of fixed IP addresses managed by the given network type.
+     *
+     * @param type network type (FLAT, VXLAN, VLAN, etc.)
+     * @return a set of fixed IP addresses
+     */
+    Set<IpPrefix> getFixedIpsByNetworkType(String type);
+
+    /**
      * Returns external router mac with supplied external gateway.
      *
      * @param externalGateway external gateway information
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackNetworkManager.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackNetworkManager.java
index fe5f483..e8747cc 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackNetworkManager.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackNetworkManager.java
@@ -17,6 +17,7 @@
 
 import com.google.common.base.Strings;
 import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Sets;
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Deactivate;
@@ -26,6 +27,7 @@
 import org.onlab.packet.ARP;
 import org.onlab.packet.Ethernet;
 import org.onlab.packet.IpAddress;
+import org.onlab.packet.IpPrefix;
 import org.onlab.packet.MacAddress;
 import org.onlab.packet.VlanId;
 import org.onlab.util.KryoNamespace;
@@ -51,9 +53,11 @@
 import org.onosproject.store.service.ConsistentMap;
 import org.onosproject.store.service.Serializer;
 import org.onosproject.store.service.StorageService;
+import org.openstack4j.model.common.IdEntity;
 import org.openstack4j.model.network.ExternalGateway;
 import org.openstack4j.model.network.IP;
 import org.openstack4j.model.network.Network;
+import org.openstack4j.model.network.NetworkType;
 import org.openstack4j.model.network.Port;
 import org.openstack4j.model.network.Router;
 import org.openstack4j.model.network.Subnet;
@@ -111,6 +115,8 @@
     private static final String ERR_DUPLICATE = " already exists";
     private static final String PORT_NAME_PREFIX_VM = "tap";
 
+    private static final int PREFIX_LENGTH = 32;
+
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected CoreService coreService;
@@ -356,6 +362,49 @@
     }
 
     @Override
+    public Set<IpPrefix> getFixedIpsByNetworkType(String type) {
+        if (type == null) {
+            return Sets.newHashSet();
+        }
+
+        Set<Network> networks = osNetworkStore.networks();
+        Set<String> networkIds = Sets.newConcurrentHashSet();
+
+        switch (type.toUpperCase()) {
+            case "FLAT" :
+                networkIds = networks.stream()
+                        .filter(n -> n.getNetworkType() == NetworkType.FLAT)
+                        .map(IdEntity::getId).collect(Collectors.toSet());
+                break;
+            case "VXLAN" :
+                networkIds = networks.stream()
+                        .filter(n -> n.getNetworkType() == NetworkType.VXLAN)
+                        .map(IdEntity::getId).collect(Collectors.toSet());
+                break;
+            case "VLAN" :
+                networkIds = networks.stream()
+                        .filter(n -> n.getNetworkType() == NetworkType.VLAN)
+                        .map(IdEntity::getId).collect(Collectors.toSet());
+                break;
+            default:
+                break;
+        }
+
+        Set<IP> ips = Sets.newConcurrentHashSet();
+        for (String networkId : networkIds) {
+            osNetworkStore.ports()
+                    .stream()
+                    .filter(p -> p.getNetworkId().equals(networkId))
+                    .filter(p -> p.getFixedIps() != null)
+                    .forEach(p -> ips.addAll(p.getFixedIps()));
+        }
+
+        return ips.stream().map(ip -> IpPrefix.valueOf(
+                IpAddress.valueOf(ip.getIpAddress()), PREFIX_LENGTH))
+                .collect(Collectors.toSet());
+    }
+
+    @Override
     public ExternalPeerRouter externalPeerRouter(IpAddress ipAddress) {
         if (externalPeerRouterMap.containsKey(ipAddress.toString())) {
             return externalPeerRouterMap.get(ipAddress.toString()).value();
diff --git a/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/impl/OpenstackNetworkServiceAdapter.java b/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/impl/OpenstackNetworkServiceAdapter.java
index e824ec4..07290ad 100644
--- a/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/impl/OpenstackNetworkServiceAdapter.java
+++ b/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/impl/OpenstackNetworkServiceAdapter.java
@@ -17,6 +17,7 @@
 
 import com.google.common.collect.ImmutableSet;
 import org.onlab.packet.IpAddress;
+import org.onlab.packet.IpPrefix;
 import org.onlab.packet.MacAddress;
 import org.onosproject.openstacknetworking.api.ExternalPeerRouter;
 import org.onosproject.openstacknetworking.api.OpenstackNetworkListener;
@@ -78,6 +79,11 @@
     }
 
     @Override
+    public Set<IpPrefix> getFixedIpsByNetworkType(String type) {
+        return null;
+    }
+
+    @Override
     public MacAddress externalPeerRouterMac(ExternalGateway externalGateway) {
         return null;
     }
diff --git a/apps/openstacktelemetry/api/BUCK b/apps/openstacktelemetry/api/BUCK
index 40a119b..bd27fb6 100644
--- a/apps/openstacktelemetry/api/BUCK
+++ b/apps/openstacktelemetry/api/BUCK
@@ -1,12 +1,9 @@
-include_defs('//apps/openstacknode/openstack4j.bucklet')
-
 COMPILE_DEPS = [
     '//lib:CORE_DEPS',
     '//lib:kafka-clients',
     '//lib:jersey-client',
     '//lib:javax.ws.rs-api',
     '//lib:influxdb-java',
-    '//lib:openstack4j-core',
 ]
 
 TEST_DEPS = [
@@ -18,6 +15,4 @@
 osgi_jar_with_tests (
     deps = COMPILE_DEPS,
     test_deps = TEST_DEPS,
-
-    import_packages = INCLUDE_PACKAGES + ',' + EXCLUDE_PACKAGES  + ',' + ALL_PACKAGES,
 )
diff --git a/apps/openstacktelemetry/api/pom.xml b/apps/openstacktelemetry/api/pom.xml
index 4536492..9a9baf3 100644
--- a/apps/openstacktelemetry/api/pom.xml
+++ b/apps/openstacktelemetry/api/pom.xml
@@ -54,37 +54,10 @@
         </dependency>
 
         <dependency>
-            <groupId>org.pacesys</groupId>
-            <artifactId>openstack4j-core</artifactId>
-            <version>${openstack4j.version}</version>
-        </dependency>
-
-        <dependency>
             <groupId>org.apache.servicemix.bundles</groupId>
             <artifactId>org.apache.servicemix.bundles.kafka-clients</artifactId>
             <version>${kafka-client.version}</version>
         </dependency>
 
     </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <extensions>true</extensions>
-                <configuration>
-                    <instructions>
-                        <Bundle-SymbolicName>
-                            ${project.groupId}.${project.artifactId}
-                        </Bundle-SymbolicName>
-                        <Import-Package>
-                            !org.openstack4j.*,
-                            *
-                        </Import-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
 </project>
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/Constants.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/Constants.java
index d06d3f2..20a4afa 100644
--- a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/Constants.java
+++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/Constants.java
@@ -65,4 +65,7 @@
     public static final boolean DEFAULT_DISABLE = false;
     public static final boolean DEFAULT_ENABLE = true;
 
+    public static final String VXLAN = "VXLAN";
+    public static final String VLAN = "VLAN";
+    public static final String FLAT = "FLAT";
 }
diff --git a/apps/openstacktelemetry/app/BUCK b/apps/openstacktelemetry/app/BUCK
index 69c2c1e..97bc0f9 100644
--- a/apps/openstacktelemetry/app/BUCK
+++ b/apps/openstacktelemetry/app/BUCK
@@ -1,5 +1,3 @@
-include_defs('//apps/openstacknode/openstack4j.bucklet')
-
 GRPC_VER = '1.3.1'
 
 COMPILE_DEPS = [
@@ -20,14 +18,6 @@
     '//lib:GRPC_1.3',
     '//incubator/grpc-dependencies:grpc-core-repkg-' + GRPC_VER,
     '//lib:grpc-protobuf-lite-' + GRPC_VER,
-    '//lib:openstack4j-core',
-    '//lib:openstack4j-http-connector',
-    '//lib:openstack4j-httpclient',
-    '//lib:json-patch',
-    '//lib:jackson-coreutils',
-    '//lib:btf',
-    '//lib:msg-simple',
-    '//lib:snakeyaml',
 ]
 
 TEST_DEPS = [
@@ -46,8 +36,4 @@
     api_version = '1.0',
     api_description = 'OpenStack Network Telemetry REST API',
     api_package = 'org.onosproject.openstacktelemetry.web',
-
-    # dependency embedding
-    import_packages = INCLUDE_PACKAGES + ',' + EXCLUDE_PACKAGES  + ',' + ALL_PACKAGES,
-    bundle_classpath = get_openstack4j_deps_path() + get_jackson_deps_path()
 )
diff --git a/apps/openstacktelemetry/app/pom.xml b/apps/openstacktelemetry/app/pom.xml
index 4573d45..5b0f8bf 100644
--- a/apps/openstacktelemetry/app/pom.xml
+++ b/apps/openstacktelemetry/app/pom.xml
@@ -58,19 +58,19 @@
         <dependency>
             <groupId>com.google.protobuf</groupId>
             <artifactId>protobuf-java</artifactId>
-            <version>3.2.0</version>
+            <version>${protobuf-java.version}</version>
         </dependency>
 
         <dependency>
             <groupId>io.grpc</groupId>
             <artifactId>grpc-core</artifactId>
-            <version>1.3.1</version>
+            <version>${io-grpc.version}</version>
         </dependency>
 
         <dependency>
             <groupId>io.grpc</groupId>
             <artifactId>grpc-protobuf</artifactId>
-            <version>1.3.1</version>
+            <version>${io-grpc.version}</version>
         </dependency>
 
         <dependency>
@@ -145,47 +145,6 @@
         </dependency>
 
         <dependency>
-            <groupId>org.pacesys</groupId>
-            <artifactId>openstack4j-core</artifactId>
-            <version>${openstack4j.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.pacesys.openstack4j.connectors</groupId>
-            <artifactId>openstack4j-http-connector</artifactId>
-            <version>${openstack4j.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.pacesys.openstack4j.connectors</groupId>
-            <artifactId>openstack4j-httpclient</artifactId>
-            <version>${openstack4j.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>com.github.fge</groupId>
-            <artifactId>json-patch</artifactId>
-            <version>${json-patch.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>com.github.fge</groupId>
-            <artifactId>jackson-coreutils</artifactId>
-            <version>${jackson-coreutils.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>com.github.fge</groupId>
-            <artifactId>btf</artifactId>
-            <version>${btf.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>com.github.fge</groupId>
-            <artifactId>msg-simple</artifactId>
-            <version>${msg-simple.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.yaml</groupId>
-            <artifactId>snakeyaml</artifactId>
-            <version>${snakeyaml.version}</version>
-        </dependency>
-
-        <dependency>
             <groupId>org.glassfish.jersey.core</groupId>
             <artifactId>jersey-client</artifactId>
             <scope>test</scope>
@@ -277,21 +236,8 @@
                             ${project.groupId}.${project.artifactId}
                         </Bundle-SymbolicName>
                         <Import-Package>
-                            !org.apache.http.*,
-                            !com.fasterxml.jackson.dataformat.*,
-                            !javax.annotation,
                             *,org.glassfish.jersey.servlet
                         </Import-Package>
-                        <Embed-Dependency>
-                            openstack4j-core,
-                            openstack4j-http-connector,
-                            openstack4j-httpclient,
-                            json-patch,
-                            jackson-coreutils,
-                            btf,
-                            msg-simple,
-                            snakeyaml
-                        </Embed-Dependency>
                         <Web-ContextPath>${web.context}</Web-ContextPath>
                     </instructions>
                 </configuration>
diff --git a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/StatsFlowRuleManager.java b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/StatsFlowRuleManager.java
index 5453a27..9025224 100644
--- a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/StatsFlowRuleManager.java
+++ b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/StatsFlowRuleManager.java
@@ -29,12 +29,12 @@
 import org.onlab.packet.IpPrefix;
 import org.onlab.packet.MacAddress;
 import org.onlab.packet.VlanId;
+import org.onosproject.cfg.ComponentConfigService;
 import org.onosproject.core.ApplicationId;
 import org.onosproject.core.CoreService;
 import org.onosproject.mastership.MastershipService;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.Host;
-import org.onosproject.net.device.DeviceService;
 import org.onosproject.net.flow.DefaultFlowRule;
 import org.onosproject.net.flow.DefaultTrafficSelector;
 import org.onosproject.net.flow.DefaultTrafficTreatment;
@@ -51,16 +51,12 @@
 import org.onosproject.net.flow.criteria.TcpPortCriterion;
 import org.onosproject.net.flow.criteria.UdpPortCriterion;
 import org.onosproject.net.host.HostService;
-import org.onosproject.openstacknetworking.api.InstancePort;
-import org.onosproject.openstacknetworking.api.InstancePortService;
 import org.onosproject.openstacknetworking.api.OpenstackNetworkService;
 import org.onosproject.openstacktelemetry.api.FlowInfo;
 import org.onosproject.openstacktelemetry.api.OpenstackTelemetryService;
 import org.onosproject.openstacktelemetry.api.StatsFlowRule;
 import org.onosproject.openstacktelemetry.api.StatsFlowRuleAdminService;
 import org.onosproject.openstacktelemetry.api.StatsInfo;
-import org.openstack4j.model.network.Network;
-import org.openstack4j.model.network.NetworkType;
 import org.osgi.service.component.ComponentContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -71,7 +67,6 @@
 import java.util.Timer;
 import java.util.TimerTask;
 
-import static com.google.common.base.Preconditions.checkNotNull;
 import static org.onlab.packet.Ethernet.TYPE_IPV4;
 import static org.onlab.packet.IPv4.PROTOCOL_TCP;
 import static org.onlab.packet.IPv4.PROTOCOL_UDP;
@@ -88,11 +83,11 @@
 import static org.onosproject.openstacknetworking.api.Constants.VTAP_FLAT_OUTBOUND_TABLE;
 import static org.onosproject.openstacknetworking.api.Constants.VTAP_INBOUND_TABLE;
 import static org.onosproject.openstacknetworking.api.Constants.VTAP_OUTBOUND_TABLE;
+import static org.onosproject.openstacktelemetry.api.Constants.FLAT;
 import static org.onosproject.openstacktelemetry.api.Constants.OPENSTACK_TELEMETRY_APP_ID;
+import static org.onosproject.openstacktelemetry.api.Constants.VLAN;
+import static org.onosproject.openstacktelemetry.api.Constants.VXLAN;
 import static org.onosproject.openstacktelemetry.util.OpenstackTelemetryUtil.getBooleanProperty;
-import static org.openstack4j.model.network.NetworkType.FLAT;
-import static org.openstack4j.model.network.NetworkType.VLAN;
-import static org.openstack4j.model.network.NetworkType.VXLAN;
 
 /**
  * Flow rule manager for network statistics of a VM.
@@ -126,7 +121,7 @@
     protected HostService hostService;
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
-    protected DeviceService deviceService;
+    protected ComponentConfigService componentConfigService;
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected MastershipService mastershipService;
@@ -135,9 +130,6 @@
     protected OpenstackNetworkService osNetworkService;
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
-    protected InstancePortService instancePortService;
-
-    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected OpenstackTelemetryService telemetryService;
 
     @Property(name = REVERSE_PATH_STATS, boolValue = DEFAULT_REVERSE_PATH_STATS,
@@ -173,6 +165,8 @@
     protected void activate() {
         appId = coreService.registerApplication(OPENSTACK_TELEMETRY_APP_ID);
 
+        componentConfigService.registerProperties(getClass());
+
         this.start();
 
         log.info("Started");
@@ -180,6 +174,9 @@
 
     @Deactivate
     protected void deactivate() {
+
+        componentConfigService.unregisterProperties(getClass(), false);
+
         log.info("Stopped");
     }
 
@@ -209,10 +206,6 @@
     public void createStatFlowRule(StatsFlowRule statsFlowRule) {
 
         setStatFlowRule(statsFlowRule, true);
-
-        log.info("Install stat flow rule for SrcIp:{} DstIp:{}",
-                statsFlowRule.srcIpPrefix().toString(),
-                statsFlowRule.dstIpPrefix().toString());
     }
 
     @Override
@@ -221,10 +214,6 @@
         flowRuleService.removeFlowRulesById(appId);
 
         setStatFlowRule(statsFlowRule, false);
-
-        log.info("Remove stat flow rule for SrcIp:{} DstIp:{}",
-                statsFlowRule.srcIpPrefix().toString(),
-                statsFlowRule.dstIpPrefix().toString());
     }
 
     private void connectTables(DeviceId deviceId, int fromTable, int toTable,
@@ -459,8 +448,11 @@
      * @param install flow rule installation flag
      */
     private void setStatFlowRuleBase(StatsFlowRule statsFlowRule, boolean install) {
-        DeviceId srcDeviceId = getDeviceId(statsFlowRule.srcIpPrefix().address());
-        DeviceId dstDeviceId = getDeviceId(statsFlowRule.dstIpPrefix().address());
+
+        IpPrefix srcIp = statsFlowRule.srcIpPrefix();
+        IpPrefix dstIp = statsFlowRule.dstIpPrefix();
+        DeviceId srcDeviceId = getDeviceId(srcIp.address());
+        DeviceId dstDeviceId = getDeviceId(dstIp.address());
 
         if (srcDeviceId == null && dstDeviceId == null) {
             return;
@@ -469,42 +461,47 @@
         if (srcDeviceId != null) {
             connectTables(srcDeviceId, STAT_INBOUND_TABLE, VTAP_INBOUND_TABLE,
                     statsFlowRule, METRIC_PRIORITY_SOURCE, install);
-        }
 
-        if (dstDeviceId != null && egressStats) {
-            NetworkType type = getNetworkType(statsFlowRule.dstIpPrefix());
-            if (type == VXLAN || type == VLAN) {
-                connectTables(dstDeviceId, STAT_OUTBOUND_TABLE, VTAP_OUTBOUND_TABLE,
-                        statsFlowRule, METRIC_PRIORITY_TARGET, install);
-            } else if (type == FLAT) {
-                connectTables(dstDeviceId, STAT_FLAT_OUTBOUND_TABLE, VTAP_FLAT_OUTBOUND_TABLE,
-                        statsFlowRule, METRIC_PRIORITY_TARGET, install);
+            if (install) {
+                log.info("Install ingress stat flow rule for SrcIp:{} DstIp:{}",
+                                            srcIp.toString(), dstIp.toString());
+            } else {
+                log.info("Remove ingress stat flow rule for SrcIp:{} DstIp:{}",
+                                            srcIp.toString(), dstIp.toString());
             }
         }
-    }
 
-    /**
-     * Obtains the network type that is used by the VM which has the given IP.
-     *
-     * @param ipPrefix IP prefix
-     * @return network type
-     */
-    private NetworkType getNetworkType(IpPrefix ipPrefix) {
+        Set<IpPrefix> vxlanIps = osNetworkService.getFixedIpsByNetworkType(VXLAN);
+        Set<IpPrefix> vlanIps = osNetworkService.getFixedIpsByNetworkType(VLAN);
+        Set<IpPrefix> flatIps = osNetworkService.getFixedIpsByNetworkType(FLAT);
 
-        MacAddress mac = checkNotNull(getMacAddress(ipPrefix.address()), MAC_NOT_NULL);
-        InstancePort instPort = instancePortService.instancePort(mac);
+        int fromTable, toTable;
 
-        if (instPort == null) {
-            return null;
+        if (dstDeviceId != null && egressStats) {
+
+            IpPrefix dstIpPrefix = statsFlowRule.dstIpPrefix();
+
+            if (vxlanIps.contains(dstIpPrefix) || vlanIps.contains(dstIpPrefix)) {
+                fromTable = STAT_OUTBOUND_TABLE;
+                toTable = VTAP_OUTBOUND_TABLE;
+            } else if (flatIps.contains(dstIpPrefix)) {
+                fromTable = STAT_FLAT_OUTBOUND_TABLE;
+                toTable = VTAP_FLAT_OUTBOUND_TABLE;
+            } else {
+                return;
+            }
+
+            connectTables(dstDeviceId, fromTable, toTable,
+                    statsFlowRule, METRIC_PRIORITY_TARGET, install);
+
+            if (install) {
+                log.info("Install egress stat flow rule for SrcIp:{} DstIp:{}",
+                                            srcIp.toString(), dstIp.toString());
+            } else {
+                log.info("Remove egress stat flow rule for SrcIp:{} DstIp:{}",
+                                            srcIp.toString(), dstIp.toString());
+            }
         }
-
-        Network network = osNetworkService.network(instPort.networkId());
-
-        if (network != null) {
-            return network.getNetworkType();
-        }
-
-        return null;
     }
 
     /**
diff --git a/apps/openstacktelemetry/pom.xml b/apps/openstacktelemetry/pom.xml
index f6372ad..0bf8590 100644
--- a/apps/openstacktelemetry/pom.xml
+++ b/apps/openstacktelemetry/pom.xml
@@ -31,14 +31,10 @@
     <description>SONA Openstack Telemetry Application</description>
 
     <properties>
-        <openstack4j.version>3.1.0</openstack4j.version>
         <influxdb-java.version>2.2</influxdb-java.version>
         <kafka-client.version>0.8.2.2_1</kafka-client.version>
-        <json-patch.version>1.9</json-patch.version>
-        <jackson-coreutils.version>1.6</jackson-coreutils.version>
-        <btf.version>1.2</btf.version>
-        <msg-simple.version>1.1</msg-simple.version>
-        <snakeyaml.version>1.15</snakeyaml.version>
+        <protobuf-java.version>3.2.0</protobuf-java.version>
+        <io-grpc.version>1.3.1</io-grpc.version>
     </properties>
 
     <modules>
