TeTopology core and nbi bug fixes and improvements

Change-Id: I5f3dbcaa79b04c1b1b00b9df7ccae804953c3bae
diff --git a/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/EnumConverter.java b/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/EnumConverter.java
index 1e15726..f733231 100644
--- a/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/EnumConverter.java
+++ b/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/EnumConverter.java
@@ -146,4 +146,4 @@
         }
     }
 
-}
+}
\ No newline at end of file
diff --git a/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/LinkConverter.java b/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/LinkConverter.java
index c567667..1234f7c 100644
--- a/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/LinkConverter.java
+++ b/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/LinkConverter.java
@@ -15,7 +15,14 @@
  */
 package org.onosproject.teyang.utils.topology;
 
-import com.google.common.collect.Lists;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static org.onosproject.tetopology.management.api.TeConstants.MAX_PRIORITY;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.BitSet;
+import java.util.List;
+
 import org.onlab.packet.Ip4Address;
 import org.onosproject.tetopology.management.api.KeyId;
 import org.onosproject.tetopology.management.api.TeStatus;
@@ -24,6 +31,7 @@
 import org.onosproject.tetopology.management.api.link.CommonLinkData;
 import org.onosproject.tetopology.management.api.link.DefaultNetworkLink;
 import org.onosproject.tetopology.management.api.link.DefaultTeLink;
+import org.onosproject.tetopology.management.api.link.ElementType;
 import org.onosproject.tetopology.management.api.link.ExternalLink;
 import org.onosproject.tetopology.management.api.link.LinkBandwidth;
 import org.onosproject.tetopology.management.api.link.NetworkLink;
@@ -31,6 +39,7 @@
 import org.onosproject.tetopology.management.api.link.NetworkLinkKey;
 import org.onosproject.tetopology.management.api.link.PathElement;
 import org.onosproject.tetopology.management.api.link.TeLink;
+import org.onosproject.tetopology.management.api.link.TeLinkId;
 import org.onosproject.tetopology.management.api.link.TeLinkTpGlobalKey;
 import org.onosproject.tetopology.management.api.link.TeLinkTpKey;
 import org.onosproject.tetopology.management.api.link.TePathAttributes;
@@ -41,137 +50,96 @@
 import org.onosproject.tetopology.management.api.node.NodeTpKey;
 import org.onosproject.tetopology.management.api.node.TeNode;
 import org.onosproject.tetopology.management.api.node.TerminationPointKey;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev20130715.ietfinettypes.IpAddress;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.NetworkId;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.Networks;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.NodeId;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.networks.Network;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.networks.network
-        .Node;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology
-        .LinkId;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology
-        .TpId;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology
-        .networks.network.AugmentedNdNetwork;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology
-        .networks.network.augmentedndnetwork.DefaultLink;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology
-        .networks.network.augmentedndnetwork.DefaultLink.LinkBuilder;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology
-        .networks.network.augmentedndnetwork.Link;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology
-        .networks.network.augmentedndnetwork.link.DefaultDestination;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology
-        .networks.network.augmentedndnetwork.link.DefaultSource;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology
-        .networks.network.augmentedndnetwork.link.DefaultSupportingLink;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology
-        .networks.network.augmentedndnetwork.link.Destination.DestinationBuilder;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology
-        .networks.network.augmentedndnetwork.link.Source.SourceBuilder;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology
-        .networks.network.augmentedndnetwork.link.SupportingLink;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology
-        .networks.network.augmentedndnetwork.link.SupportingLink.SupportingLinkBuilder;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology
-        .networks.network.node.AugmentedNdNode;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .DefaultTeLinkEvent;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.networks.network.Node;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
+               .ietfnetworktopology.LinkId;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
+               .ietfnetworktopology.TpId;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology.networks.network.AugmentedNdNetwork;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
+               .ietfnetworktopology.networks.network.augmentedndnetwork.DefaultLink;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
+               .ietfnetworktopology.networks.network.augmentedndnetwork.DefaultLink.LinkBuilder;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
+               .ietfnetworktopology.networks.network.augmentedndnetwork.Link;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
+               .ietfnetworktopology.networks.network.augmentedndnetwork.link.DefaultDestination;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
+               .ietfnetworktopology.networks.network.augmentedndnetwork.link.DefaultSource;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
+               .ietfnetworktopology.networks.network.augmentedndnetwork.link.DefaultSupportingLink;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
+                .ietfnetworktopology.networks.network.augmentedndnetwork.link.Destination
+                .DestinationBuilder;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
+               .ietfnetworktopology.networks.network.augmentedndnetwork.link.Source.SourceBuilder;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
+               .ietfnetworktopology.networks.network.augmentedndnetwork.link.SupportingLink;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
+               .ietfnetworktopology.networks.network.augmentedndnetwork.link.SupportingLink
+               .SupportingLinkBuilder;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology.networks.network.node.AugmentedNdNode;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.DefaultTeLinkEvent;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.TeLinkEvent;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .informationsourceattributes.DefaultInformationSourceState;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .informationsourceattributes.InformationSourceState;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .informationsourceattributes.informationsourcestate.DefaultTopology;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .informationsourceattributes.informationsourcestate.Topology;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.networks
-        .network.AugmentedNwNetwork;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.networks
-        .network.link.AugmentedNtLink;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.networks
-        .network.link.DefaultAugmentedNtLink;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.networks
-        .network.link.DefaultAugmentedNtLink.AugmentedNtLinkBuilder;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.networks
-        .network.node.AugmentedNwNode;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.networks
-        .network.node.terminationpoint.AugmentedNtTerminationPoint;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .telinkaugment.DefaultTe;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .telinkaugment.DefaultTe.TeBuilder;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .telinkaugment.te.Config;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .telinkaugment.te.DefaultConfig;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .telinkaugment.te.DefaultConfig.ConfigBuilder;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .telinkaugment.te.DefaultState;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .telinkaugment.te.DefaultState.StateBuilder;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .telinkaugment.te.State;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .telinkconfigattributes.DefaultTeLinkAttributes;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .telinkconfigattributes.DefaultTeLinkAttributes.TeLinkAttributesBuilder;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .telinkconfigattributes.TeLinkAttributes;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .telinkconfigattributes.telinkattributes.DefaultExternalDomain;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .telinkconfigattributes.telinkattributes.DefaultExternalDomain.ExternalDomainBuilder;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .telinkconfigattributes.telinkattributes.DefaultUnderlay.UnderlayBuilder;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .telinkconfigattributes.telinkattributes.ExternalDomain;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .telinkconnectivityattributes.DefaultTeSrlgs;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .telinkconnectivityattributes.DefaultTeSrlgs.TeSrlgsBuilder;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .telinkconnectivityattributes.DefaultUnreservedBandwidth;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .telinkconnectivityattributes.DefaultUnreservedBandwidth.UnreservedBandwidthBuilder;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .telinkconnectivityattributes.TeSrlgs;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .telinkconnectivityattributes.UnreservedBandwidth;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .telinkinfoattributes.LinkProtectionTypeEnum;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .telinkunderlayattributes.DefaultUnderlayBackupPath;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .telinkunderlayattributes.DefaultUnderlayBackupPath.UnderlayBackupPathBuilder;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .telinkunderlayattributes.DefaultUnderlayPrimaryPath;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .telinkunderlayattributes.DefaultUnderlayPrimaryPath.UnderlayPrimaryPathBuilder;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .telinkunderlayattributes.UnderlayPrimaryPath;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .telinkunderlayattributes.underlayprimarypath.DefaultPathElement;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .tenodeaugment.Te;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.informationsourceattributes.DefaultInformationSourceState;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.informationsourceattributes.InformationSourceState;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.informationsourceattributes.informationsourcestate.DefaultTopology;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.informationsourceattributes.informationsourcestate.Topology;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.networks.network.AugmentedNwNetwork;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
+               .ietftetopology.networks.network.link.AugmentedNtLink;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
+               .ietftetopology.networks.network.link.DefaultAugmentedNtLink;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
+               .ietftetopology.networks.network.link.DefaultAugmentedNtLink.AugmentedNtLinkBuilder;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.networks.network.node.AugmentedNwNode;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.networks.network.node.terminationpoint.AugmentedNtTerminationPoint;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkaugment.DefaultTe;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkaugment.DefaultTe.TeBuilder;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkaugment.te.Config;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkaugment.te.DefaultConfig;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkaugment.te.DefaultConfig.ConfigBuilder;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkaugment.te.DefaultState;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkaugment.te.DefaultState.StateBuilder;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkaugment.te.State;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconfigattributes.DefaultTeLinkAttributes;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconfigattributes.DefaultTeLinkAttributes.TeLinkAttributesBuilder;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconfigattributes.TeLinkAttributes;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconfigattributes.telinkattributes.DefaultExternalDomain;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconfigattributes.telinkattributes.DefaultExternalDomain.ExternalDomainBuilder;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconfigattributes.telinkattributes.DefaultUnderlay;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconfigattributes.telinkattributes.DefaultUnderlay.UnderlayBuilder;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconfigattributes.telinkattributes.ExternalDomain;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconnectivityattributes.DefaultTeSrlgs;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconnectivityattributes.DefaultTeSrlgs.TeSrlgsBuilder;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconnectivityattributes.DefaultUnreservedBandwidth;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconnectivityattributes.DefaultUnreservedBandwidth.UnreservedBandwidthBuilder;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconnectivityattributes.TeSrlgs;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconnectivityattributes.UnreservedBandwidth;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkinfoattributes.LinkProtectionTypeEnum;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkunderlayattributes.DefaultUnderlayBackupPath;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkunderlayattributes.DefaultUnderlayBackupPath.UnderlayBackupPathBuilder;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkunderlayattributes.DefaultUnderlayPrimaryPath;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkunderlayattributes.DefaultUnderlayPrimaryPath.UnderlayPrimaryPathBuilder;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkunderlayattributes.UnderlayPrimaryPath;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkunderlayattributes.underlayprimarypath.DefaultPathElement;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeaugment.Te;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.Srlg;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.TeNodeId;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.TeOperStatus;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes
-        .TeTopologyEventType;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.TeTopologyEventType;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.TeTpId;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes
-        .tetopologyeventtype.TeTopologyEventTypeEnum;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.explicitroutesubobject.type.DefaultUnnumberedLink;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.explicitroutesubobject.type.DefaultUnnumberedLink.UnnumberedLinkBuilder;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.explicitroutesubobject.type.UnnumberedLink;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.tetopologyeventtype.TeTopologyEventTypeEnum;
 
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.BitSet;
-import java.util.List;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
+import com.google.common.collect.Lists;
 
 /**
  * The conversion functions.
@@ -194,30 +162,29 @@
 
     private static LinkProtectionTypeEnum teSubsystem2YangLinkProtectionType(TunnelProtectionType linkProtectionType) {
         switch (linkProtectionType) {
-            case ENHANCED:
-                return LinkProtectionTypeEnum.ENHANCED;
-            case EXTRA_TRAFFIC:
-                return LinkProtectionTypeEnum.EXTRA_TRAFFIC;
-            case SHARED:
-                return LinkProtectionTypeEnum.SHARED;
-            case UNPROTECTED:
-                return LinkProtectionTypeEnum.UNPROTECTED;
-            case ONE_FOR_ONE:
-                return LinkProtectionTypeEnum.YANGAUTOPREFIX1_FOR_1;
-            case ONE_PLUS_ONE:
-                return LinkProtectionTypeEnum.YANGAUTOPREFIX1_PLUS_1;
-            default:
-                return null;
+        case ENHANCED:
+            return LinkProtectionTypeEnum.ENHANCED;
+        case EXTRA_TRAFFIC:
+            return LinkProtectionTypeEnum.EXTRA_TRAFFIC;
+        case SHARED:
+            return LinkProtectionTypeEnum.SHARED;
+        case UNPROTECTED:
+            return LinkProtectionTypeEnum.UNPROTECTED;
+        case ONE_FOR_ONE:
+            return LinkProtectionTypeEnum.YANGAUTOPREFIX1_FOR_1;
+        case ONE_PLUS_ONE:
+            return LinkProtectionTypeEnum.YANGAUTOPREFIX1_PLUS_1;
+        default:
+            return null;
         }
     }
-
     /**
      * TE Link Config object conversion from TE Topology subsystem to YANG.
      *
      * @param teLink TE link object
      * @return TE Link Config YANG object
      */
-    private static Config teLink2YangConfig(TeLink teLink) {
+    private static Config teLink2YangConfig(TeLink teLink, TeTopologyService teTopologyService) {
         checkNotNull(teLink, E_NULL_TELINK_DATA);
 
         TeLinkAttributesBuilder attrBuilder = DefaultTeLinkAttributes.builder();
@@ -234,7 +201,7 @@
         if (teLink.tunnelProtectionType() != null) {
             attrBuilder = attrBuilder
                     .linkProtectionType(teSubsystem2YangLinkProtectionType(teLink
-                                                                                   .tunnelProtectionType()));
+                            .tunnelProtectionType()));
         }
 
         attrBuilder = attrBuilder.teDefaultMetric(teLink.cost());
