diff --git a/src/main/java/net/onrc/onos/apps/segmentrouting/IcmpHandler.java b/src/main/java/net/onrc/onos/apps/segmentrouting/IcmpHandler.java
index 9366a2e..bca4bd5 100644
--- a/src/main/java/net/onrc/onos/apps/segmentrouting/IcmpHandler.java
+++ b/src/main/java/net/onrc/onos/apps/segmentrouting/IcmpHandler.java
@@ -105,8 +105,8 @@
 
             if (ipv4.getProtocol() == IPv4.PROTOCOL_ICMP) {
 
-                log.debug("ICMPHandler: Received a ICMP packet {} from sw {} ",
-                        payload.toString(), sw.getDpid());
+                log.debug("Received an ICMP packet from sw {} ",
+                        sw.getDpid());
                 IPv4Address destinationAddress =
                         IPv4Address.of(ipv4.getDestinationAddress());
 
@@ -120,7 +120,7 @@
                     if (((ICMP) ipv4.getPayload()).getIcmpType() == ICMP_TYPE_ECHO &&
                             (destinationAddress.getInt() == switchIpAddress.getInt() ||
                             gatewayIps.contains(destinationAddress.toString()))) {
-                        log.debug("ICMPHandler: ICMP packet for sw {} and "
+                        log.debug("ICMP packet for sw {} and "
                                 + "sending ICMP response ", sw.getDpid());
                         sendICMPResponse(sw, inPort, payload);
                         srManager.getIpPacketFromQueue(destinationAddress.getBytes());
@@ -166,8 +166,8 @@
                     }
                 }
                 /* ICMP for an unknown host */
-                log.debug("ICMPHandler: ICMP request for unknown host {}"
-                        + " and sending ARP request", destinationAddress);
+                log.debug("ICMPHandler: ICMP request for unknown host {}",
+                        destinationAddress);
                 srManager.sendArpRequest(sw, destinationAddress.getInt(), inPort);
             }
 
@@ -283,6 +283,9 @@
             // and the destination is not the neighbor switch, then add MPLS
             // label
             String targetMac = getRouterMACFromConfig(targetAddress);
+            if (targetMac == null) {
+                return; // targetMac should be always available
+            }
             if (!sameSubnet && !targetMac.equals(destMacAddress)) {
                 int mplsLabel = getMplsLabelFromConfig(targetAddress);
                 if (mplsLabel > 0) {
diff --git a/src/main/java/net/onrc/onos/core/configmanager/SegmentRouterConfig.java b/src/main/java/net/onrc/onos/core/configmanager/SegmentRouterConfig.java
index 58121e2..89df3c6 100644
--- a/src/main/java/net/onrc/onos/core/configmanager/SegmentRouterConfig.java
+++ b/src/main/java/net/onrc/onos/core/configmanager/SegmentRouterConfig.java
@@ -23,6 +23,7 @@
     private String routerIp;
     private String routerMac;
     private int nodeSid;
+    private boolean isEdgeRouter;
     private List<AdjacencySid> adjacencySids;
     private List<Subnet> subnets;
 
@@ -31,6 +32,7 @@
     public static final String NODE_SID = "nodeSid";
     public static final String ADJACENCY_SIDS = "adjacencySids";
     public static final String SUBNETS = "subnets";
+    public static final String ISEDGE = "isEdgeRouter";
 
     public SegmentRouterConfig(SwitchConfig swc) {
         this.setName(swc.getName());
@@ -75,6 +77,14 @@
         this.nodeSid = nodeSid;
     }
 
+    public boolean isEdgeRouter() {
+        return isEdgeRouter;
+    }
+
+    public void setIsEdgeRouter(boolean isEdge) {
+        this.isEdgeRouter = isEdge;
+    }
+
     public static class AdjacencySid {
         private int portNo;
         private int adjSid;
@@ -162,7 +172,10 @@
                 setRouterMac(j.asText());
             } else if (key.equals("nodeSid")) {
                 setNodeSid(j.asInt());
-            } else if (key.equals("adjacencySids") || key.equals("subnets")) {
+            } else if (key.equals("isEdgeRouter")) {
+                setIsEdgeRouter(j.asBoolean());
+            }
+            else if (key.equals("adjacencySids") || key.equals("subnets")) {
                 getInnerParams(j, key);
             } else {
                 throw new UnknownSegmentRouterConfig(key, dpid);
@@ -203,6 +216,12 @@
         if (routerIp == null) {
             throw new IpNotSpecified(dpid);
         }
+        if (isEdgeRouter && subnets.isEmpty()) {
+            throw new SubnetNotSpecifiedInEdgeRouter(dpid);
+        }
+        if (!isEdgeRouter && !subnets.isEmpty()) {
+            throw new SubnetSpecifiedInBackboneRouter(dpid);
+        }
 
         // TODO more validations
     }
@@ -216,6 +235,7 @@
         publishAttributes.put(ROUTER_IP, routerIp);
         publishAttributes.put(ROUTER_MAC, routerMac);
         publishAttributes.put(NODE_SID, String.valueOf(nodeSid));
+        publishAttributes.put(ISEDGE, String.valueOf(isEdgeRouter));
         ObjectMapper mapper = new ObjectMapper();
         try {
             publishAttributes.put(ADJACENCY_SIDS,
@@ -253,5 +273,26 @@
         }
     }
 
+    public static class SubnetNotSpecifiedInEdgeRouter extends RuntimeException {
+        private static final long serialVersionUID = -5855458472668581268L;
+
+        public SubnetNotSpecifiedInEdgeRouter(long dpid) {
+            super();
+            log.error("Subnet was not specified for edge router in dpid: {}",
+                    HexString.toHexString(dpid));
+        }
+    }
+
+    public static class SubnetSpecifiedInBackboneRouter extends RuntimeException {
+        private static final long serialVersionUID = -5855458472668581268L;
+
+        public SubnetSpecifiedInBackboneRouter(long dpid) {
+            super();
+            log.error("Subnet was specified in backbone router in dpid: {}",
+                    HexString.toHexString(dpid));
+        }
+    }
+
+
 
 }
