diff --git a/core/common/src/main/java/org/onosproject/codec/impl/ApplicationCodec.java b/core/common/src/main/java/org/onosproject/codec/impl/ApplicationCodec.java
index 4812154..b2cab09 100644
--- a/core/common/src/main/java/org/onosproject/codec/impl/ApplicationCodec.java
+++ b/core/common/src/main/java/org/onosproject/codec/impl/ApplicationCodec.java
@@ -31,7 +31,7 @@
     @Override
     public ObjectNode encode(Application app, CodecContext context) {
         checkNotNull(app, "Application cannot be null");
-        ApplicationService service = context.get(ApplicationService.class);
+        ApplicationService service = context.getService(ApplicationService.class);
         ObjectNode result = context.mapper().createObjectNode()
                 .put("name", app.id().name())
                 .put("id", app.id().id())
diff --git a/core/common/src/main/java/org/onosproject/codec/impl/ControllerNodeCodec.java b/core/common/src/main/java/org/onosproject/codec/impl/ControllerNodeCodec.java
index 4b06ff0..65d758e 100644
--- a/core/common/src/main/java/org/onosproject/codec/impl/ControllerNodeCodec.java
+++ b/core/common/src/main/java/org/onosproject/codec/impl/ControllerNodeCodec.java
@@ -35,7 +35,7 @@
     @Override
     public ObjectNode encode(ControllerNode node, CodecContext context) {
         checkNotNull(node, "Controller node cannot be null");
-        ClusterService service = context.get(ClusterService.class);
+        ClusterService service = context.getService(ClusterService.class);
         return context.mapper().createObjectNode()
                 .put("id", node.id().toString())
                 .put("ip", node.ip().toString())
diff --git a/core/common/src/main/java/org/onosproject/codec/impl/CriterionCodec.java b/core/common/src/main/java/org/onosproject/codec/impl/CriterionCodec.java
index 899ade5..3526f23 100644
--- a/core/common/src/main/java/org/onosproject/codec/impl/CriterionCodec.java
+++ b/core/common/src/main/java/org/onosproject/codec/impl/CriterionCodec.java
@@ -117,19 +117,19 @@
     }
 
     private interface CriterionTypeFormatter {
-        ObjectNode formatCriterion(ObjectNode root, Criterion criterion);
+        ObjectNode encodeCriterion(ObjectNode root, Criterion criterion);
     }
 
     private static class FormatUnknown implements CriterionTypeFormatter {
         @Override
-        public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+        public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
             return root;
         }
     }
 
     private static class FormatInPort implements CriterionTypeFormatter {
         @Override
-        public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+        public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
             final PortCriterion portCriterion = (PortCriterion) criterion;
             return root.put("port", portCriterion.port().toLong());
         }