@@ -257,27 +224,25 @@
             if (teLink.externalLink().externalLinkKey() != null) {
                 edBuilder = edBuilder
                         .remoteTeLinkTpId(TeTpId.fromString(
-                                String.valueOf(teLink
-                                                       .externalLink()
-                                                       .externalLinkKey()
-                                                       .teLinkTpId())))
+                                                                String.valueOf(teLink
+                                                                        .externalLink()
+                                                                        .externalLinkKey()
+                                                                        .teLinkTpId())))
                         .remoteTeNodeId(TeNodeId.fromString(
-                                String.valueOf(teLink
-                                                       .externalLink()
-                                                       .externalLinkKey()
-                                                       .teNodeId())));
+                                                                String.valueOf(teLink
+                                                                        .externalLink()
+                                                                        .externalLinkKey()
+                                                                        .teNodeId())));
             }
             attrBuilder = attrBuilder.externalDomain(edBuilder.build());
         }
 
         if (teLink.availBandwidth() != null) {
-            short i = 0;
-            for (float f : teLink.availBandwidth()) {
+            for (short i = 0; i < teLink.availBandwidth().length; i++) {
                 UnreservedBandwidthBuilder urBuilder =
                         DefaultUnreservedBandwidth.builder()
-                                .bandwidth(BigDecimal.valueOf(f))
-                                .priority(i);
-                i++;
+                                                  .bandwidth(BigDecimal.valueOf(teLink.availBandwidth()[i]))
+                                                  .priority(i);
                 attrBuilder = attrBuilder.addToUnreservedBandwidth(urBuilder.build());
             }
         }
@@ -291,23 +256,27 @@
 //            attrBuilder = attrBuilder.maxResvLinkBandwidth(teLink.maxResvLinkBandwidth());
 //        }
 
-//        UnderlayBuilder builder = DefaultUnderlay.builder();
-//        if (teLink.primaryPath() != null) {
-//
-//            // TODO: what is underlayProtectionType in tePath?
-//            // builder = builder.underlayProtectionType(tePath.protectionType());
-//
-//            builder = te2YangConfigUnderlayPrimaryPath(builder, teLink);
-//        }
-//
-//        if (teLink.backupPaths() != null) {
-//            builder = te2YangConfigUnderlayBackupPaths(builder, teLink);
-//        }
-//
-//        attrBuilder = attrBuilder.underlay(builder.build());
+        if (teLink.primaryPath() != null || teLink.backupPaths() != null) {
+            UnderlayBuilder builder = DefaultUnderlay.builder();
+            if (teLink.primaryPath() != null) {
+                // TODO: what is underlayProtectionType in tePath?
+                // builder =
+                // builder.underlayProtectionType(tePath.protectionType());
+                builder = te2YangConfigUnderlayPrimaryPath(builder, teLink,
+                                                           teTopologyService);
+            }
+
+            if (teLink.backupPaths() != null) {
+                builder = te2YangConfigUnderlayBackupPaths(builder, teLink,
+                                                           teTopologyService);
+            }
+
+            attrBuilder = attrBuilder.underlay(builder.build());
+        }
+
 
         ConfigBuilder yangConfigBuilder = DefaultConfig.builder()
-                .teLinkAttributes(attrBuilder.build());
+                                                       .teLinkAttributes(attrBuilder.build());
         return yangConfigBuilder.build();
     }
 
@@ -319,11 +288,11 @@
      */
     private static State teLink2YangState(TeLink teLink) {
         TeLinkAttributes
-                .TeLinkAttributesBuilder attrBuilder =
-                DefaultTeLinkAttributes
-                        .builder()
-                        .teDefaultMetric(teLink.cost())
-                        .isAbstract(teLink.flags().get(TeLink.BIT_ABSTRACT));
+            .TeLinkAttributesBuilder attrBuilder =
+                        DefaultTeLinkAttributes
+            .builder()
+            .teDefaultMetric(teLink.cost())
+            .isAbstract(teLink.flags().get(TeLink.BIT_ABSTRACT));
         if (teLink.teLinkKey() != null) {
             // what is link index? for now I used teLinkTpId
             attrBuilder = attrBuilder.linkIndex(BigInteger.valueOf(teLink.teLinkKey().teLinkTpId()));
@@ -335,7 +304,7 @@
         if (teLink.tunnelProtectionType() != null) {
             attrBuilder = attrBuilder
                     .linkProtectionType(teSubsystem2YangLinkProtectionType(teLink
-                                                                                   .tunnelProtectionType()));
+                            .tunnelProtectionType()));
         }
         if (teLink.maxBandwidth() != null) {
             // maxBandwidth is an array of float[], but in yang is just a big decimal
@@ -361,13 +330,13 @@
             if (teLink.externalLink().externalLinkKey() != null) {
                 edBuilder = edBuilder
                         .remoteTeLinkTpId(TeTpId.fromString(String.valueOf(teLink
-                                                                                   .externalLink()
-                                                                                   .externalLinkKey()
-                                                                                   .teLinkTpId())))
+                                                                           .externalLink()
+                                                                           .externalLinkKey()
+                                                                           .teLinkTpId())))
                         .remoteTeNodeId(TeNodeId.fromString(String.valueOf(teLink
-                                                                                   .externalLink()
-                                                                                   .externalLinkKey()
-                                                                                   .teNodeId())));
+                                                                           .externalLink()
+                                                                           .externalLinkKey()
+                                                                           .teNodeId())));
             }
             attrBuilder = attrBuilder.externalDomain(edBuilder.build());
 
@@ -377,19 +346,17 @@
             short i = 0;
             for (float f : teLink.availBandwidth()) {
                 UnreservedBandwidth.UnreservedBandwidthBuilder urBuilder = DefaultUnreservedBandwidth
-                        .builder()
-                        .bandwidth(BigDecimal.valueOf(f))
-                        .priority(i);
+                        .builder().bandwidth(BigDecimal.valueOf(f)).priority(i);
                 i++;
                 attrBuilder = attrBuilder.addToUnreservedBandwidth(urBuilder.build());
             }
         }
 
         StateBuilder yangStateBuilder = DefaultState.builder()
-                .teLinkAttributes(attrBuilder.build());
+                                                    .teLinkAttributes(attrBuilder.build());
         if (teLink.opStatus() != null) {
             yangStateBuilder = yangStateBuilder.operStatus(EnumConverter
-                                                                   .teSubsystem2YangOperStatus(teLink.opStatus()));
+                                                           .teSubsystem2YangOperStatus(teLink.opStatus()));
         }
 
         if (teLink.sourceTeLinkId() != null) {
@@ -397,8 +364,8 @@
 
             Topology.TopologyBuilder topologyBuilder = DefaultTopology.builder();
             topologyBuilder = topologyBuilder.clientIdRef(teLink.sourceTeLinkId().clientId())
-                    .providerIdRef(teLink.sourceTeLinkId().providerId())
-                    .teTopologyIdRef(teLink.sourceTeLinkId().topologyId());
+                                             .providerIdRef(teLink.sourceTeLinkId().providerId())
+                                             .teTopologyIdRef(teLink.sourceTeLinkId().topologyId());
             issBuilder = issBuilder.topology(topologyBuilder.build());
             yangStateBuilder.informationSourceState(issBuilder.build());
         }
@@ -407,7 +374,7 @@
         // object model, set the value properly
         // stateDerivedUnderlay = org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology
         // .rev20160708.ietftetopology.telinkstatederived.Underlay
-        // yangStateBuilder = yangStateBuilder.underlay(stateDerivedUnderlay);
+        //yangStateBuilder = yangStateBuilder.underlay(stateDerivedUnderlay);
 
         return yangStateBuilder.build();
     }
@@ -416,10 +383,12 @@
      * Link object conversion from TE Topology subsystem to YANG.
      *
      * @param teSubsNetworkLink TE subsystem link object
+     * @param teTopologyService teTopology core service
      * @return YANG link object
      */
     public static Link teSubsystem2YangLink(
-            org.onosproject.tetopology.management.api.link.NetworkLink teSubsNetworkLink) {
+            org.onosproject.tetopology.management.api.link.NetworkLink teSubsNetworkLink,
+            TeTopologyService teTopologyService) {
         checkNotNull(teSubsNetworkLink, E_NULL_TELINK);
 
         LinkId linkId = LinkId.fromString(teSubsNetworkLink.linkId().toString());
@@ -429,43 +398,43 @@
             SupportingLinkBuilder spLinkBuilder = DefaultSupportingLink.builder();
             for (NetworkLinkKey linkKey : teSubsNetworkLink.supportingLinkIds()) {
                 slinks.add(spLinkBuilder.networkRef(NetworkId.fromString(
-                        linkKey.networkId().toString()))
-                                   .linkRef(LinkId.fromString(
-                                           linkKey.linkId().toString()))
-                                   .build());
+                                                    linkKey.networkId().toString()))
+                                        .linkRef(LinkId.fromString(
+                                                    linkKey.linkId().toString()))
+                                        .build());
             }
             builder = builder.supportingLink(slinks);
         }
         if (teSubsNetworkLink.source() != null) {
             SourceBuilder sourceBuilder = DefaultSource
-                    .builder()
-                    .sourceNode(NodeId.fromString(
-                            teSubsNetworkLink.source().nodeId().toString()))
-                    .sourceTp(TpId.fromString(
-                            teSubsNetworkLink.source().tpId().toString()));
+                                              .builder()
+                                              .sourceNode(NodeId.fromString(
+                                                   teSubsNetworkLink.source().nodeId().toString()))
+                                              .sourceTp(TpId.fromString(
+                                                   teSubsNetworkLink.source().tpId().toString()));
             builder = builder.source(sourceBuilder.build());
         }
         if (teSubsNetworkLink.destination() != null) {
             DestinationBuilder destBuilder = DefaultDestination
-                    .builder()
-                    .destNode(NodeId.fromString(
-                            teSubsNetworkLink.destination().nodeId().toString()))
-                    .destTp(TpId.fromString(
-                            teSubsNetworkLink.destination().tpId().toString()));
+                                                 .builder()
+                                                 .destNode(NodeId.fromString(
+                                                      teSubsNetworkLink.destination().nodeId().toString()))
+                                                 .destTp(TpId.fromString(
+                                                      teSubsNetworkLink.destination().tpId().toString()));
             builder = builder.destination(destBuilder.build());
         }
 
         if (teSubsNetworkLink.teLink() != null) {
             TeLink teData = teSubsNetworkLink.teLink();
             TeBuilder yangTeBuilder = DefaultTe.builder()
-                    .config(teLink2YangConfig(teData))
-                    .state(teLink2YangState(teData));
+                                               .config(teLink2YangConfig(teData, teTopologyService))
+                                               .state(teLink2YangState(teData));
             // ignoring supportingTeLinkId when converting from core to yang?
             // if (teData.supportingTeLinkId() != null) {
             // }
             AugmentedNtLinkBuilder linkAugmentBuilder =
                     DefaultAugmentedNtLink.builder()
-                            .te(yangTeBuilder.build());
+                                          .te(yangTeBuilder.build());
             builder.addYangAugmentedInfo(linkAugmentBuilder.build(), AugmentedNtLink.class);
         }
 
@@ -479,24 +448,30 @@
         org.onosproject.tetopology.management.api.link.UnderlayPrimaryPath tePath = teLink.primaryPath();
 
         UnderlayPrimaryPathBuilder pathBuilder =
-                DefaultUnderlayPrimaryPath.builder();
+                                       DefaultUnderlayPrimaryPath.builder();
         if (tePath.pathElements() != null) {
             for (PathElement pathElementTe : tePath.pathElements()) {
                 org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
-                        .ietftetopology.telinkunderlayattributes.underlayprimarypath.PathElement
-                        .PathElementBuilder pathElementYangBuilder = DefaultPathElement.builder();
+                .ietftetopology.telinkunderlayattributes.underlayprimarypath.PathElement
+                   .PathElementBuilder pathElementYangBuilder = DefaultPathElement.builder();
 
                 pathElementYangBuilder = pathElementYangBuilder.pathElementId(pathElementTe.pathElementId());
-                //TODO: add some Type cross converter
-//              pathElementYangBuilder = pathElementYangBuilder.type(Type pathElementTe.type())
+                //TODO: check more types here
+                if (pathElementTe.type() instanceof TeLinkId) {
+                    UnnumberedLinkBuilder unmBuilder = DefaultUnnumberedLink.builder()
+                            .routerId(IpAddress.fromString(
+                                             Ip4Address.valueOf((int) pathElementTe.teNodeId()).toString()))
+                            .interfaceId(((TeLinkId) pathElementTe.type()).value());
+                    pathElementYangBuilder = pathElementYangBuilder.type(unmBuilder.build());
+                }
 
                 pathBuilder = pathBuilder.addToPathElement(pathElementYangBuilder.build());
             }
         }
 
         pathBuilder = pathBuilder.clientIdRef(teLink.underlayTeTopologyId().clientId())
-                .providerIdRef(teLink.underlayTeTopologyId().providerId())
-                .teTopologyIdRef(teLink.underlayTeTopologyId().topologyId());
+                                 .providerIdRef(teLink.underlayTeTopologyId().providerId())
+                                 .teTopologyIdRef(teLink.underlayTeTopologyId().topologyId());
 
         pathBuilder = pathBuilder.networkIdRef(teTopologyService.networkId(teLink.underlayTeTopologyId()));
 
@@ -513,22 +488,28 @@
                     .builder();
             pathBuilder = pathBuilder.index(tePath.index());
             pathBuilder = pathBuilder.clientIdRef(teLink.underlayTeTopologyId().clientId())
-                    .providerIdRef(teLink.underlayTeTopologyId().providerId())
-                    .teTopologyIdRef(teLink.underlayTeTopologyId().topologyId());
+                                     .providerIdRef(teLink.underlayTeTopologyId().providerId())
+                                     .teTopologyIdRef(teLink.underlayTeTopologyId().topologyId());
 
             pathBuilder = pathBuilder.networkIdRef(teTopologyService.networkId(teLink.underlayTeTopologyId()));
 
             for (PathElement backupPathElementTe : tePath.pathElements()) {
                 org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
-                        .ietftetopology.telinkunderlayattributes.underlaybackuppath.PathElement
-                        .PathElementBuilder elementBuilder =
-                        org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
-                                .ietftetopology.telinkunderlayattributes.underlaybackuppath.DefaultPathElement
-                                .builder();
+                .ietftetopology.telinkunderlayattributes.underlaybackuppath.PathElement
+                .PathElementBuilder elementBuilder =
+                org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
+                .ietftetopology.telinkunderlayattributes.underlaybackuppath.DefaultPathElement
+                        .builder();
 
                 elementBuilder = elementBuilder.pathElementId(backupPathElementTe.pathElementId());
-                // TODO: add some Type cross conversion
-//                elementBuilder.type(type);
+                //TODO: check more types here
+                if (backupPathElementTe.type() instanceof TeLinkId) {
+                    UnnumberedLinkBuilder unmBuilder = DefaultUnnumberedLink.builder()
+                            .routerId(IpAddress.fromString(
+                                             Ip4Address.valueOf((int) backupPathElementTe.teNodeId()).toString()))
+                            .interfaceId(((TeLinkId) backupPathElementTe.type()).value());
+                    elementBuilder = elementBuilder.type(unmBuilder.build());
+                }
 
                 pathBuilder = pathBuilder
                         .addToPathElement(elementBuilder.build());
@@ -570,9 +551,9 @@
         TeLinkTpKey peerTeLinkKey = null;
         if (yangLink.destination() != null) {
             peerTeLinkKey = new TeLinkTpKey(teNodeIdDestLong,
-                                            findTeTpId(yangNetwork,
-                                                       yangLink.destination().destNode(),
-                                                       yangLink.destination().destTp()));
+                                                        findTeTpId(yangNetwork,
+                                                                   yangLink.destination().destNode(),
+                                                                   yangLink.destination().destTp()));
         }
 
         TeLinkTpGlobalKey supportTeLinkId = findSupportTeLinkId(yangNetworks, yangLink);
