diff --git a/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java b/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java
index 5d280ae..711c2b1 100644
--- a/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java
+++ b/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java
@@ -1409,6 +1409,7 @@
         return adjecencyInfo.keySet();
     }
 
+
     /**
      * Send a Barrier request message and wait for the reply.
      * It waits for the reply for 2 seconds and it cause exception when timer
diff --git a/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingTunnel.java b/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingTunnel.java
index 91acfe5..d1deb55 100644
--- a/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingTunnel.java
+++ b/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingTunnel.java
@@ -219,6 +219,7 @@
             NeighborSet ns) {
 
         IOF13Switch targetSw = srManager.getIOF13Switch(routeInfo.srcSwDpid);
+        int groupId = -1;
 
         if (targetSw == null) {
             log.debug("Switch {} is gone.", routeInfo.srcSwDpid);
@@ -229,8 +230,20 @@
         for (String IdStr: routeInfo.route)
             Ids.add(Integer.parseInt(IdStr));
 
-        List<PortNumber> ports = getPortsFromNeighborSet(routeInfo.srcSwDpid, ns);
-        int groupId = targetSw.createGroup(Ids, ports);
+        List<PortNumber> portNumbers = new ArrayList<PortNumber>();
+        if (routeInfo.getSrcAdjanceySid() != null) {
+            String nodeSid = srManager.getMplsLabel(routeInfo.getSrcSwDpid());
+            List<Integer> ports = srManager.getAdacencyPorts(Integer.parseInt(nodeSid),
+                    Integer.parseInt(routeInfo.getSrcAdjanceySid()));
+            for (int port: ports) {
+                portNumbers.add(PortNumber.uint32(port));
+            }
+        }
+        else {
+            portNumbers = getPortsFromNeighborSet(routeInfo.srcSwDpid, ns);
+        }
+
+        groupId = targetSw.createGroup(Ids, portNumbers);
 
         return groupId;
     }
@@ -300,6 +313,9 @@
                         routeInfo.addRoute(nodeId);
                         i++;
                     }
+                    else if (srManager.isAdjacencySid(nodeId)) {
+                        routeInfo.setSrcAdjacencySid(nodeId);
+                    }
                     routeInfo.setFwdSwDpid(fwdSws);
                     // we check only the next node ID of the source router
                     checkNeighbor = false;
@@ -573,12 +589,17 @@
         private List<Dpid> fwdSwDpids;
         private List<String> route;
         private int gropuId;
+        private String srcAdjSid;
 
         public TunnelRouteInfo() {
             fwdSwDpids = new ArrayList<Dpid>();
             route = new ArrayList<String>();
         }
 
+        public void setSrcAdjacencySid(String nodeId) {
+            this.srcAdjSid = nodeId;
+        }
+
         private void setSrcDpid(String dpid) {
             this.srcSwDpid = dpid;
         }
@@ -595,6 +616,10 @@
             this.gropuId = groupId;
         }
 
+        private String getSrcAdjanceySid() {
+            return this.srcAdjSid;
+        }
+
         public String getSrcSwDpid() {
             return this.srcSwDpid;
         }
@@ -610,6 +635,7 @@
         public int getGroupId() {
             return this.gropuId;
         }
+
     }
 
 }
