diff --git a/apps/fpcagent/src/main/java/org/onosproject/fpcagent/FpcRpcManager.java b/apps/fpcagent/src/main/java/org/onosproject/fpcagent/FpcRpcManager.java
index 3e9cce2..3a8c2f9 100644
--- a/apps/fpcagent/src/main/java/org/onosproject/fpcagent/FpcRpcManager.java
+++ b/apps/fpcagent/src/main/java/org/onosproject/fpcagent/FpcRpcManager.java
@@ -297,14 +297,20 @@
 
                 log.debug("handling configure create event {} for {}", commands, dpn.dpnId());
 
-                Ip4Address s1UEnodebIpv4 = Ip4Address.valueOf(context.ul().tunnelLocalAddress().toString()),
-                        s1USgwIpv4 = Ip4Address.valueOf(context.ul().tunnelRemoteAddress().toString());
+                Ip4Address s1USgwIpv4Dl = Ip4Address.valueOf(context.dl().tunnelLocalAddress().toString()),
+                        s1UEnodebIpv4Dl = Ip4Address.valueOf(context.dl().tunnelRemoteAddress().toString()),
+			s1UEnodebIpv4Ul = Ip4Address.valueOf(context.ul().tunnelLocalAddress().toString()),
+                        s1USgwIpv4Ul = Ip4Address.valueOf(context.ul().tunnelRemoteAddress().toString());
 
                 long clientId = clientInfo.clientId().fpcIdentity().union().int64(),
                         sessionId = context.contextId().fpcIdentity().union().int64(),
-                        s1USgwGtpuTeid = ((ThreegppTunnel) context.ul().mobilityTunnelParameters()
+                        s1USgwGtpuTeidUl = ((ThreegppTunnel) context.ul().mobilityTunnelParameters()
                                 .mobprofileParameters()).tunnelIdentifier(),
-                        s1UEnbGtpuTeid = ((ThreegppTunnel) context.ul().mobilityTunnelParameters()
+                        s1UEnbGtpuTeidUl = ((ThreegppTunnel) context.ul().mobilityTunnelParameters()
+                                .mobprofileParameters()).tunnelIdentifier(),
+                        s1USgwGtpuTeidDl = ((ThreegppTunnel) context.dl().mobilityTunnelParameters()
+                                .mobprofileParameters()).tunnelIdentifier(),
+                        s1UEnbGtpuTeidDl = ((ThreegppTunnel) context.dl().mobilityTunnelParameters()
                                 .mobprofileParameters()).tunnelIdentifier();
 
                 BigInteger opId = operationId.uint64(),
@@ -321,8 +327,8 @@
                                 imsi,
                                 defaultEbi,
                                 Ip4Prefix.valueOf(context.delegatingIpPrefixes().get(0).toString()).address(),
-                                s1USgwGtpuTeid,
-                                s1USgwIpv4,
+                                s1USgwGtpuTeidUl,
+                                s1USgwIpv4Ul,
                                 sessionId,
                                 clientId,
                                 opId
@@ -340,9 +346,9 @@
                         tasks.add(Executors.callable(() -> {
                             dpnCommunicationService.modifyBearer(
                                     topicId,
-                                    s1USgwIpv4,
-                                    s1UEnbGtpuTeid,
-                                    s1UEnodebIpv4,
+                                    s1USgwIpv4Dl,
+                                    s1UEnbGtpuTeidDl,
+                                    s1UEnodebIpv4Dl,
                                     sessionId,
                                     clientId,
                                     opId
@@ -460,10 +466,14 @@
 
                 log.debug("handling configure update event {} for {}", commands, dpn.dpnId());
 
-                Ip4Address s1UEnodebIpv4 = Ip4Address.valueOf(context.ul().tunnelLocalAddress().toString()),
-                        s1USgwIpv4 = Ip4Address.valueOf(context.ul().tunnelRemoteAddress().toString());
+                Ip4Address s1USgwIpv4Dl = Ip4Address.valueOf(context.dl().tunnelLocalAddress().toString()),
+                        s1UEnodebIpv4Dl = Ip4Address.valueOf(context.dl().tunnelRemoteAddress().toString()),
+			s1UEnodebIpv4Ul = Ip4Address.valueOf(context.ul().tunnelLocalAddress().toString()),
+                        s1USgwIpv4Ul = Ip4Address.valueOf(context.ul().tunnelRemoteAddress().toString());
 
-                long s1UEnbGtpuTeid = ((ThreegppTunnel) context.dl().mobilityTunnelParameters()
+                long s1UEnbGtpuTeidDl = ((ThreegppTunnel) context.dl().mobilityTunnelParameters()
+                        .mobprofileParameters()).tunnelIdentifier(),
+			s1UEnbGtpuTeidUl = ((ThreegppTunnel) context.ul().mobilityTunnelParameters()
                         .mobprofileParameters()).tunnelIdentifier(),
                         cId = clientInfo.clientId().fpcIdentity().union().int64(),
                         contextId = context.contextId().fpcIdentity().union().int64();
@@ -476,9 +486,9 @@
                         tasks.add(Executors.callable(() -> {
                             dpnCommunicationService.modifyBearer(
                                     topicId,
-                                    s1USgwIpv4,
-                                    s1UEnbGtpuTeid,
-                                    s1UEnodebIpv4,
+                                    s1USgwIpv4Dl,
+                                    s1UEnbGtpuTeidDl,
+                                    s1UEnodebIpv4Dl,
                                     contextId,
                                     cId,
                                     opId
@@ -500,9 +510,9 @@
                         tasks.add(Executors.callable(() -> {
                             dpnCommunicationService.modifyBearer(
                                     topicId,
-                                    s1USgwIpv4,
-                                    s1UEnbGtpuTeid,
-                                    s1UEnodebIpv4,
+                                    s1USgwIpv4Ul,
+                                    s1UEnbGtpuTeidUl,
+                                    s1UEnodebIpv4Ul,
                                     contextId,
                                     cId,
                                     opId