@@ -634,20 +615,21 @@
         List<Long> interLayerLocks = null; // FIXME: how to find interLayerLocks?
 
         List<UnreservedBandwidth> listOfUnreservedBandwidth = yangLinkAtrr.unreservedBandwidth();
-        float[] availBandwidth = new float[listOfUnreservedBandwidth.size()];
-        int i = 0;
+        float[] availBandwidth = new float[MAX_PRIORITY + 1];
         for (UnreservedBandwidth urbw : listOfUnreservedBandwidth) {
-            availBandwidth[i] = urbw.bandwidth().floatValue();
-            i++;
+            availBandwidth[urbw.priority()] = urbw.bandwidth().floatValue();
         }
 
-        float[] maxBandwidth = new float[1];
+        float[] maxBandwidth = new float[MAX_PRIORITY + 1];
         if (yangLinkAtrr.maxLinkBandwidth() != null) {
-            maxBandwidth[0] = yangLinkAtrr.maxLinkBandwidth().floatValue();
+            // Core TE has an array, but YANG is an integer
+            for (short p = 0; p <= MAX_PRIORITY; p++) {
+                maxBandwidth[p] = yangLinkAtrr.maxLinkBandwidth().floatValue();
+            }
         }
 
-        float[] maxAvailLspBandwidth = null; // FIXME: how to find this?
-        float[] minAvailLspBandwidth = null; // FIXME: how to find this?
+        float[] maxAvailLspBandwidth = availBandwidth; // FIXME: how to find this?
+        float[] minAvailLspBandwidth = availBandwidth; // FIXME: how to find this?
         LinkBandwidth bandwidth = new LinkBandwidth(
                 maxBandwidth,
                 availBandwidth,
@@ -665,9 +647,8 @@
         TePathAttributes teAttributes =
                 new TePathAttributes(yangLinkAtrr.teDefaultMetric(),
                                      yangLinkAtrr.performanceMetric() == null ? null :
-                                             (yangLinkAtrr.performanceMetric().measurement() == null ? null :
-                                                     yangLinkAtrr.performanceMetric().measurement()
-                                                             .unidirectionalDelay()),
+                                           (yangLinkAtrr.performanceMetric().measurement() == null ? null :
+                                               yangLinkAtrr.performanceMetric().measurement().unidirectionalDelay()),
                                      srlgs);
         teData = new CommonLinkData(adminStatus,
                                     opStatus,
@@ -688,7 +669,7 @@
     }
 
     private static TeLinkTpGlobalKey findSupportTeLinkId(Networks yangNetworks,
-                                                         Link yangLink) {
+                                            Link yangLink) {
         Network teNetworkFound = null;
         LinkId teLinkIdFound = null;
         TeLinkTpGlobalKey supportTeLinkId = null;
@@ -741,7 +722,7 @@
             supportTeLinkId = new TeLinkTpGlobalKey(teTopologyId.providerId(),
                                                     teTopologyId.clientId(),
                                                     Long.valueOf(teTopologyId
-                                                                         .topologyId()),
+                                                            .topologyId()),
                                                     tenIdLong, teSupportLinkTpId);
         }
 
@@ -783,7 +764,7 @@
                             if (yangTpnode.tpId().equals(yangTpId)) {
                                 if (yangTpnode.yangAugmentedInfoMap() != null
                                         && !yangTpnode.yangAugmentedInfoMap()
-                                        .isEmpty()) {
+                                                .isEmpty()) {
                                     AugmentedNtTerminationPoint yangTpAugment =
                                             (AugmentedNtTerminationPoint) yangTpnode
                                                     .yangAugmentedInfo(AugmentedNtTerminationPoint.class);
@@ -799,18 +780,17 @@
         }
         return teTpId;
     }
-
     /**
      * Link object conversion from YANG to TE Topology subsystem.
      *
-     * @param yangLink     YANG link
-     * @param yangNetwork  YANG network
+     * @param yangLink  YANG link
+     * @param yangNetwork YANG network
      * @param yangNetworks YANG networks
      * @return TE subsystem link
      */
     public static org.onosproject.tetopology.management.api.link.NetworkLink
-    yang2TeSubsystemLink(Link yangLink, Network yangNetwork,
-                         Networks yangNetworks) {
+            yang2TeSubsystemLink(Link yangLink, Network yangNetwork,
+                                 Networks yangNetworks) {
         NetworkId networkId = yangNetwork.networkId();
         checkNotNull(yangLink, E_NULL_YANG_TELINK);
 
@@ -831,17 +811,17 @@
 
         if (yangLink.source() != null) {
             TerminationPointKey source = new TerminationPointKey(
-                    KeyId.keyId(networkId.uri().toString()),
-                    KeyId.keyId(yangLink.source().sourceNode().uri().toString()),
-                    KeyId.keyId(yangLink.source().sourceTp().uri().toString()));
+                                                 KeyId.keyId(networkId.uri().toString()),
+                                                 KeyId.keyId(yangLink.source().sourceNode().uri().toString()),
+                                                 KeyId.keyId(yangLink.source().sourceTp().uri().toString()));
             sourceNodeTpKey = new NodeTpKey(source.nodeId(), source.tpId());
         }
 
         if (yangLink.destination() != null) {
             TerminationPointKey destination = new TerminationPointKey(
-                    KeyId.keyId(networkId.uri().toString()),
-                    KeyId.keyId(yangLink.destination().destNode().uri().toString()),
-                    KeyId.keyId(yangLink.destination().destTp().uri().toString()));
+                                                      KeyId.keyId(networkId.uri().toString()),
+                                                      KeyId.keyId(yangLink.destination().destNode().uri().toString()),
+                                                      KeyId.keyId(yangLink.destination().destTp().uri().toString()));
             destinationNodeTpKey = new NodeTpKey(destination.nodeId(), destination.tpId());
         }
 
@@ -873,19 +853,25 @@
     }
 
     private static org.onosproject.tetopology.management.api.link.UnderlayPrimaryPath