@@ -137,7 +137,7 @@
 
     private static class FormatMetadata implements CriterionTypeFormatter {
         @Override
-        public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+        public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
             final MetadataCriterion metadataCriterion =
                     (MetadataCriterion) criterion;
             return root.put("metadata", metadataCriterion.metadata());
@@ -146,7 +146,7 @@
 
     private static class FormatEth implements CriterionTypeFormatter {
         @Override
-        public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+        public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
             final EthCriterion ethCriterion = (EthCriterion) criterion;
             return root.put("mac", ethCriterion.mac().toString());
         }
@@ -154,7 +154,7 @@
 
     private static class FormatEthType implements CriterionTypeFormatter {
         @Override
-        public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+        public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
             final EthTypeCriterion ethTypeCriterion =
                     (EthTypeCriterion) criterion;
             return root.put("ethType", ethTypeCriterion.ethType());
@@ -163,7 +163,7 @@
 
     private static class FormatVlanVid implements CriterionTypeFormatter {
         @Override
-        public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+        public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
             final VlanIdCriterion vlanIdCriterion =
                     (VlanIdCriterion) criterion;
             return root.put("vlanId", vlanIdCriterion.vlanId().toShort());
@@ -172,7 +172,7 @@
 
     private static class FormatVlanPcp implements CriterionTypeFormatter {
             @Override
-            public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+            public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
                 final VlanPcpCriterion vlanPcpCriterion =
                         (VlanPcpCriterion) criterion;
                 return root.put("priority", vlanPcpCriterion.priority());
@@ -181,7 +181,7 @@
 
     private static class FormatIpDscp implements CriterionTypeFormatter {
             @Override
-            public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+            public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
                 final IPDscpCriterion ipDscpCriterion =
                         (IPDscpCriterion) criterion;
                 return root.put("ipDscp", ipDscpCriterion.ipDscp());
@@ -190,7 +190,7 @@
 
     private static class FormatIpEcn implements CriterionTypeFormatter {
             @Override
-            public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+            public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
                 final IPEcnCriterion ipEcnCriterion =
                         (IPEcnCriterion) criterion;
                 return root.put("ipEcn", ipEcnCriterion.ipEcn());
@@ -199,7 +199,7 @@
 
     private static class FormatIpProto implements CriterionTypeFormatter {
         @Override
-        public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+        public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
             final IPProtocolCriterion iPProtocolCriterion =
                     (IPProtocolCriterion) criterion;
             return root.put("protocol", iPProtocolCriterion.protocol());
@@ -208,7 +208,7 @@
 
     private static class FormatIp implements CriterionTypeFormatter {
             @Override
-            public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+            public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
                 final IPCriterion iPCriterion = (IPCriterion) criterion;
                 return root.put("ip", iPCriterion.ip().toString());
         }
@@ -216,7 +216,7 @@
 
     private static class FormatTcp implements CriterionTypeFormatter {
             @Override
-            public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+            public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
                 final TcpPortCriterion tcpPortCriterion =
                         (TcpPortCriterion) criterion;
                 return root.put("tcpPort", tcpPortCriterion.tcpPort());
@@ -225,7 +225,7 @@
 
     private static class FormatUdp implements CriterionTypeFormatter {
             @Override
-            public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+            public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
                 final UdpPortCriterion udpPortCriterion =
                         (UdpPortCriterion) criterion;
                 return root.put("udpPort", udpPortCriterion.udpPort());
@@ -234,7 +234,7 @@
 
     private static class FormatSctp implements CriterionTypeFormatter {
         @Override
-        public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+        public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
             final SctpPortCriterion sctpPortCriterion =
                     (SctpPortCriterion) criterion;
             return root.put("sctpPort", sctpPortCriterion.sctpPort());
@@ -243,7 +243,7 @@
 
     private static class FormatIcmpV4Type implements CriterionTypeFormatter {
         @Override
-        public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+        public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
             final IcmpTypeCriterion icmpTypeCriterion =
                     (IcmpTypeCriterion) criterion;
             return root.put("icmpType", icmpTypeCriterion.icmpType());
@@ -252,7 +252,7 @@
 
     private static class FormatIcmpV4Code implements CriterionTypeFormatter {
         @Override
-        public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+        public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
             final IcmpCodeCriterion icmpCodeCriterion =
                     (IcmpCodeCriterion) criterion;
             return root.put("icmpCode", icmpCodeCriterion.icmpCode());
@@ -261,7 +261,7 @@
 
     private static class FormatIpV6FLabel implements CriterionTypeFormatter {
         @Override
-        public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+        public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
             final IPv6FlowLabelCriterion ipv6FlowLabelCriterion =
                     (IPv6FlowLabelCriterion) criterion;
             return root.put("flowLabel", ipv6FlowLabelCriterion.flowLabel());
@@ -270,7 +270,7 @@
 
     private static class FormatIcmpV6Type implements CriterionTypeFormatter {
         @Override
-        public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+        public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
             final Icmpv6TypeCriterion icmpv6TypeCriterion =
                     (Icmpv6TypeCriterion) criterion;
             return root.put("icmpv6Type", icmpv6TypeCriterion.icmpv6Type());
@@ -279,7 +279,7 @@
 
     private static class FormatIcmpV6Code implements CriterionTypeFormatter {
         @Override
-        public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+        public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
             final Icmpv6CodeCriterion icmpv6CodeCriterion =
                     (Icmpv6CodeCriterion) criterion;
             return root.put("icmpv6Code", icmpv6CodeCriterion.icmpv6Code());
@@ -288,7 +288,7 @@
 
     private static class FormatV6NDTarget implements CriterionTypeFormatter {
         @Override
-        public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+        public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
             final IPv6NDTargetAddressCriterion ipv6NDTargetAddressCriterion
                 = (IPv6NDTargetAddressCriterion) criterion;
             return root.put("targetAddress", ipv6NDTargetAddressCriterion.targetAddress().toString());
@@ -297,7 +297,7 @@
 
     private static class FormatV6NDTll implements CriterionTypeFormatter {
         @Override
-        public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+        public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
             final IPv6NDLinkLayerAddressCriterion ipv6NDLinkLayerAddressCriterion
                 = (IPv6NDLinkLayerAddressCriterion) criterion;
             return root.put("mac", ipv6NDLinkLayerAddressCriterion.mac().toString());
@@ -306,7 +306,7 @@
 
     private static class FormatMplsLabel implements CriterionTypeFormatter {
         @Override
-        public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+        public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
             final MplsCriterion mplsCriterion =
                     (MplsCriterion) criterion;
             return root.put("label", mplsCriterion.label().toInt());
@@ -315,7 +315,7 @@
 
     private static class FormatIpV6Exthdr implements CriterionTypeFormatter {
         @Override
-        public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+        public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
             final IPv6ExthdrFlagsCriterion exthdrCriterion =
                     (IPv6ExthdrFlagsCriterion) criterion;
             return root.put("exthdrFlags", exthdrCriterion.exthdrFlags());
@@ -324,7 +324,7 @@
 
     private static class FormatOchSigId implements CriterionTypeFormatter {
         @Override
-        public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+        public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
             final LambdaCriterion lambdaCriterion =
                     (LambdaCriterion) criterion;
             return root.put("lambda", lambdaCriterion.lambda());
@@ -333,7 +333,7 @@
 
     private static class FormatOchSigType implements CriterionTypeFormatter {
         @Override
-        public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+        public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
             final OpticalSignalTypeCriterion opticalSignalTypeCriterion =
                     (OpticalSignalTypeCriterion) criterion;
             return root.put("signalType", opticalSignalTypeCriterion.signalType());
@@ -343,7 +343,7 @@
     private class FormatDummyType implements CriterionTypeFormatter {
 
         @Override
-        public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+        public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
             checkNotNull(criterion, "Criterion cannot be null");
 
             return root.put("type", criterion.type().toString());
@@ -364,7 +364,7 @@
                         "No formatter found for criterion type "
                                 + criterion.type().toString());
 
-        return formatter.formatCriterion(result, criterion);
+        return formatter.encodeCriterion(result, criterion);
     }
 
 
diff --git a/core/common/src/main/java/org/onosproject/codec/impl/DeviceCodec.java b/core/common/src/main/java/org/onosproject/codec/impl/DeviceCodec.java
index 7f78756..f1a4f78 100644
--- a/core/common/src/main/java/org/onosproject/codec/impl/DeviceCodec.java
+++ b/core/common/src/main/java/org/onosproject/codec/impl/DeviceCodec.java
@@ -48,7 +48,7 @@
     @Override
     public ObjectNode encode(Device device, CodecContext context) {
         checkNotNull(device, "Device cannot be null");
-        DeviceService service = context.get(DeviceService.class);
+        DeviceService service = context.getService(DeviceService.class);
         ObjectNode result = context.mapper().createObjectNode()
                 .put(ID, device.id().toString())
                 .put(TYPE, device.type().name())
diff --git a/core/common/src/main/java/org/onosproject/codec/impl/LinkCodec.java b/core/common/src/main/java/org/onosproject/codec/impl/LinkCodec.java
index 65fcb80..491d751 100644
--- a/core/common/src/main/java/org/onosproject/codec/impl/LinkCodec.java
+++ b/core/common/src/main/java/org/onosproject/codec/impl/LinkCodec.java
@@ -37,6 +37,7 @@
     private static final String SRC = "src";
     private static final String DST = "dst";
     private static final String TYPE = "type";
+    private static final String STATE = "state";
 
     @Override
     public ObjectNode encode(Link link, CodecContext context) {
@@ -46,6 +47,9 @@
         result.set(SRC, codec.encode(link.src(), context));
         result.set(DST, codec.encode(link.dst(), context));
         result.put(TYPE, link.type().toString());
+        if (link.state() != null) {
+            result.put(STATE, link.state().toString());
+        }
         return annotate(result, link, context);
     }
 
