diff --git a/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterTunnelInfo.java b/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterTunnelInfo.java
index 4c6457a..105983b 100644
--- a/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterTunnelInfo.java
+++ b/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterTunnelInfo.java
@@ -9,12 +9,14 @@
     private String tunnelId;
     private List<List<String>> labelStack;
     private List<String> dpidGroup;
+    private String policies;
     
-    public SegmentRouterTunnelInfo (String tId,
-            List<List<String>> tunnelRoutes, List<String> dpidsWithGroup){
+    public SegmentRouterTunnelInfo (String tId,List<List<String>> tunnelRoutes,
+            List<String> dpidsWithGroup,String policiesId){
         this.tunnelId = tId;
         this.labelStack = tunnelRoutes;
         this.dpidGroup = dpidsWithGroup;
+        this.policies = policiesId;
     }
     public String getTunnelId (){
         return this.tunnelId;
@@ -25,4 +27,7 @@
     public List<String> getDpidGroup (){
         return this.dpidGroup;
     }
+    public String getPolicies (){
+        return this.policies;
+    }
 }
diff --git a/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterTunnelResource.java b/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterTunnelResource.java
index d391082..32d9cc6 100644
--- a/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterTunnelResource.java
+++ b/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterTunnelResource.java
@@ -2,12 +2,14 @@
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
 import net.onrc.onos.apps.segmentrouting.ISegmentRoutingService;
+import net.onrc.onos.apps.segmentrouting.SegmentRoutingManager.PolicyInfo;
 import net.onrc.onos.apps.segmentrouting.SegmentRoutingManager.TunnelInfo;
 import net.onrc.onos.apps.segmentrouting.SegmentRoutingManager.TunnelRouteInfo;
 
@@ -80,18 +82,31 @@
         List<SegmentRouterTunnelInfo> infoList = new ArrayList<SegmentRouterTunnelInfo>();
         while(ttI.hasNext()){
            TunnelInfo tunnelInfo = ttI.next();
+           String tunnelId = tunnelInfo.getTunnelId();
+           Collection<PolicyInfo> policies = segmentRoutingService.getPoclicyTable();
+           Iterator<PolicyInfo> piI = policies.iterator();
+           String policiesId = "";
+           while(piI.hasNext()){
+               PolicyInfo policy = piI.next();
+               if(policy.getTunnelId().equals(tunnelId)){
+                   policiesId += (policy.getPolicyId()+",");
+               }
+           }
+           if (policiesId.endsWith(",")){
+               policiesId = (String) policiesId.subSequence(0, policiesId.length()-1);
+           }
            Iterator<TunnelRouteInfo>trI = tunnelInfo.getRoutes().iterator();
            List<List<String>> labelStack = new ArrayList<List<String>>();
            List<String> dpidGroup = new ArrayList<String>();
            while(trI.hasNext()){
                TunnelRouteInfo label = trI.next();
                labelStack.add(label.getRoute());
-               Integer gId = segmentRoutingService.getTunnelGroupId(tunnelInfo.getTunnelId(), 
+               Integer gId = segmentRoutingService.getTunnelGroupId(tunnelId, 
                        label.getSrcSwDpid());
                dpidGroup.add(label.getSrcSwDpid() + "/"+ gId);
            }
-           SegmentRouterTunnelInfo info = new SegmentRouterTunnelInfo(tunnelInfo.getTunnelId(),
-                    labelStack, dpidGroup);
+           SegmentRouterTunnelInfo info = new SegmentRouterTunnelInfo(tunnelId,
+                    labelStack, dpidGroup, policiesId);
            infoList.add(info);
         }
         log.debug("getTunnel with params");