-    yang2TeSubsystemUnderlayPrimaryPath(UnderlayPrimaryPath yangpath,
-                                        long teNodeId) {
+                    yang2TeSubsystemUnderlayPrimaryPath(UnderlayPrimaryPath yangpath,
+                                                        long teNodeId) {
         org.onosproject.tetopology.management.api.link.UnderlayPrimaryPath teUnderlayPrimaryPath = null;
 
         List<PathElement> pathElementList = Lists.newArrayList();
         for (org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
                 .telinkunderlayattributes.underlayprimarypath.
-                PathElement pathElementConfigYang : yangpath.pathElement()) {
+                PathElement pathElementYang : yangpath.pathElement()) {
 
-            // TODO: find the proper type (ElementType) from pathElementConfigYang.type()
-            PathElement tePathElement = new PathElement(pathElementConfigYang.pathElementId(),
-                                                        teNodeId,
-                                                        null,
+            long nodeId = 0;
+            ElementType type = null;
+            // TODO: check more types
+            if (pathElementYang.type() instanceof UnnumberedLink) {
+                nodeId = Long.valueOf(((UnnumberedLink) pathElementYang.type()).routerId().toString());
+                type = new TeLinkId(((UnnumberedLink) pathElementYang.type()).interfaceId());
+            }
+            PathElement tePathElement = new PathElement(pathElementYang.pathElementId(),
+                                                        nodeId,
+                                                        type,
                                                         false); // FIXME: how to find the proper value for loose?
             pathElementList.add(tePathElement);
         }
@@ -897,11 +883,11 @@
     }
 
     private static List<UnderlayBackupPath>
-    yang2TeSubsystemUnderlayBackupPaths(
-            List<org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.
+       yang2TeSubsystemUnderlayBackupPaths(
+                List<org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.
                     rev20160708.ietftetopology.telinkunderlayattributes.
                     UnderlayBackupPath> yangpaths,
-            long teNodeId) {
+                long teNodeId) {
 
         List<UnderlayBackupPath> underlayBackupPathsList = Lists.newArrayList();
         for (org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
@@ -909,15 +895,20 @@
                 UnderlayBackupPath yangConfig : yangpaths) {
             UnderlayBackupPath ubp = null;
             List<PathElement> backupPathElementList = Lists.newArrayList();
+            long nodeId = 0;
+            ElementType type = null;
             for (org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
                     .telinkunderlayattributes.underlaybackuppath.
-                    PathElement pathElementBackupYang : yangConfig.pathElement()) {
-
-                PathElement tePathElementBackup = new PathElement(pathElementBackupYang.pathElementId(),
-                                                                  teNodeId,
-                                                                  null, // FIXME: find the proper ElementType
-                                                                  // from pathElementBackupYang.type()
-                                                                  false); // FIXME: find the proper value for loose
+                    PathElement backupYang : yangConfig.pathElement()) {
+                // TODO: check more types
+                if (backupYang.type() instanceof UnnumberedLink) {
+                    nodeId = Long.valueOf(((UnnumberedLink) backupYang.type()).routerId().toString());
+                    type = new TeLinkId(((UnnumberedLink) backupYang.type()).interfaceId());
+                }
+                PathElement tePathElementBackup = new PathElement(backupYang.pathElementId(),
+                                                                  nodeId,
+                                                                  type,
+                                                                  false);
                 backupPathElementList.add(tePathElementBackup);
             }
             ubp = new UnderlayBackupPath(yangConfig.index(),
@@ -930,13 +921,13 @@
     }
 
     /**
-     * TE Link underlay path Config object conversion from YANG to TE Topology subsystem.
-     *
-     * @param yangLinkAtrr YANG link Config YANG object
-     * @return teSubsystem TE underlay path object
-     */
+    * TE Link underlay path Config object conversion from YANG to TE Topology subsystem.
+    *
+    * @param yangLinkAtrr YANG link Config YANG object
+    * @return teSubsystem TE underlay path object
+    */
     private static org.onosproject.tetopology.management.api.link.UnderlayPath
-    yang2TeSubsystemUnderlayPath(TeLinkAttributes yangLinkAtrr, long srcTeNodeId, long dstTeNodeId) {
+               yang2TeSubsystemUnderlayPath(TeLinkAttributes yangLinkAtrr, long srcTeNodeId, long dstTeNodeId) {
 
         checkNotNull(yangLinkAtrr, E_NULL_YANG_TELINK_CONFIG);
 
@@ -957,12 +948,12 @@
         org.onosproject.tetopology.management.api.link.UnderlayPath teUnderlay = null;
         if (yangLinkAtrr.underlay() != null) {
             teUnderlay = new org.onosproject.tetopology.management.api.link.
-                    UnderlayPath(underlayPrimaryPath,
-                                 underlayBackupPathsList,
-                                 TunnelProtectionType.of(yangLinkAtrr.underlay().underlayProtectionType()),
-                                 (long) yangLinkAtrr.underlay().underlayTrailSrc().tpRef(), // Is this correct?
-                                 (long) yangLinkAtrr.underlay().underlayTrailDes().tpRef(), // Is this correct?
-                                 teTunnelId);
+                        UnderlayPath(underlayPrimaryPath,
+                                     underlayBackupPathsList,
+                                     TunnelProtectionType.of(yangLinkAtrr.underlay().underlayProtectionType()),
+                                     (long) yangLinkAtrr.underlay().underlayTrailSrc().tpRef(), // Is this correct?
+                                     (long) yangLinkAtrr.underlay().underlayTrailDes().tpRef(), // Is this correct?
+                                     teTunnelId);
         }
 
         return teUnderlay;
@@ -1023,16 +1014,14 @@
     }
 
     /**
-     * Converts a YANG network link notification event into  a TE network
-     * link.
+     * Converts a YANG network link notification event into a TE network link.
      *
-     * @param yangLinkEvent     YANG network link notification
+     * @param yangLinkEvent YANG network link notification
      * @param teTopologyService TE Topology service used to help the conversion
      * @return TE network link
      */
     public static NetworkLink yangLinkEvent2NetworkLink(TeLinkEvent yangLinkEvent,
                                                         TeTopologyService teTopologyService) {
-
         KeyId linkId = yangLinkEvent2NetworkLinkKey(yangLinkEvent).linkId();
 
         org.onosproject.tetopology.management.api.
@@ -1061,28 +1050,27 @@
 
         TeOperStatus opState = yangLinkEvent.operStatus();
         org.onosproject.tetopology.management.api.
-                TeStatus opStatus = EnumConverter.yang2TeSubsystemOpStatus(opState);
+        TeStatus opStatus = EnumConverter.yang2TeSubsystemOpStatus(opState);
 
         TeLink updatedTeLink = yangLinkEvent2TeLinkAttributes(yangLinkEvent, teLink, opStatus);
 
 
-        NetworkLink updatedNetworkLink = new DefaultNetworkLink(linkId,
-                                                                sourceTp,
-                                                                destTp,
-                                                                supportingLinkIds,
+        NetworkLink updatedNetworkLink = new DefaultNetworkLink(linkId, sourceTp, destTp, supportingLinkIds,
                                                                 updatedTeLink);
 
         return updatedNetworkLink;
     }
 
-    private static TeLink yangLinkEvent2TeLinkAttributes(TeLinkEvent yangLinkEvent,
-                                                         TeLink oldTeLink,
-                                                         TeStatus opStatus) {
+    private static TeLink yangLinkEvent2TeLinkAttributes(TeLinkEvent yangLinkEvent, TeLink oldTeLink, TeStatus
+            opStatus) {
 
         TeLinkAttributes yangTeLinkAttrs = yangLinkEvent.teLinkAttributes();
 
         TeLinkTpKey teLinkKey = oldTeLink.teLinkKey();
 
+
+        //long teNodeIdDest = oldTeLink.peerTeLinkKey().teNodeId();
+        //long teNodeIdSrc = oldTeLink.teLinkKey().teNodeId();
         long teNodeIdDest = 0;
         long teNodeIdSrc = 0;
 
diff --git a/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/NetworkConverter.java b/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/NetworkConverter.java
index e1e2e01..a5a057f 100644
--- a/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/NetworkConverter.java
+++ b/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/NetworkConverter.java
@@ -15,8 +15,12 @@
  */
 package org.onosproject.teyang.utils.topology;
 
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
+
+import java.util.List;
+import java.util.Map;
+
 import org.onosproject.net.DeviceId;
 import org.onosproject.tetopology.management.api.KeyId;
 import org.onosproject.tetopology.management.api.TeTopologyEvent;
@@ -86,11 +90,8 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.List;
-import java.util.Map;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Preconditions.checkState;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
 
 
 /**
@@ -221,12 +222,13 @@
     /**
      * Networks object conversion from YANG to TE Topology subsystem.
      *
-     * @param yangNetworks      Networks YANG object
+     * @param yangNetworks Networks YANG object
      * @param yangNetworkStates NetworkStates YANG object
+     * @param deviceId The identifier of RESTCONF server device
      * @return teSubsystem TE Topology subsystem networks object
      */
     public static org.onosproject.tetopology.management.api.Networks yang2TeSubsystemNetworks(
-            Networks yangNetworks, NetworksState yangNetworkStates) {
+            Networks yangNetworks, NetworksState yangNetworkStates, DeviceId deviceId) {
         checkNotNull(yangNetworks, E_NULL_YANG_NETWORKS);
         checkNotNull(yangNetworks.network(), E_NULL_YANG_NETWORK_LIST);
         checkNotNull(yangNetworkStates, E_NULL_YANG_NETWORKSSTATE);
@@ -240,9 +242,9 @@
             if (stateNetwork == null) {
                 log.info("networkId {} can't be found in yangNetworkStates",
                           network.networkId());
-                teNetwork = yang2TeSubsystemNetwork(network, yangNetworks);
+                teNetwork = yang2TeSubsystemNetwork(network, yangNetworks, deviceId);
             } else {
-                teNetwork = yang2TeSubsystemNetwork(network, stateNetwork, yangNetworks);
+                teNetwork = yang2TeSubsystemNetwork(network, stateNetwork, yangNetworks, deviceId);
             }
             networks.add(teNetwork);
         }
@@ -279,11 +281,12 @@
     }
 
     private static NetworkBuilder te2YangLinks(NetworkBuilder builder,
-                                               Map<KeyId, NetworkLink> teLinks) {
+                                               Map<KeyId, NetworkLink> teLinks,
+                                               TeTopologyService teTopologyService) {
         List<Link> linkList = Lists.newArrayList();
 
         for (org.onosproject.tetopology.management.api.link.NetworkLink link : teLinks.values()) {
-            linkList.add(LinkConverter.teSubsystem2YangLink(link));
+            linkList.add(LinkConverter.teSubsystem2YangLink(link, teTopologyService));
         }
         AugmentedNdNetworkBuilder ndAugment = DefaultAugmentedNdNetwork.builder();
         ndAugment.link(linkList);
@@ -367,7 +370,7 @@
 
         // Add links - link is the augmentation
         if (teSubsystem.links() != null) {
-            builder = te2YangLinks(builder, teSubsystem.links());
+            builder = te2YangLinks(builder, teSubsystem.links(), teTopologyService);
         }
 
         // TE Topology IDs
@@ -421,7 +424,7 @@
                                                 org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.
                                                 yang.ietf.network.rev20151208.ietfnetwork.networksstate.
                                                 Network yangNetworkState,
-                                                Networks yangNetworks) {
+                                                Networks yangNetworks, DeviceId deviceId) {
         checkNotNull(yangNetwork, E_NULL_YANG_NETWORK);
         checkNotNull(yangNetwork.networkId(), E_NULL_YANG_NETWORKID);
         String networkId = yangNetwork.networkId().uri().string();
@@ -432,7 +435,6 @@
         Map<KeyId, NetworkLink> teLinks = null;
         org.onosproject.tetopology.management.api.TeTopologyId teTopologyId = null;
         boolean serverProvided = false;
-        DeviceId ownerId = null;
 
         // Supporting networks
         if (yangNetwork.supportingNetwork() != null) {
@@ -483,7 +485,7 @@
         org.onosproject.tetopology.management.api.DefaultNetwork network =
                 new org.onosproject.tetopology.management.api.DefaultNetwork(networkKeyId, supportingNetworkIds,
                                                                              teNodes, teLinks, teTopologyId,
-                                                                             serverProvided, ownerId);
+                                                                             serverProvided, deviceId);
         return network;
     }
 
@@ -492,11 +494,13 @@
      *
      * @param yangNetwork Network YANG object
      * @param yangNetworks Networks YANG object
+     * @param deviceId The identifier of RESTCONF server device
      * @return network TE Topology subsystem networks object
      */
     public static org.onosproject.tetopology.management.api.Network yang2TeSubsystemNetwork(Network yangNetwork,
-                                                                                            Networks yangNetworks) {
-        return yang2TeDefaultNetwork(yangNetwork, null, yangNetworks);
+                                                                                            Networks yangNetworks,
+                                                                                            DeviceId deviceId) {
+        return yang2TeDefaultNetwork(yangNetwork, null, yangNetworks, deviceId);
     }
 
     /**
@@ -505,16 +509,17 @@
      * @param yangNetwork Network YANG object
      * @param yangNetworkState NetworkState YANG object
      * @param yangNetworks Networks YANG object
+     * @param deviceId The identifier of RESTCONF server device
      * @return teSubsystem TE Topology subsystem networks object
      */
     public static org.onosproject.tetopology.management.api.Network yang2TeSubsystemNetwork(Network yangNetwork,
             org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork
-                    .networksstate.Network yangNetworkState, Networks yangNetworks) {
+                    .networksstate.Network yangNetworkState, Networks yangNetworks, DeviceId deviceId) {
         checkNotNull(yangNetworkState, E_NULL_YANG_NETWORKSSTATE_NETWORK);
         checkNotNull(yangNetworkState.networkRef(), E_NULL_YANG_NETWORKSSTATE_NETWORKREF);
 
         org.onosproject.tetopology.management.api.DefaultNetwork teNetwork =
-                yang2TeDefaultNetwork(yangNetwork, yangNetworkState, yangNetworks);
+                yang2TeDefaultNetwork(yangNetwork, yangNetworkState, yangNetworks, deviceId);
 
         String networkref = yangNetworkState.networkRef().toString();
         checkState(teNetwork.networkId().toString().equals(networkref),
@@ -567,7 +572,7 @@
                 returnType = IetfTeTopologyEvent.Type.TE_NODE_EVENT;
                 break;
             default:
-                log.error("teTopoEventType2YangIetfTopoEventType: unknown type: {}", type);
+                log.warn("teTopoEventType2YangIetfTopoEventType: unknown type: {}", type);
         }
 
         return returnType;
@@ -590,9 +595,7 @@
                 returnType = TeTopologyEventTypeEnum.UPDATE;
                 break;
             default:
-                // log.warn("teTopoEventType2YangIetfTopoEventType: unsupported
-                // type: {}",
-                // type);
+                log.warn("teTopoEventType2YangteTopoEventType: unsupported type: {}", type);
             break;
         }
 
diff --git a/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/NodeConverter.java b/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/NodeConverter.java
index cf8d6c1..1557d7d 100644
--- a/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/NodeConverter.java
+++ b/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/NodeConverter.java
@@ -15,8 +15,12 @@
  */
 package org.onosproject.teyang.utils.topology;
 
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.util.BitSet;
+import java.util.List;
+import java.util.Map;
+
 import org.apache.commons.collections.MapUtils;
 import org.onlab.packet.Ip4Address;
 import org.onosproject.tetopology.management.api.EncodingType;
@@ -47,92 +51,60 @@
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.NetworkId;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.NodeId;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.networks.Network;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.networks.network
-        .DefaultNode;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.networks.network
-        .Node;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.networks.network
-        .node.DefaultSupportingNode;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.networks.network
-        .node.SupportingNode;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology
-        .TpId;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology
-        .networks.network.node.AugmentedNdNode;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology
-        .networks.network.node.DefaultAugmentedNdNode;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .DefaultTeNodeEvent;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208
+               .ietfnetwork.networks.network.DefaultNode;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208
+               .ietfnetwork.networks.network.Node;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208
+               .ietfnetwork.networks.network.node.DefaultSupportingNode;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208
+               .ietfnetwork.networks.network.node.SupportingNode;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology.TpId;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
+               .ietfnetworktopology.networks.network.node.AugmentedNdNode;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
+               .ietfnetworktopology.networks.network.node.DefaultAugmentedNdNode;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.DefaultTeNodeEvent;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.TeNodeEvent;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .informationsourceattributes.DefaultInformationSourceState;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .informationsourceattributes.InformationSourceState;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .informationsourceattributes.informationsourcestate.DefaultTopology;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .informationsourceattributes.informationsourcestate.Topology;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.networks
-        .network.node.AugmentedNwNode;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.networks
-        .network.node.DefaultAugmentedNwNode;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.networks
-        .network.node.terminationpoint.AugmentedNtTerminationPoint;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .tenodeaugment.DefaultTe;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .tenodeaugment.DefaultTe.TeBuilder;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .tenodeaugment.Te;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .tenodeaugment.te.Config;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .tenodeaugment.te.DefaultConfig;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .tenodeaugment.te.DefaultState;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .tenodeaugment.te.DefaultTunnelTerminationPoint;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .tenodeaugment.te.State;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .tenodeaugment.te.TunnelTerminationPoint;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .tenodeconfigattributes.DefaultTeNodeAttributes;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .tenodeconfigattributes.TeNodeAttributes;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .tenodeconfigattributes.TeNodeAttributes.TeNodeAttributesBuilder;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .tenodeconnectivitymatrix.DefaultConnectivityMatrix;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .tenodeconnectivitymatrix.DefaultConnectivityMatrix.ConnectivityMatrixBuilder;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .tenodeconnectivitymatrix.connectivitymatrix.DefaultFrom;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .tenodeconnectivitymatrix.connectivitymatrix.DefaultTo;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .tenodeinfoattributes.DefaultUnderlayTopology;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .tenodeinfoattributes.UnderlayTopology;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .tenodetunnelterminationcapability.DefaultTerminationCapability;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .tenodetunnelterminationcapability.TerminationCapability;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.informationsourceattributes.DefaultInformationSourceState;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.informationsourceattributes.InformationSourceState;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.informationsourceattributes.informationsourcestate.DefaultTopology;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.informationsourceattributes.informationsourcestate.Topology;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
+               .ietftetopology.networks.network.node.AugmentedNwNode;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
+               .ietftetopology.networks.network.node.DefaultAugmentedNwNode;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.networks.network.node.terminationpoint.AugmentedNtTerminationPoint;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeaugment.DefaultTe;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeaugment.DefaultTe.TeBuilder;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeaugment.Te;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeaugment.te.Config;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeaugment.te.DefaultConfig;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeaugment.te.DefaultState;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeaugment.te.DefaultTunnelTerminationPoint;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeaugment.te.State;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeaugment.te.TunnelTerminationPoint;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeconfigattributes.DefaultTeNodeAttributes;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeconfigattributes.TeNodeAttributes;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeconfigattributes.TeNodeAttributes.TeNodeAttributesBuilder;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeconnectivitymatrix.DefaultConnectivityMatrix;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeconnectivitymatrix.DefaultConnectivityMatrix.ConnectivityMatrixBuilder;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeconnectivitymatrix.connectivitymatrix.DefaultFrom;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeconnectivitymatrix.connectivitymatrix.DefaultTo;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeinfoattributes.DefaultUnderlayTopology;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeinfoattributes.UnderlayTopology;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodetunnelterminationcapability.DefaultTerminationCapability;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodetunnelterminationcapability.TerminationCapability;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.Srlg;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.TeAdminStatus;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.TeNodeId;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes
-        .TeTopologyEventType;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.TeTopologyEventType;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.TeTopologyId;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes
-        .tetopologyeventtype.TeTopologyEventTypeEnum;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.tetopologyeventtype.TeTopologyEventTypeEnum;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev20130715.ietfyangtypes.DottedQuad;
 
-import java.util.BitSet;
-import java.util.List;
-import java.util.Map;
-
-import static com.google.common.base.Preconditions.checkNotNull;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
 
 /**
  * Node conversion functions.
@@ -166,7 +138,7 @@
                 .builder();
         teNodeAttributesConfigBuilder = teNodeAttributesConfigBuilder
                 .isAbstract(teSubsystemTeNode.flags()
-                                    .get(TeNode.BIT_ABSTRACT));
+                        .get(TeNode.BIT_ABSTRACT));
 
         if (teSubsystemTeNode.adminStatus() != null) {
             teNodeAttributesConfigBuilder = teNodeAttributesConfigBuilder
@@ -181,7 +153,7 @@
         if (teSubsystemTeNode.underlayTeTopologyId() != null) {
             teNodeAttributesConfigBuilder = teNodeAttributesConfigBuilder
                     .underlayTopology(teNode2YangUnderlay(teSubsystemTeNode
-                                                                  .underlayTeTopologyId(), teTopologyService));
+                            .underlayTeTopologyId(), teTopologyService));
         }
 
         // TODO: should we ignore this from te to yang? as we've already set yang supportingNode
@@ -201,26 +173,26 @@
     }
 
     private static TeNodeAttributesBuilder
-    te2YangConnectivityMatrix(TeNodeAttributesBuilder teNodeAttributesConfigBuilder,
-                              Map<Long, ConnectivityMatrix> connectivityMatrices) {
+                    te2YangConnectivityMatrix(TeNodeAttributesBuilder teNodeAttributesConfigBuilder,
+                                              Map<Long, ConnectivityMatrix> connectivityMatrices) {
         ConnectivityMatrixBuilder connectivityMatrixConfigBuilder = DefaultConnectivityMatrix.builder();
         for (Map.Entry<Long, ConnectivityMatrix> teCmEntry :
-                connectivityMatrices.entrySet()) {
+            connectivityMatrices.entrySet()) {
             connectivityMatrixConfigBuilder = connectivityMatrixConfigBuilder
                     .id(teCmEntry.getKey())
                     .isAllowed(!teCmEntry.getValue().flags()
-                            .get(ConnectivityMatrix.BIT_DISALLOWED))
+                               .get(ConnectivityMatrix.BIT_DISALLOWED))
                     .from(new DefaultFrom.FromBuilder() // TODO: for now, assuming that there is
-                                  // only one 'from', and mergingList is empty
-                                  .tpRef(((TeLinkId) teCmEntry.getValue().from()).value())
-                                  .build())
+                                                        // only one 'from', and mergingList is empty
+                          .tpRef(((TeLinkId) teCmEntry.getValue().from()).value())
+                                         .build())
                     .to(new DefaultTo.ToBuilder() // TODO: for now, assuming that there is only
-                                // one item in constrainingElements list
-                                .tpRef(((TeLinkId) teCmEntry.getValue().constrainingElements().get(0)).value())
-                                .build());
+                                                  // one item in constrainingElements list
+                          .tpRef(((TeLinkId) teCmEntry.getValue().constrainingElements().get(0)).value())
+                                         .build());
             teNodeAttributesConfigBuilder = teNodeAttributesConfigBuilder
                     .addToConnectivityMatrix(connectivityMatrixConfigBuilder
-                                                     .build());
+                            .build());
         }
         return teNodeAttributesConfigBuilder;
     }
@@ -230,7 +202,7 @@
         UnderlayTopology.UnderlayTopologyBuilder underlayBuilder = DefaultUnderlayTopology
                 .builder()
                 .teTopologyIdRef(TeTopologyId
-                                         .fromString(String.valueOf(underlayTopology.topologyId())))
+                        .fromString(String.valueOf(underlayTopology.topologyId())))
                 .clientIdRef(underlayTopology.clientId())
                 .providerIdRef(underlayTopology.providerId());
 
@@ -250,10 +222,10 @@
         checkNotNull(teSubsystemTeNode, E_NULL_TE_SUBSYSTEM_TE_NODE);
 
         TeNodeAttributes
-                .TeNodeAttributesBuilder teNodeAttributesStateBuilder =
-                DefaultTeNodeAttributes.builder()
-                        .isAbstract(teSubsystemTeNode.flags()
-                                            .get(TeNode.BIT_ABSTRACT));
+                        .TeNodeAttributesBuilder teNodeAttributesStateBuilder =
+        DefaultTeNodeAttributes.builder()
+                                        .isAbstract(teSubsystemTeNode.flags()
+                                                .get(TeNode.BIT_ABSTRACT));
 
         if (teSubsystemTeNode.adminStatus() != null) {
             teNodeAttributesStateBuilder = teNodeAttributesStateBuilder
@@ -268,12 +240,12 @@
         if (teSubsystemTeNode.underlayTeTopologyId() != null) {
             teNodeAttributesStateBuilder = teNodeAttributesStateBuilder
                     .underlayTopology(teNode2YangUnderlay(teSubsystemTeNode
-                                                                  .underlayTeTopologyId(), teTopologyService));
+                            .underlayTeTopologyId(), teTopologyService));
         }
 
         if (teSubsystemTeNode.connectivityMatrices() != null) {
             teNodeAttributesStateBuilder = te2YangConnectivityMatrix(teNodeAttributesStateBuilder,
-                                                                     teSubsystemTeNode.connectivityMatrices());
+                                                                      teSubsystemTeNode.connectivityMatrices());
         }
 
         // TODO: should we ignore this from te to yang? as we've already set yang supportingNode
@@ -285,8 +257,7 @@
 
         if (teSubsystemTeNode.opStatus() != null) {
             yangStateBuilder = yangStateBuilder.operStatus(EnumConverter
-                                                                   .teSubsystem2YangOperStatus(teSubsystemTeNode
-                                                                                                       .opStatus()));
+                                                           .teSubsystem2YangOperStatus(teSubsystemTeNode.opStatus()));
         }
 
         if (teSubsystemTeNode.sourceTeNodeId() != null) {
@@ -295,10 +266,10 @@
             Topology.TopologyBuilder topologyBuilder = DefaultTopology.builder();
             topologyBuilder =
                     topologyBuilder.clientIdRef(teSubsystemTeNode.sourceTeNodeId().clientId())
-                            .providerIdRef(teSubsystemTeNode.sourceTeNodeId().providerId())
-                            // is this correct? Why not sourceTeNodeId().teTopologyKey()?
-                            .teTopologyIdRef(teSubsystemTeNode
-                                                     .sourceTeNodeId().topologyId());
+                                   .providerIdRef(teSubsystemTeNode.sourceTeNodeId().providerId())
+                                   // is this correct? Why not sourceTeNodeId().teTopologyKey()?
+                                   .teTopologyIdRef(teSubsystemTeNode
+                                                    .sourceTeNodeId().topologyId());
             issBuilder = issBuilder.topology(topologyBuilder.build());
             yangStateBuilder.informationSourceState(issBuilder.build());
         }
@@ -319,52 +290,52 @@
         }
 
         public static long bytesToLong(byte[] bytes) {
-            return ((long) bytes[7] & 255L) << 56
-                    | ((long) bytes[6] & 255L) << 48
-                    | ((long) bytes[5] & 255L) << 40
-                    | ((long) bytes[4] & 255L) << 32
-                    | ((long) bytes[3] & 255L) << 24
-                    | ((long) bytes[2] & 255L) << 16
-                    | ((long) bytes[1] & 255L) << 8 | (long) bytes[0] & 255L;
+            return (bytes[7] & 255L) << 56
+                    | (bytes[6] & 255L) << 48
+                    | (bytes[5] & 255L) << 40
+                    | (bytes[4] & 255L) << 32
+                    | (bytes[3] & 255L) << 24
+                    | (bytes[2] & 255L) << 16
+                    | (bytes[1] & 255L) << 8 | bytes[0] & 255L;
         }
     }
 
     /**
      * TE Node TunnelTerminationPoint object conversion from TE Topology subsystem to YANG.
      *
-     * @param teTunnelTp        TE TunnelTerminationPoint object
+     * @param teTunnelTp TE TunnelTerminationPoint object
      * @param teTpId
      * @param teTopologyService
      * @param teNodeKey
      * @return TunnelTerminationPoint YANG object
      */
     private static TunnelTerminationPoint teSubsystem2YangTtp(
-            org.onosproject.tetopology.management.api.node
-                    .TunnelTerminationPoint teTunnelTp, Long teTpId,
-            TeTopologyService teTopologyService,
-            TeNodeKey teNodeKey) {
+                           org.onosproject.tetopology.management.api.node
+                           .TunnelTerminationPoint teTunnelTp, Long teTpId,
+                           TeTopologyService teTopologyService,
+                           TeNodeKey teNodeKey) {
         checkNotNull(teTunnelTp, E_NULL_TE_SUBSYSTEM_TE_TUNNEL_TP);
 
         TunnelTerminationPoint.TunnelTerminationPointBuilder tunnelTpBuilder =
                 DefaultTunnelTerminationPoint.builder().tunnelTpId(ByteUtils.longToBytes(teTpId.longValue()));
 
         org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
-                .ietftetopology.tenodeaugment.te.tunnelterminationpoint.Config.ConfigBuilder ttpConfigBuilder =
-                org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
-                        .ietftetopology.tenodeaugment.te.tunnelterminationpoint.DefaultConfig.builder();
+            .ietftetopology.tenodeaugment.te.tunnelterminationpoint.Config.ConfigBuilder ttpConfigBuilder =
         org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
-                .ietftetopology.tenodeaugment.te.tunnelterminationpoint.State.StateBuilder ttpStateBuilder =
-                org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
-                        .ietftetopology.tenodeaugment.te.tunnelterminationpoint.DefaultState.builder();
+            .ietftetopology.tenodeaugment.te.tunnelterminationpoint.DefaultConfig.builder();
+        org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
+            .ietftetopology.tenodeaugment.te.tunnelterminationpoint.State.StateBuilder ttpStateBuilder =
+        org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
+            .ietftetopology.tenodeaugment.te.tunnelterminationpoint.DefaultState.builder();
 
         // Assuming teTunnelTp only has one interLayerLock
         if (teTunnelTp.interLayerLockList() != null && !teTunnelTp.interLayerLockList().isEmpty()) {
             ttpConfigBuilder = ttpConfigBuilder.interLayerLockId(teTunnelTp.interLayerLockList().get(0));
-            ttpStateBuilder = ttpStateBuilder.interLayerLockId(teTunnelTp.interLayerLockList().get(0));
+            ttpStateBuilder  = ttpStateBuilder.interLayerLockId(teTunnelTp.interLayerLockList().get(0));
         }
 
         TerminationCapability.TerminationCapabilityBuilder
-                tcapConfigBuilder = DefaultTerminationCapability.builder();
+                            tcapConfigBuilder = DefaultTerminationCapability.builder();
         // TODO: retrieve more attributes from teTunnelTp and assign to tcapConfigBuilder.
         // For which ones we can do the conversion?
         // FIXME: once new yang model is used, we can make llc from teTunnelTp.localLinkConnectivityList()
@@ -377,7 +348,7 @@
                         .network(netLinkKey.networkId()).links().get(netLinkKey.linkId());
                 tcapConfigBuilder = tcapConfigBuilder
                         .linkTp(TpId.fromString(networkLink.source().tpId()
-                                                        .toString()));
+                                .toString()));
                 // convert teLinkId to networkLinkKey
                 ttpConfigBuilder = ttpConfigBuilder.addToTerminationCapability(tcapConfigBuilder.build());
             }
@@ -396,13 +367,13 @@
                         .network(netLinkKey.networkId()).links().get(netLinkKey.linkId());
                 tcapStateBuilder = tcapStateBuilder
                         .linkTp(TpId.fromString(networkLink.source().tpId()
-                                                        .toString()));
+                                .toString()));
                 ttpStateBuilder = ttpStateBuilder.addToTerminationCapability(tcapStateBuilder.build());
             }
         }
 
         tunnelTpBuilder = tunnelTpBuilder.config(ttpConfigBuilder.build())
-                .state(ttpStateBuilder.build());
+                                         .state(ttpStateBuilder.build());
 
         return tunnelTpBuilder.build();
     }
@@ -410,9 +381,9 @@
     /**
      * Node object conversion from TE Topology subsystem to YANG.
      *
-     * @param teSubsystem       TE subsystem node
+     * @param teSubsystem TE subsystem node
      * @param teTopologyService teTopology core service
-     * @param teTopologyKey     teTopologyKey
+     * @param teTopologyKey teTopologyKey
      * @return YANG node
      */
     public static Node teSubsystem2YangNode(org.onosproject.tetopology.management.api.node.NetworkNode teSubsystem,
@@ -430,10 +401,10 @@
                     .builder();
             for (NetworkNodeKey nodeKey : teSubsystem.supportingNodeIds()) {
                 sNodes.add(spNodeBuilder
-                                   .networkRef(NetworkId
-                                                       .fromString(nodeKey.networkId().toString()))
-                                   .nodeRef(NodeId.fromString(nodeKey.nodeId().toString()))
-                                   .build());
+                        .networkRef(NetworkId
+                                .fromString(nodeKey.networkId().toString()))
+                        .nodeRef(NodeId.fromString(nodeKey.nodeId().toString()))
+                        .build());
             }
             builder = builder.supportingNode(sNodes);
         }
@@ -446,7 +417,7 @@
 
             for (TerminationPoint teTp : teSubsystemTeTp.values()) {
                 tpAugmentBuilder.addToTerminationPoint(TerminationPointConverter
-                                                               .teSubsystem2YangTerminationPoint(teTp));
+                        .teSubsystem2YangTerminationPoint(teTp));
             }
             builder.addYangAugmentedInfo(tpAugmentBuilder.build(),
                                          AugmentedNdNode.class);
@@ -461,24 +432,21 @@
             TeBuilder yangTeBuilder = DefaultTe.builder();
 
             yangTeBuilder = yangTeBuilder.teNodeId(TeNodeId.of(DottedQuad
-                                                                       .of(Ip4Address.valueOf((int) teSubsystemTeNode
-                                                                               .teNodeId())
-                                                                                   .toString())));
+                    .of(Ip4Address.valueOf((int) teSubsystemTeNode.teNodeId())
+                            .toString())));
 
             // Set configuration data
             // Set state data
             yangTeBuilder = yangTeBuilder.config(teNode2YangConfig(teSubsystemTeNode, teTopologyService))
-                    .state(teNode2YangState(teSubsystemTeNode, teTopologyService));
+                                         .state(teNode2YangState(teSubsystemTeNode, teTopologyService));
 
             if (teSubsystemTeNode.tunnelTerminationPoints() != null) {
                 for (Map.Entry<Long, org.onosproject.tetopology.management.api.node.TunnelTerminationPoint> entry :
                         teSubsystemTeNode.tunnelTerminationPoints().entrySet()) {
                     yangTeBuilder = yangTeBuilder
-                            .addToTunnelTerminationPoint(teSubsystem2YangTtp(
-                                    entry.getValue(), entry.getKey(),
-                                    teTopologyService,
-                                    new TeNodeKey(teTopologyKey,
-                                                  teSubsystemTeNode.teNodeId())));
+                            .addToTunnelTerminationPoint(teSubsystem2YangTtp(entry
+                                    .getValue(), entry.getKey(), teTopologyService,
+                                    new TeNodeKey(teTopologyKey, teSubsystemTeNode.teNodeId())));
                 }
             }
 
@@ -492,12 +460,12 @@
     /**
      * Node object conversion from YANG to TE Topology subsystem.
      *
-     * @param yangNode    Node in YANG model
+     * @param yangNode Node in YANG model
      * @param yangNetwork YANG network
      * @return TE subsystem node
      */
     public static org.onosproject.tetopology.management.api.node.NetworkNode
-    yang2TeSubsystemNode(Node yangNode, Network yangNetwork) {
+                    yang2TeSubsystemNode(Node yangNode, Network yangNetwork) {
         checkNotNull(yangNode, E_NULL_YANG_NODE);
 
         org.onosproject.tetopology.management.api.node.DefaultNetworkNode node;
@@ -541,12 +509,12 @@
 
     // TODO: convert connectivity matrix from yang to te
     private static Map<Long, ConnectivityMatrix>
-    yang2TeSubsystemNodeConnectivityMatrix(String networkId,
-                                           String nodeId,
-                                           List<org.onosproject.yang.gen.v1.urn.ietf
-                                                   .params.xml.ns.yang.ietf.te.topology.rev20160708
-                                                   .ietftetopology.tenodeconnectivitymatrix.
-                                                   ConnectivityMatrix> yangMatrix) {
+                    yang2TeSubsystemNodeConnectivityMatrix(String networkId,
+                                                           String nodeId,
+                                                           List<org.onosproject.yang.gen.v1.urn.ietf
+                                                           .params.xml.ns.yang.ietf.te.topology.rev20160708
+                                                           .ietftetopology.tenodeconnectivitymatrix.
+                                                           ConnectivityMatrix> yangMatrix) {
 
         Map<Long, ConnectivityMatrix> teCmList = Maps.newHashMap();
 
@@ -576,8 +544,8 @@
             TePathAttributes teAttributes = new
                     TePathAttributes(cmYang.teDefaultMetric(),
                                      cmYang.performanceMetric() == null ? null :
-                                             (cmYang.performanceMetric().measurement() == null ? null :
-                                                     cmYang.performanceMetric().measurement().unidirectionalDelay()),
+                                         (cmYang.performanceMetric().measurement() == null ? null :
+                                             cmYang.performanceMetric().measurement().unidirectionalDelay()),
                                      srlgs);
             ConnectivityMatrix coreCm = new ConnectivityMatrix(cmYang.id(),
                                                                from,
@@ -602,7 +570,7 @@
 
     // TODO: retrieve the details of tunnel termiantion points from yang to te
     private static Map<Long, org.onosproject.tetopology.management.api.node.
-            TunnelTerminationPoint> yang2TeSubsystemTtp(List<TunnelTerminationPoint> ttps, Node yangNode) {
+                      TunnelTerminationPoint> yang2TeSubsystemTtp(List<TunnelTerminationPoint> ttps, Node yangNode) {
         Map<Long, org.onosproject.tetopology.management.api.node.TunnelTerminationPoint> ttpsMap = Maps
                 .newHashMap();
         for (TunnelTerminationPoint ttpYang : ttps) {
@@ -641,7 +609,7 @@
                                         && !tpItem.yangAugmentedInfoMap().isEmpty()) {
                                     AugmentedNtTerminationPoint yangTpAugment =
                                             (AugmentedNtTerminationPoint) tpItem
-                                                    .yangAugmentedInfo(AugmentedNtTerminationPoint.class);
+                                            .yangAugmentedInfo(AugmentedNtTerminationPoint.class);
                                     if (yangTpAugment.te() != null && yangTpAugment.te().teTpId() != null) {
                                         elt = new TeLinkId(Long.valueOf(yangTpAugment.te().teTpId().toString()));
                                         break;
@@ -655,7 +623,7 @@
                 }
             }
             TePathAttributes teAttributes = null; // how to find these
-            // attributes from ttpYang?
+                                                  // attributes from ttpYang?
             UnderlayAbstractPath underlayPath = null; // how to find underlayAbstractPath from ttpYang?
             LocalLinkConnectivity llc = new LocalLinkConnectivity(eltList,
                                                                   flags,
@@ -666,15 +634,16 @@
             float[] availAdaptBandwidth = null; // how to find availableBandwidth?
 
             org.onosproject.tetopology.management.api.node.
-                    TunnelTerminationPoint ttpTe = new
-                    org.onosproject.tetopology.management.api.node.
-                            DefaultTunnelTerminationPoint(ByteUtils.bytesToLong(ttpYang.tunnelTpId()),
-                                                          switchingLayer,
-                                                          encodingLayer,
-                                                          flags,
-                                                          interLayerLockList,
-                                                          localLinkConnectivityList,
-                                                          availAdaptBandwidth);
+                TunnelTerminationPoint ttpTe = new
+                org.onosproject.tetopology.management.api.node.
+                DefaultTunnelTerminationPoint(ByteUtils.bytesToLong(ttpYang.tunnelTpId()),
+                                              switchingLayer,
+                                              encodingLayer,
+                                              flags,
+                                              interLayerLockList,
+                                              localLinkConnectivityList,
+                                              availAdaptBandwidth,
+                                              null);
 
             ttpsMap.put(ByteUtils.bytesToLong(ttpYang.tunnelTpId()), ttpTe);
         }
@@ -711,28 +680,31 @@
         List<Long> teTpIds = Lists.newArrayList();
 
         // ********************************************** to find teLinkIds
+        // teLinkIds should be supposed to get from YANG Link and TP data.
+        // For now, assuming each teTp is sourcing a TE link .
         if (MapUtils.isNotEmpty(teTps)) {
             for (Map.Entry<KeyId, TerminationPoint> entry : teTps.entrySet()) {
                 if (entry.getValue().teTpId() != null) {
                     teTpIds.add(entry.getValue().teTpId());
+                    teLinkIds.add(entry.getValue().teTpId());
                 }
             }
         }
         // ********************************************** to find teTpIds
-        if (yangNode.yangAugmentedInfoMap() != null
-                && !yangNode.yangAugmentedInfoMap().isEmpty()) {
-
-            AugmentedNdNode yangTpNodeAugment = (AugmentedNdNode) yangNode
-                    .yangAugmentedInfo(AugmentedNdNode.class);
-
-            if (yangTpNodeAugment.terminationPoint() != null) {
-                for (org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology
-                        .rev20151208.ietfnetworktopology.networks.network.node.augmentedndnode.TerminationPoint
-                        yangTpnode : yangTpNodeAugment.terminationPoint()) {
-                    teTpIds.add(Long.valueOf(yangTpnode.tpId().uri().string()));
-                }
-            }
-        }
+//        if (yangNode.yangAugmentedInfoMap() != null
+//                && !yangNode.yangAugmentedInfoMap().isEmpty()) {
+//
+//            AugmentedNdNode yangTpNodeAugment = (AugmentedNdNode) yangNode
+//                    .yangAugmentedInfo(AugmentedNdNode.class);
+//
+//            if (yangTpNodeAugment.terminationPoint() != null) {
+//                for (org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology
+//                        .rev20151208.ietfnetworktopology.networks.network.node.augmentedndnode.TerminationPoint
+//                        yangTpnode : yangTpNodeAugment.terminationPoint()) {
+//                    teTpIds.add(Long.valueOf(yangTpnode.tpId().uri().string()));
+//                }
+//            }
+//        }
         // **********************************************
 
         Config ynodeAugCfg = yangNodeAugTe.config();
@@ -744,22 +716,22 @@
                 if (teNodeAttr.underlayTopology() != null) {
 
                     underlayTopologyIdId = yang2TeSubsystemNodeUnderlayTopology(teNodeAttr
-                                                                                        .underlayTopology());
+                            .underlayTopology());
                 }
                 BitSet flags = new BitSet();
                 if (teNodeAttr.isAbstract()) {
                     flags.set(TeNode.BIT_ABSTRACT);
                 }
                 teData = new CommonNodeData(
-                        null, // teNodeAttr.name().string(),
-                        EnumConverter.yang2TeSubsystemAdminStatus(teNodeAttr.adminStatus()),
-                        EnumConverter.yang2TeSubsystemOpStatus(yangNodeAugTe.state().operStatus()),
-                        flags);
+                                            null, // teNodeAttr.name().string(),
+                                            EnumConverter.yang2TeSubsystemAdminStatus(teNodeAttr.adminStatus()),
+                                            EnumConverter.yang2TeSubsystemOpStatus(yangNodeAugTe.state().operStatus()),
+                                            flags);
 
                 if (teNodeAttr.connectivityMatrix() != null) {
                     connMatrices = yang2TeSubsystemNodeConnectivityMatrix(yangNetworkId.uri().toString(),
-                                                                          yangNodeId.uri().toString(),
-                                                                          teNodeAttr.connectivityMatrix());
+                                                                    yangNodeId.uri().toString(),
+                                                                    teNodeAttr.connectivityMatrix());
                 }
 
             }
@@ -801,7 +773,7 @@
      * to its corresponding YANG Object (YO) format.
      *
      * @param eventType Node event type
-     * @param eventData TE Topology node event data
+     * @param eventData  TE Topology node event data
      * @return YANG Object converted from nodeData
      */
     public static TeNodeEvent teNetworkNode2yangTeNodeEvent(TeTopologyEventTypeEnum eventType,
@@ -820,7 +792,7 @@
         org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.
                 rev20160708.ietftetopology.tenodeconfigattributesnotification.
                 TeNodeAttributes teNodeAttributes = node == null ? null
-                : teNode2YangTeNodeAttributes(node.teNode());
+                                                                 : teNode2YangTeNodeAttributes(node.teNode());
         builder.teNodeAttributes(teNodeAttributes);
 
         return builder.build();
@@ -841,31 +813,31 @@
         if (teNode.connectivityMatrices() != null) {
 
             org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-                    .tenodeconnectivitymatrixabs.DefaultConnectivityMatrix
-                    .ConnectivityMatrixBuilder connectivityMatrixConfigBuilder = org.onosproject.yang.gen.v1.urn.ietf.
-                    params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeconnectivitymatrixabs.
-                    DefaultConnectivityMatrix.builder();
+            .tenodeconnectivitymatrixabs.DefaultConnectivityMatrix
+            .ConnectivityMatrixBuilder connectivityMatrixConfigBuilder = org.onosproject.yang.gen.v1.urn.ietf.
+            params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeconnectivitymatrixabs.
+            DefaultConnectivityMatrix.builder();
             for (Map.Entry<Long, ConnectivityMatrix> teCmEntry :
-                    teNode.connectivityMatrices().entrySet()) {
+                teNode.connectivityMatrices().entrySet()) {
                 connectivityMatrixConfigBuilder = connectivityMatrixConfigBuilder
                         .id(teCmEntry.getKey())
                         .isAllowed(!teCmEntry.getValue().flags()
-                                .get(ConnectivityMatrix.BIT_DISALLOWED))
+                                   .get(ConnectivityMatrix.BIT_DISALLOWED))
                         .from(new org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
-                                .ietftetopology.tenodeconnectivitymatrixabs.connectivitymatrix.DefaultFrom
-                                .FromBuilder() // TODO: for now, assuming that there is
-                                      // only one 'from', and mergingList is empty
-                                      .tpRef(teCmEntry.getValue().from())
-                                      .build())
+                              .ietftetopology.tenodeconnectivitymatrixabs.connectivitymatrix.DefaultFrom
+                              .FromBuilder() // TODO: for now, assuming that there is
+                                                            // only one 'from', and mergingList is empty
+                              .tpRef(teCmEntry.getValue().from())
+                                             .build())
                         .to(new org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
-                                .ietftetopology.tenodeconnectivitymatrixabs.connectivitymatrix
-                                .DefaultTo.ToBuilder() // TODO: for now, assuming that there is only
-                                    // one item in constrainingElements list
-                                    .tpRef(teCmEntry.getValue().constrainingElements().get(0))
-                                    .build());
+                            .ietftetopology.tenodeconnectivitymatrixabs.connectivitymatrix
+                            .DefaultTo.ToBuilder() // TODO: for now, assuming that there is only
+                                                      // one item in constrainingElements list
+                              .tpRef(teCmEntry.getValue().constrainingElements().get(0))
+                                             .build());
                 attrBuilder = attrBuilder
                         .addToConnectivityMatrix(connectivityMatrixConfigBuilder
-                                                         .build());
+                                .build());
             }
         }
 
@@ -877,7 +849,8 @@
     }
 
     /**
-     * Retrieves the TE network node key from a YANG network node notification event.
+     * Retrieves the TE network node key from a YANG network node notification
+     * event.
      *
      * @param yangNodeEvent YANG network node notification event
      * @return TE network node key
@@ -896,7 +869,7 @@
     /**
      * Converts YangNode event to NetworkNode.
      *
-     * @param yangNodeEvent     yangNodeEvent
+     * @param yangNodeEvent yangNodeEvent
      * @param teTopologyService teTopologyService
      * @return NetworkNode
      */
@@ -992,12 +965,12 @@
     }
 
     private static ConnectivityMatrix yangNodeEvent2TeConnectivityMatrix(org.onosproject.yang.gen.v1.
-                                                                                 urn.ietf.params.xml.ns.yang.
-                                                                                 ietf.te.topology
-                                                                                 .rev20160708.ietftetopology
-                                                                                 .tenodeconnectivitymatrixabs
-                                                                                 .ConnectivityMatrix yangConnMatrix,
-                                                                         ConnectivityMatrix oldTeConnMatrix) {
+                                                                         urn.ietf.params.xml.ns.yang.
+                                                                         ietf.te.topology
+                                                                         .rev20160708.ietftetopology
+                                                                         .tenodeconnectivitymatrixabs
+                                                                         .ConnectivityMatrix yangConnMatrix,
+                                                                 ConnectivityMatrix oldTeConnMatrix) {
 
         long id = yangConnMatrix.id();
         ElementType from = new TeLinkId((long) (yangConnMatrix.from().tpRef()));
diff --git a/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/TeTopologyService.java b/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/TeTopologyService.java
index 40c8025..3a393d6 100644
--- a/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/TeTopologyService.java
+++ b/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/TeTopologyService.java
@@ -158,4 +158,11 @@
      * @return value of termination point key
      */
     TerminationPointKey terminationPointKey(TeLinkTpGlobalKey teTpKey);
+
+    /**
+     * Returns the TE controller global identification.
+     *
+     * @return value of controller id
+     */
+    long teContollerId();
 }
diff --git a/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/node/DefaultTunnelTerminationPoint.java b/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/node/DefaultTunnelTerminationPoint.java
index fd419ee..9bfa179 100644
--- a/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/node/DefaultTunnelTerminationPoint.java
+++ b/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/node/DefaultTunnelTerminationPoint.java
@@ -15,16 +15,17 @@
  */
 package org.onosproject.tetopology.management.api.node;
 
+import java.util.Arrays;
+import java.util.BitSet;
+import java.util.List;
+
+import org.onosproject.tetopology.management.api.EncodingType;
+import org.onosproject.tetopology.management.api.SwitchingType;
+
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Objects;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
-import org.onosproject.tetopology.management.api.EncodingType;
-import org.onosproject.tetopology.management.api.SwitchingType;
-
-import java.util.Arrays;
-import java.util.BitSet;
-import java.util.List;
 
 /**
  * Default implementation of a tunnel termination point.
@@ -37,6 +38,7 @@
     private final List<Long> interLayerLockList;
     private final List<LocalLinkConnectivity> localLinkConnectivityList;
     private final float[] availAdaptBandwidth;
+    private final TtpKey supportTtpKey;
 
     /**
      * Create a tunnel termination point.
@@ -50,6 +52,7 @@
      * @param localLinkConnectivityList the local link connectivity list
      * @param availAdaptBandwidth       the remaining adaptation bandwidth
      *                                  at each priority level
+     * @param supportTtpKey             supporting TTP key from underlay topology
      */
     public DefaultTunnelTerminationPoint(long ttpId,
                                          SwitchingType switchingLayer,
@@ -57,7 +60,8 @@
                                          BitSet flags,
                                          List<Long> interLayerLockList,
                                          List<LocalLinkConnectivity> localLinkConnectivityList,
-                                         float[] availAdaptBandwidth) {
+                                         float[] availAdaptBandwidth,
+                                         TtpKey supportTtpKey) {
         this.ttpId = ttpId;
         this.switchingLayer = switchingLayer;
         this.encodingLayer = encodingLayer;
@@ -69,6 +73,7 @@
         this.availAdaptBandwidth = availAdaptBandwidth != null ?
                 Arrays.copyOf(availAdaptBandwidth,
                               availAdaptBandwidth.length) : null;
+        this.supportTtpKey = supportTtpKey;
     }
 
     @Override
@@ -116,10 +121,15 @@
     }
 
     @Override
+    public TtpKey supportingTtpId() {
+        return supportTtpKey;
+    }
+
+    @Override
     public int hashCode() {
         return Objects.hashCode(ttpId, switchingLayer, encodingLayer, flags,
                                 interLayerLockList, localLinkConnectivityList,
-                                Arrays.hashCode(availAdaptBandwidth));
+                                Arrays.hashCode(availAdaptBandwidth), supportTtpKey);
     }
 
     @Override
@@ -135,7 +145,8 @@
                     Objects.equal(flags, that.flags) &&
                     Objects.equal(interLayerLockList, that.interLayerLockList) &&
                     Objects.equal(localLinkConnectivityList, that.localLinkConnectivityList) &&
-                    Arrays.equals(availAdaptBandwidth, that.availAdaptBandwidth);
+                    Arrays.equals(availAdaptBandwidth, that.availAdaptBandwidth) &&
+                    Objects.equal(supportTtpKey, that.supportTtpKey);
         }
         return false;
     }
@@ -150,6 +161,8 @@
                 .add("interLayerLockList", interLayerLockList)
                 .add("localLinkConnectivityList", localLinkConnectivityList)
                 .add("availAdaptBandwidth", availAdaptBandwidth)
+                .add("supportTtpKey", supportTtpKey)
                 .toString();
     }
+
 }
diff --git a/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/node/TunnelTerminationPoint.java b/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/node/TunnelTerminationPoint.java
index 8da43d2..5f7cccb 100644
--- a/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/node/TunnelTerminationPoint.java
+++ b/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/node/TunnelTerminationPoint.java
@@ -15,12 +15,12 @@
  */
 package org.onosproject.tetopology.management.api.node;
 
-import org.onosproject.tetopology.management.api.EncodingType;
-import org.onosproject.tetopology.management.api.SwitchingType;
-
 import java.util.BitSet;
 import java.util.List;
 
+import org.onosproject.tetopology.management.api.EncodingType;
+import org.onosproject.tetopology.management.api.SwitchingType;
+
 /**
  * Representation of a tunnel termination point.
  */
@@ -88,4 +88,11 @@
      * @return list of available adaptation bandwidth
      */
     float[] availAdaptBandwidth();
+
+    /**
+     * Returns the supporting TTP identifier.
+     *
+     * @return the supporting TTP key
+     */
+    TtpKey supportingTtpId();
 }
diff --git a/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/DistributedTeTopologyStore.java b/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/DistributedTeTopologyStore.java
index 4f75d76..3d6be15 100644
--- a/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/DistributedTeTopologyStore.java
+++ b/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/DistributedTeTopologyStore.java
@@ -39,6 +39,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.LinkedBlockingQueue;
 
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.collections.MapUtils;
@@ -137,7 +138,7 @@
     implements TeTopologyStore {
     private static final String STORE_NAME = "TE_NETWORK_TOPOLOGY_STORE";
     private static final String TETOPOLOGYKEY_INTERNALTETOPOLOGY = "TeTopologyKey-InternalTeTopology";
-    private static final String NETWORKID_NETWORK = "NetworkId-Network";
+    private static final String NETWORKID_NETWORK = "NetworkId-InternalNetwork";
     private static final String TENODEKEY_INTERNALTENODE = "TeNodeKey-InternalTeNode";
     private static final String CONNMATRIXKEY_CONNECTIVITYMATRIX = "ConnMatrixKey-ConnectivityMatrix";
     private static final String NETWORKNODEKEY_INTERNALNETWORKNODE = "NetworkNodeKey-InternalNetworkNode";
@@ -199,7 +200,8 @@
     // Track termination point keys by TE termination point Key
     private ConsistentMap<TeLinkTpGlobalKey, TerminationPointKey> tpKeyConsistentMap;
     private Map<TeLinkTpGlobalKey, TerminationPointKey> tpKeyMap;
-    private BlockingQueue<TeTopologyMapEvent> mapEventQueue;
+    private final BlockingQueue<TeTopologyMapEvent> mapEventQueue = new LinkedBlockingQueue<>();
+
     private long providerId;
     private static final Serializer TETOPOLOGY_SERIALIZER = Serializer
             .using(new KryoNamespace.Builder().register(KryoNamespaces.API)
@@ -373,6 +375,7 @@
         tpKeyMap.clear();
         ttpConsistentMap.destroy();
         ttpMap.clear();
+        mapEventQueue.clear();
         log.info("Stopped");
     }
 
@@ -454,10 +457,6 @@
     private class InternalTeNodeListener implements MapEventListener<TeNodeKey, InternalTeNode> {
         @Override
         public void event(MapEvent<TeNodeKey, InternalTeNode> event) {
-            // Event should be ignored when the topology is not there.
-            if (teTopologyMap.get(event.key().teTopologyKey()) == null) {
-                return;
-            }
             Type type = null;
             switch (event.type()) {
             case INSERT:
@@ -499,10 +498,6 @@
     private class InternalNetworkNodeListener implements MapEventListener<NetworkNodeKey, InternalNetworkNode> {
         @Override
         public void event(MapEvent<NetworkNodeKey, InternalNetworkNode> event) {
-            // Event should be ignored when the network is not there.
-            if (networkMap.get(event.key().networkId()) == null) {
-                return;
-            }
             Type type = null;
             switch (event.type()) {
             case INSERT:
@@ -544,11 +539,6 @@
     private class InternalTeLinkListener implements MapEventListener<TeLinkTpGlobalKey, InternalTeLink> {
         @Override
         public void event(MapEvent<TeLinkTpGlobalKey, InternalTeLink> event) {
-            // Event should be ignored when the topology or locol node is not there.
-            if (teTopologyMap.get(event.key().teTopologyKey()) == null ||
-                    teNodeMap.get(event.key().teNodeKey()) == null) {
-                return;
-            }
             Type type = null;
             switch (event.type()) {
             case INSERT:
@@ -589,10 +579,6 @@
     private class InternalNetworkLinkListener implements MapEventListener<NetworkLinkKey, InternalNetworkLink> {
         @Override
         public void event(MapEvent<NetworkLinkKey, InternalNetworkLink> event) {
-            // Event should be ignored when the network is not there.
-            if (networkMap.get(event.key().networkId()) == null) {
-                return;
-            }
             Type type = null;
             switch (event.type()) {
             case INSERT:
@@ -819,6 +805,7 @@
 
     @Override
     public void updateNetwork(Network network) {
+        log.debug("updateNetwork {}", network);
         InternalNetwork curNetwork = networkMap.get(network.networkId());
         TeTopologyKey topoKey = null;
         if (network.teTopologyId() != null) {
@@ -1415,8 +1402,8 @@
     }
 
     @Override
-    public void setMapEventQueue(BlockingQueue<TeTopologyMapEvent> queue) {
-        mapEventQueue = queue;
+    public BlockingQueue<TeTopologyMapEvent> mapEventQueue() {
+        return mapEventQueue;
     }
 
     @Override
diff --git a/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/TeTopologyConfig.java b/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/TeTopologyConfig.java
index b980159..a4e6032 100644
--- a/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/TeTopologyConfig.java
+++ b/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/TeTopologyConfig.java
@@ -31,12 +31,12 @@
     private static final String TENODE_ID_END = "tenode-id-end";
 
     /**
-      * Retrieves TE topology provider identifier.
-      *
-      * @return provider Id
-      * @throws ConfigException if the parameters are not correctly configured
-      * or conversion of the parameters fails
-      */
+     * Retrieves TE topology provider identifier.
+     *
+     * @return provider Id
+     * @throws ConfigException if the parameters are not correctly configured
+     * or conversion of the parameters fails
+     */
     public long providerId() throws ConfigException {
         try {
             return object.path(PROVIDER_ID).asLong();
@@ -45,49 +45,49 @@
         }
     }
 
-    /**
-     * Retrieves TE node starting IPv4 address.
-     *
-     * @return the IPv4 address
-     * @throws ConfigException if the parameters are not correctly configured
-     * or conversion of the parameters fails
-     */
-    public Ip4Address teNodeIpStart() throws ConfigException {
+   /**
+    * Retrieves TE node starting IPv4 address.
+    *
+    * @return the IPv4 address
+    * @throws ConfigException if the parameters are not correctly configured
+    * or conversion of the parameters fails
+    */
+   public Ip4Address teNodeIpStart() throws ConfigException {
        try {
            return Ip4Address.valueOf(object.path(TENODE_ID_START).asText());
        } catch (IllegalArgumentException e) {
            throw new ConfigException(CONFIG_VALUE_ERROR, e);
        }
-    }
+   }
 
-    /**
-     * Retrieves TE node end IPv4 address.
-     *
-     * @return the IPv4 address
-     * @throws ConfigException if the parameters are not correctly configured or
-     *             conversion of the parameters fails
-     */
-    public Ip4Address teNodeIpEnd() throws ConfigException {
-        try {
-            return Ip4Address.valueOf(object.path(TENODE_ID_END).asText());
-        } catch (IllegalArgumentException e) {
-            throw new ConfigException(CONFIG_VALUE_ERROR, e);
-        }
-    }
+  /**
+   * Retrieves TE node end IPv4 address.
+   *
+   * @return the IPv4 address
+   * @throws ConfigException if the parameters are not correctly configured
+   * or conversion of the parameters fails
+   */
+  public Ip4Address teNodeIpEnd() throws ConfigException {
+      try {
+          return Ip4Address.valueOf(object.path(TENODE_ID_END).asText());
+      } catch (IllegalArgumentException e) {
+          throw new ConfigException(CONFIG_VALUE_ERROR, e);
+      }
+  }
 
-    /**
-     * Retrieves if this is a MDSC(Multi-Domain Super Controller).
-     *
-     * @return MDSC value
-     * @throws ConfigException if the parameters are not correctly configured or
-     *             conversion of the parameters fails
-     */
-    public String mdsc() throws ConfigException {
-        try {
-            return object.path(MDSC).asText();
-        } catch (IllegalArgumentException e) {
-            throw new ConfigException(CONFIG_VALUE_ERROR, e);
-        }
-    }
+  /**
+   * Retrieves if this is a MDSC(Multi-Domain Super Controller).
+   *
+   * @return MDSC value
+   * @throws ConfigException if the parameters are not correctly configured or
+   *             conversion of the parameters fails
+   */
+  public String mdsc() throws ConfigException {
+      try {
+          return object.path(MDSC).asText();
+      } catch (IllegalArgumentException e) {
+          throw new ConfigException(CONFIG_VALUE_ERROR, e);
+      }
+  }
 
 }
diff --git a/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/TeTopologyManager.java b/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/TeTopologyManager.java
index 1407e0c..30ca4e2 100644
--- a/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/TeTopologyManager.java
+++ b/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/TeTopologyManager.java
@@ -40,6 +40,7 @@
 import static org.onosproject.tetopology.management.api.TeTopologyEvent.Type.TE_NODE_UPDATED;
 import static org.onosproject.tetopology.management.api.TeTopologyEvent.Type.TE_TOPOLOGY_ADDED;
 import static org.onosproject.tetopology.management.api.TeTopologyEvent.Type.TE_TOPOLOGY_REMOVED;
+import static org.onosproject.tetopology.management.api.link.TeLink.BIT_ACCESS_INTERDOMAIN;
 import static org.onosproject.tetopology.management.impl.TeMgrUtil.linkBuilder;
 import static org.onosproject.tetopology.management.impl.TeMgrUtil.networkBuilder;
 import static org.onosproject.tetopology.management.impl.TeMgrUtil.networkLinkKey;
@@ -51,9 +52,7 @@
 import java.util.BitSet;
 import java.util.List;
 import java.util.Map;
-import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.ExecutorService;
-import java.util.concurrent.LinkedBlockingQueue;
 
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.collections.MapUtils;
@@ -113,6 +112,7 @@
 import org.onosproject.tetopology.management.api.node.CommonNodeData;
 import org.onosproject.tetopology.management.api.node.ConnectivityMatrix;
 import org.onosproject.tetopology.management.api.node.DefaultTeNode;
+import org.onosproject.tetopology.management.api.node.DefaultTunnelTerminationPoint;
 import org.onosproject.tetopology.management.api.node.NetworkNode;
 import org.onosproject.tetopology.management.api.node.NetworkNodeEventSubject;
 import org.onosproject.tetopology.management.api.node.NetworkNodeKey;
@@ -176,8 +176,6 @@
     public TeTopologyStore store;
 
     private TeTopologyStoreDelegate delegate = this::post;
-    private final BlockingQueue<TeTopologyEvent> eventQueue = new LinkedBlockingQueue<>();
-    private final BlockingQueue<TeTopologyMapEvent> mapEventQueue = new LinkedBlockingQueue<>();
     private final ConfigFactory<ApplicationId, TeTopologyConfig> factory =
             new ConfigFactory<ApplicationId, TeTopologyConfig>(APP_SUBJECT_FACTORY,
                     TeTopologyConfig.class,
@@ -205,7 +203,6 @@
      */
     public void activateBasics() {
         store.setDelegate(delegate);
-        store.setMapEventQueue(mapEventQueue);
         store.setProviderId(providerId);
         eventDispatcher.addSink(TeTopologyEvent.class, listenerRegistry);
     }
@@ -238,7 +235,6 @@
         cfgService.unregisterConfigFactory(factory);
         executor.shutdownNow();
         executor = null;
-        eventQueue.clear();
         log.info("Stopped");
     }
 
@@ -315,7 +311,7 @@
         public void run() {
             try {
                 TeTopologyMapEvent event;
-                while ((event = mapEventQueue.take()) != null) {
+                while ((event = store.mapEventQueue().take()) != null) {
                     switch (event.type()) {
                     case TE_TOPOLOGY_ADDED:
                     case TE_TOPOLOGY_UPDATED:
@@ -335,6 +331,10 @@
                         break;
                     case TE_NODE_ADDED:
                     case TE_NODE_UPDATED:
+                        if (store.teTopology(event.teNodeKey().teTopologyKey()) == null) {
+                            // Event should be ignored when the topology is not there.
+                            break;
+                        }
                         TeNode teNode = store.teNode(event.teNodeKey());
                         post(new TeTopologyEvent(event.type(),
                                                  new TeNodeEventSubject(event.teNodeKey(), teNode)));
@@ -344,6 +344,10 @@
                         }
                         break;
                     case TE_NODE_REMOVED:
+                        if (store.teTopology(event.teNodeKey().teTopologyKey()) == null) {
+                            // Event should be ignored when the topology is not there.
+                            break;
+                        }
                         post(new TeTopologyEvent(TE_NODE_REMOVED,
                                                  new TeNodeEventSubject(event.teNodeKey(), null)));
                         if (mdsc && isCustomizedLearnedTopology(event.teNodeKey().teTopologyKey())) {
@@ -352,6 +356,11 @@
                         break;
                     case TE_LINK_ADDED:
                     case TE_LINK_UPDATED:
+                        if (store.teTopology(event.teLinkKey().teTopologyKey()) == null ||
+                                store.teNode(event.teLinkKey().teNodeKey()) == null) {
+                            // Event should be ignored when the topology or node is not there.
+                            break;
+                        }
                         TeLink teLink = store.teLink(event.teLinkKey());
                         post(new TeTopologyEvent(event.type(),
                                                  new TeLinkEventSubject(event.teLinkKey(), teLink)));
@@ -362,6 +371,11 @@
                         }
                         break;
                     case TE_LINK_REMOVED:
+                        if (store.teTopology(event.teLinkKey().teTopologyKey()) == null ||
+                                store.teNode(event.teLinkKey().teNodeKey()) == null) {
+                            // Event should be ignored when the topology or node is not there.
+                            break;
+                        }
                         post(new TeTopologyEvent(TE_LINK_REMOVED,
                                                  new TeLinkEventSubject(event.teLinkKey(), null)));
                         if (mdsc && isCustomizedLearnedTopology(event.teLinkKey().teTopologyKey())) {
@@ -382,21 +396,37 @@
                         break;
                     case NODE_ADDED:
                     case NODE_UPDATED:
+                        if (store.network(event.networkNodeKey().networkId()) == null) {
+                            // Event should be ignored when the network is not there.
+                            break;
+                        }
                         NetworkNode node = store.networkNode(event.networkNodeKey());
                         post(new TeTopologyEvent(event.type(),
                                                  new NetworkNodeEventSubject(event.networkNodeKey(), node)));
                         break;
                     case NODE_REMOVED:
+                        if (store.network(event.networkNodeKey().networkId()) == null) {
+                            // Event should be ignored when the network is not there.
+                            break;
+                        }
                         post(new TeTopologyEvent(NODE_REMOVED,
                                                  new NetworkNodeEventSubject(event.networkNodeKey(), null)));
                         break;
                     case LINK_ADDED:
                     case LINK_UPDATED:
+                        if (store.network(event.networkLinkKey().networkId()) == null) {
+                            // Event should be ignored when the network is not there.
+                            break;
+                        }
                         NetworkLink link = store.networkLink(event.networkLinkKey());
                         post(new TeTopologyEvent(event.type(),
                                                  new NetworkLinkEventSubject(event.networkLinkKey(), link)));
                         break;
                     case LINK_REMOVED:
+                        if (store.network(event.networkLinkKey().networkId()) == null) {
+                            // Event should be ignored when the network is not there.
+                            break;
+                        }
                         post(new TeTopologyEvent(LINK_REMOVED,
                                                  new NetworkLinkEventSubject(event.networkLinkKey(), null)));
                         break;
@@ -452,7 +482,21 @@
                                                    srcNode.opStatus(), srcNode.flags()); // No change
         Map<Long, ConnectivityMatrix> connMatrices = srcNode.connectivityMatrices();
         List<Long> teLinkIds = srcNode.teLinkIds(); // No change
-        Map<Long, TunnelTerminationPoint> ttps = srcNode.tunnelTerminationPoints();
+        Map<Long, TunnelTerminationPoint> ttps = null;
+        if (MapUtils.isNotEmpty(srcNode.tunnelTerminationPoints())) {
+            ttps = Maps.newHashMap();
+            for (Map.Entry<Long, TunnelTerminationPoint> entry : srcNode.tunnelTerminationPoints().entrySet()) {
+                TunnelTerminationPoint ttp = entry.getValue();
+                ttps.put(entry.getKey(),
+                         new DefaultTunnelTerminationPoint(ttp.ttpId(), ttp.switchingLayer(),
+                                                           ttp.encodingLayer(), ttp.flags(),
+                                                           ttp.interLayerLockList(),
+                                                           ttp.localLinkConnectivityList(),
+                                                           ttp.availAdaptBandwidth(),
+                                                           null)); //Remove supporting TTP Ids
+            }
+        }
+
         List<Long> teTpIds = srcNode.teTerminationPointIds(); // No change
         DefaultTeNode newNode = new DefaultTeNode(mergedTeNodeId, underlayTopologyId,
                 supportTeNodeId, sourceTeNodeId, common, connMatrices, teLinkIds,
@@ -504,8 +548,21 @@
                                                     exLink.maxAvailLspBandwidth(),
                                                     exLink.minAvailLspBandwidth(),
                                                     exLink.oduResource());
+        BitSet flags = exLink.flags();
+        if (peerTeLinkKey != null &&
+                externalLink != null && externalLink.plugId() != null) {
+            // Assuming this is an inter-domain link which is merged with its peer,
+            // needs to clear BIT_ACCESS_INTERDOMAIN
+            flags.clear(BIT_ACCESS_INTERDOMAIN);
+        } else if (peerTeLinkKey == null &&
+                externalLink != null && externalLink.plugId() != null) {
+            // Assuming this is an inter-domain link which lost its peer,
+            // needs to clear BIT_ACCESS_INTERDOMAIN
+            flags.set(BIT_ACCESS_INTERDOMAIN);
+        }
+
         CommonLinkData common = new CommonLinkData(exLink.adminStatus(), exLink.opStatus(),
-                exLink.flags(), exLink.switchingLayer(), exLink.encodingLayer(),
+                flags, exLink.switchingLayer(), exLink.encodingLayer(),
                 externalLink, underlayPath, teAttributes,
                 exLink.administrativeGroup(), exLink.interLayerLocks(),
                 bandwidth);
@@ -793,19 +850,18 @@
                 teNodeIpEnd = cfgService.getConfig(appId, TeTopologyConfig.class)
                                         .teNodeIpEnd();
                 mdsc = cfgService.getConfig(appId, TeTopologyConfig.class)
-                                 .mdsc().equalsIgnoreCase(MDSC_MODE);
+                        .mdsc().equals(MDSC_MODE);
                 nextTeNodeId = teNodeIpStart.toInt();
             } catch (ConfigException e) {
                 log.error("Configuration error {}", e);
             }
         }
 
-
         @Override
         public boolean isRelevant(NetworkConfigEvent event) {
             return event.configClass().equals(TeTopologyConfig.class) &&
                     (event.type() == CONFIG_ADDED ||
-                     event.type() == CONFIG_UPDATED);
+                    event.type() == CONFIG_UPDATED);
         }
     }
 
@@ -826,6 +882,7 @@
     @Override
     public TeTopology teTopology(TeTopologyKey topologyId) {
         if (mergedTopology != null &&
+                topologyId != null &&
                 topologyId.equals(mergedTopologyKey)) {
             return mergedTopology;
         }
@@ -955,4 +1012,9 @@
                                                       KeyId.keyId(Long.toString(teTpKey.teLinkTpId()))) :
                store.terminationPointKey(teTpKey);
     }
+
+    @Override
+    public long teContollerId() {
+        return providerId;
+    }
 }
diff --git a/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/TeTopologyStore.java b/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/TeTopologyStore.java
index bede7b3..09b8db7 100644
--- a/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/TeTopologyStore.java
+++ b/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/TeTopologyStore.java
@@ -274,11 +274,11 @@
     void setNextTeNodeId(TeTopologyKey topologyKey, long nextNodeId);
 
     /**
-     * Sets the queue to store the events originating from consistent maps.
+     * Returns the queue to store the events originating from consistent maps.
      *
-     * @param queue a blocking queue
+     * @return value of the blocking queue
      */
-    void setMapEventQueue(BlockingQueue<TeTopologyMapEvent> queue);
+    BlockingQueue<TeTopologyMapEvent> mapEventQueue();
 
     /**
      * Sets the provider ID.
diff --git a/apps/tetopology/app/src/test/java/org/onosproject/tetopology/management/DefaultBuilder.java b/apps/tetopology/app/src/test/java/org/onosproject/tetopology/management/DefaultBuilder.java
index 8ce1241..9ed72ba 100644
--- a/apps/tetopology/app/src/test/java/org/onosproject/tetopology/management/DefaultBuilder.java
+++ b/apps/tetopology/app/src/test/java/org/onosproject/tetopology/management/DefaultBuilder.java
@@ -113,7 +113,7 @@
                                                  EncodingType.LSP_ENCODING_ODUK,
                                                  new BitSet(TeConstants.FLAG_MAX_BITS),
                                                  null, null,
-                                                 ODU2BW); //10G for ODU2
+                                                 ODU2BW, null); //10G for ODU2
     }
 
     private static TerminationPoint tpBuilder(long teTpId) {
diff --git a/apps/tetopology/app/src/test/java/org/onosproject/tetopology/management/SimpleTeTopologyStore.java b/apps/tetopology/app/src/test/java/org/onosproject/tetopology/management/SimpleTeTopologyStore.java
index 7f4bb80..f4ff72d 100644
--- a/apps/tetopology/app/src/test/java/org/onosproject/tetopology/management/SimpleTeTopologyStore.java
+++ b/apps/tetopology/app/src/test/java/org/onosproject/tetopology/management/SimpleTeTopologyStore.java
@@ -1026,12 +1026,13 @@
     }
 
     @Override
-    public void setMapEventQueue(BlockingQueue<TeTopologyMapEvent> queue) {
+    public void setProviderId(long providerId) {
+        this.providerId = providerId;
     }
 
     @Override
-    public void setProviderId(long providerId) {
-        this.providerId = providerId;
+    public BlockingQueue<TeTopologyMapEvent> mapEventQueue() {
+        return null;
     }
 }
 
diff --git a/apps/tetopology/app/src/test/java/org/onosproject/tetopology/management/TeTopologyManagerTest.java b/apps/tetopology/app/src/test/java/org/onosproject/tetopology/management/TeTopologyManagerTest.java
index 03d21fb..f6c0db0 100644
--- a/apps/tetopology/app/src/test/java/org/onosproject/tetopology/management/TeTopologyManagerTest.java
+++ b/apps/tetopology/app/src/test/java/org/onosproject/tetopology/management/TeTopologyManagerTest.java
@@ -128,6 +128,7 @@
                 .teNode(new TeNodeKey(DefaultBuilder.teTopologyKey(),
                                       DefaultBuilder.teNode().teNodeId()));
         assertNotNull("TeNode should be found", teNode);
+        assertTrue("TE node should be identical", teNode.equals(DefaultBuilder.teNode()));
         assertTrue("Number of TTPs should be 1",
                    teNode.tunnelTerminationPoints().size() == 1);
         TeLink teLink = service
diff --git a/providers/ietfte/topology/src/main/java/org/onosproject/provider/te/topology/TeTopologyRestconfProvider.java b/providers/ietfte/topology/src/main/java/org/onosproject/provider/te/topology/TeTopologyRestconfProvider.java
index a377e51..f75027d 100644
--- a/providers/ietfte/topology/src/main/java/org/onosproject/provider/te/topology/TeTopologyRestconfProvider.java
+++ b/providers/ietfte/topology/src/main/java/org/onosproject/provider/te/topology/TeTopologyRestconfProvider.java
@@ -275,7 +275,7 @@
             //Convert the YO to TE Core data and update TE Core.
             for (Network nw : ietfNetwork.networks().network()) {
                 topologyProviderService.networkUpdated(
-                        NetworkConverter.yang2TeSubsystemNetwork(nw, ietfNetwork.networks()));
+                        NetworkConverter.yang2TeSubsystemNetwork(nw, ietfNetwork.networks(), deviceId));
             }
         }