diff --git a/src/main/java/org.onosproject.xran/entities/RnibCell.java b/src/main/java/org.onosproject.xran/entities/RnibCell.java
index e56b6b1..dae002c 100644
--- a/src/main/java/org.onosproject.xran/entities/RnibCell.java
+++ b/src/main/java/org.onosproject.xran/entities/RnibCell.java
@@ -16,6 +16,10 @@
 
 package org.onosproject.xran.entities;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
 import com.fasterxml.jackson.databind.JsonNode;
 import org.onosproject.net.DeviceId;
 import org.onosproject.xran.codecs.api.ECGI;
@@ -24,9 +28,9 @@
 import org.onosproject.xran.codecs.pdu.L2MeasConfig;
 import org.onosproject.xran.codecs.pdu.RRMConfig;
 import org.onosproject.xran.codecs.pdu.SchedMeasReportPerCell;
-import org.openmuc.jasn1.ber.BerByteArrayOutputStream;
-import org.openmuc.jasn1.ber.types.BerBitString;
-import org.openmuc.jasn1.ber.types.BerInteger;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.types.BerBitString;
+import org.onosproject.xran.codecs.ber.types.BerInteger;
 
 import javax.xml.bind.DatatypeConverter;
 import java.io.ByteArrayInputStream;
@@ -41,16 +45,34 @@
 /**
  * Created by dimitris on 7/22/17.
  */
+
+@JsonPropertyOrder({
+        "ECGI",
+        "Configuration",
+        "PRB-Usage",
+        "QCI",
+        "RRMConfiguration",
+        "MeasurementConfiguration"
+})
+@JsonIgnoreProperties(ignoreUnknown = true)
 public class RnibCell {
+    @JsonIgnore
     private static final String SCHEME = "xran";
 
+    @JsonProperty("ECGI")
     private ECGI ecgi;
+    @JsonProperty("Configuration")
     private CellConfigReport conf;
+    @JsonProperty("PRB-Usage")
     private PrbUsageContainer prbUsage;
+    @JsonProperty("QCI")
     private SchedMeasReportPerCell.QciVals qci;
+    @JsonProperty("RRMConfiguration")
     private RRMConfig rrmConfig;
+    @JsonProperty("MeasurementConfiguration")
     private L2MeasConfig measConfig;
 
+    @JsonIgnore
     private String version;
 
     public RnibCell() {
@@ -95,30 +117,37 @@
         this.version = version;
     }
 
+    @JsonProperty("RRMConfiguration")
     public RRMConfig getRrmConfig() {
         return rrmConfig;
     }
 
+    @JsonProperty("RRMConfiguration")
     public void setRrmConfig(RRMConfig rrmConfig) {
         this.rrmConfig = rrmConfig;
     }
 
+    @JsonProperty("PRB-Usage")
     public PrbUsageContainer getPrbUsage() {
         return prbUsage;
     }
 
+    @JsonProperty("PRB-Usage")
     public void setPrbUsage(PrbUsageContainer prbUsage) {
         this.prbUsage = prbUsage;
     }
 
+    @JsonProperty("ECGI")
     public ECGI getEcgi() {
         return ecgi;
     }
 
+    @JsonProperty("ECGI")
     public void setEcgi(ECGI ecgi) {
         this.ecgi = ecgi;
     }
 
+    @JsonProperty("Configuration")
     public CellConfigReport getConf() {
         return conf;
     }
@@ -127,6 +156,7 @@
         return rrmConfig;
     }*/
 
+    @JsonProperty("Configuration")
     public void setConf(CellConfigReport conf) {
         this.conf = conf;
     }
@@ -136,8 +166,8 @@
         ueList.forEach(ue -> crnti.addCRNTI(ue.getRanId()));
 
         {
-            JsonNode start_prb_dl = rrmConfigNode.get("start_prb_dl");
-            if (start_prb_dl != null) {
+            JsonNode start_prb_dl = rrmConfigNode.path("start_prb_dl");
+            if (!start_prb_dl.isMissingNode()) {
                 RRMConfig.StartPrbDl startPrbDl = new RRMConfig.StartPrbDl();
                 if (start_prb_dl.isArray()) {
                     if (ueList.size() == start_prb_dl.size()) {
@@ -152,8 +182,8 @@
         }
 
         {
-            JsonNode end_prb_dl = rrmConfigNode.get("end_prb_dl");
-            if (end_prb_dl != null) {
+            JsonNode end_prb_dl = rrmConfigNode.path("end_prb_dl");
+            if (!end_prb_dl.isMissingNode()) {
                 RRMConfig.EndPrbDl endPrbDl = new RRMConfig.EndPrbDl();
                 if (end_prb_dl.isArray()) {
                     if (ueList.size() == end_prb_dl.size()) {
@@ -168,8 +198,8 @@
         }
 
         {
-            JsonNode start_prb_ul = rrmConfigNode.get("start_prb_ul");
-            if (start_prb_ul != null) {
+            JsonNode start_prb_ul = rrmConfigNode.path("start_prb_ul");
+            if (!start_prb_ul.isMissingNode()) {
                 RRMConfig.StartPrbUl startPrbUl = new RRMConfig.StartPrbUl();
                 if (start_prb_ul.isArray()) {
                     if (ueList.size() == start_prb_ul.size()) {
@@ -184,8 +214,8 @@
         }
 
         {
-            JsonNode end_prb_ul = rrmConfigNode.get("end_prb_ul");
-            if (end_prb_ul != null) {
+            JsonNode end_prb_ul = rrmConfigNode.path("end_prb_ul");
+            if (!end_prb_ul.isMissingNode()) {
                 RRMConfig.EndPrbUl endPrbUl = new RRMConfig.EndPrbUl();
                 if (end_prb_ul.isArray()) {
                     if (ueList.size() == end_prb_ul.size()) {
@@ -202,10 +232,12 @@
         rrmConfig.setCrnti(crnti);
     }
 
+    @JsonProperty("QCI")
     public SchedMeasReportPerCell.QciVals getQci() {
         return qci;
     }
 
+    @JsonProperty("QCI")
     public void setQci(SchedMeasReportPerCell.QciVals qci) {
         this.qci = qci;
     }
@@ -218,26 +250,27 @@
         this.prbUsage.secondary = secondary;
     }
 
+    @JsonProperty("MeasurementConfiguration")
     public L2MeasConfig getMeasConfig() {
         return measConfig;
     }
 
+    @JsonProperty("MeasurementConfiguration")
     public void setMeasConfig(L2MeasConfig measConfig) {
         this.measConfig = measConfig;
     }
 
     @Override
     public String toString() {
-        StringBuilder sb = new StringBuilder();
-        sb.append("{\n")
-                .append(ecgi != null ? "\"ecgi\":" + ecgi : "")
-                .append(conf != null ? ",\n\"config-report\":" + conf : "")
-                .append(prbUsage != null ? ",\n\"prb-usage\":" + prbUsage : "")
-                .append(qci != null ? ",\n\"qci-vals\":" + qci : "")
-                .append(rrmConfig != null ? ",\n\"rrm-config\":" + rrmConfig : "")
-                .append(measConfig != null ? ",\n\"l2-meas-config\":" + measConfig : "")
-                .append("\n}\n");
-        return sb.toString();
+        return "RnibCell{" +
+                "ecgi=" + ecgi +
+                ", conf=" + conf +
+                ", prbUsage=" + prbUsage +
+                ", qci=" + qci +
+                ", rrmConfig=" + rrmConfig +
+                ", measConfig=" + measConfig +
+                ", version='" + version + '\'' +
+                '}';
     }
 
     @Override
@@ -255,18 +288,37 @@
         return ecgi.hashCode();
     }
 
+    @JsonPropertyOrder({
+            "primary",
+            "secondary"
+    })
+    @JsonIgnoreProperties(ignoreUnknown = true)
     class PrbUsageContainer {
         PRBUsage primary;
         PRBUsage secondary;
 
+        public PRBUsage getPrimary() {
+            return primary;
+        }
+
+        public void setPrimary(PRBUsage primary) {
+            this.primary = primary;
+        }
+
+        public PRBUsage getSecondary() {
+            return secondary;
+        }
+
+        public void setSecondary(PRBUsage secondary) {
+            this.secondary = secondary;
+        }
+
         @Override
         public String toString() {
-            StringBuilder sb = new StringBuilder();
-            sb.append("{\n")
-                    .append(primary != null ? "\"primary\":" + primary : "")
-                    .append(secondary != null ? ",\n\"secondary\":" + secondary : "")
-                    .append("\n}\n");
-            return sb.toString();
+            return "PrbUsageContainer{" +
+                    "primary=" + primary +
+                    ", secondary=" + secondary +
+                    '}';
         }
     }
 }
diff --git a/src/main/java/org.onosproject.xran/entities/RnibLink.java b/src/main/java/org.onosproject.xran/entities/RnibLink.java
index 9b024b9..ade8f58 100644
--- a/src/main/java/org.onosproject.xran/entities/RnibLink.java
+++ b/src/main/java/org.onosproject.xran/entities/RnibLink.java
@@ -16,38 +16,58 @@
 
 package org.onosproject.xran.entities;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.google.common.collect.Lists;
 import org.onosproject.xran.codecs.api.*;
 import org.onosproject.xran.codecs.pdu.PDCPMeasReportPerUe;
 import org.onosproject.xran.codecs.pdu.RRMConfig;
 import org.onosproject.xran.identifiers.LinkId;
-import org.openmuc.jasn1.ber.types.BerBitString;
-import org.openmuc.jasn1.ber.types.BerInteger;
+import org.onosproject.xran.codecs.ber.types.BerInteger;
 
 import java.util.Arrays;
 import java.util.List;
 import java.util.Optional;
 import java.util.Timer;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
 
 /**
  * Created by dimitris on 7/22/17.
  */
+@JsonPropertyOrder({
+        "Link-ID",
+        "Type",
+        "RRMConfiguration",
+        "TrafficPercent",
+        "BearerParameters",
+        "Quality",
+        "PDCP-Throughput",
+        "PDCP-Packet-Delay",
+        "Resource-Usage"
+})
+@JsonIgnoreProperties(ignoreUnknown = true)
 public class RnibLink {
+    @JsonProperty("Link-ID")
     private LinkId linkId;
-    //    private String type;
+    @JsonProperty("RRMConfiguration")
     private RRMConfig rrmParameters;
-
+    @JsonProperty("TrafficPercent")
     private TrafficSplitPercentage trafficPercent;
+    @JsonProperty("BearerParameters")
     private ERABParams bearerParameters;
-
+    @JsonProperty("Quality")
     private LinkQuality quality;
+    @JsonProperty("PDCP-Throughput")
     private PDCPThroughput pdcpThroughput;
+    @JsonProperty("PDCP-Packet-Delay")
     private PDCPPacketDelay pdcpPackDelay;
+    @JsonProperty("Resource-Usage")
     private ResourceUsage resourceUsage;
+    @JsonProperty("Type")
     private Type type;
+    @JsonIgnore
     private Timer timer;
 
     public RnibLink(RnibCell cell, RnibUe ue) {
@@ -83,10 +103,12 @@
         this.timer = timer;
     }
 
+    @JsonProperty("Link-ID")
     public LinkId getLinkId() {
         return linkId;
     }
 
+    @JsonProperty("Link-ID")
     public void setLinkId(LinkId linkId) {
         this.linkId = linkId;
     }
@@ -96,42 +118,52 @@
         trafficPercent.setEcgi(cell.getEcgi());
     }
 
+    @JsonProperty("Type")
     public Type getType() {
         return type;
     }
 
+    @JsonProperty("Type")
     public void setType(Type type) {
         this.type = type;
     }
 
+    @JsonProperty("TrafficPercent")
     public TrafficSplitPercentage getTrafficPercent() {
         return trafficPercent;
     }
 
+    @JsonProperty("TrafficPercent")
     public void setTrafficPercent(TrafficSplitPercentage trafficPercent) {
         this.trafficPercent = trafficPercent;
     }
 
+    @JsonProperty("BearerParameters")
     public ERABParams getBearerParameters() {
         return bearerParameters;
     }
 
+    @JsonProperty("BearerParameters")
     public void setBearerParameters(ERABParams bearerParameters) {
         this.bearerParameters = bearerParameters;
     }
 
+    @JsonProperty("Quality")
     public LinkQuality getQuality() {
         return quality;
     }
 
+    @JsonProperty("Quality")
     public void setQuality(LinkQuality quality) {
         this.quality = quality;
     }
 
+    @JsonProperty("RRMConfiguration")
     public RRMConfig getRrmParameters() {
         return rrmParameters;
     }
 
+    @JsonProperty("RRMConfiguration")
     public void setRrmParameters(RRMConfig rrmParameters) {
         this.rrmParameters = rrmParameters;
     }
@@ -151,7 +183,7 @@
         }
 
         {
-            JsonNode end_prb_dl = rrmConfigNode.get("end_prb_dl");
+            JsonNode end_prb_dl = rrmConfigNode.path("end_prb_dl");
             if (!end_prb_dl.isMissingNode()) {
                 RRMConfig.EndPrbDl endPrbDl = new RRMConfig.EndPrbDl();
 
@@ -164,7 +196,7 @@
         }
 
         {
-            JsonNode start_prb_ul = rrmConfigNode.get("start_prb_ul");
+            JsonNode start_prb_ul = rrmConfigNode.path("start_prb_ul");
             if (!start_prb_ul.isMissingNode()) {
                 RRMConfig.StartPrbUl startPrbUl = new RRMConfig.StartPrbUl();
 
@@ -177,7 +209,7 @@
         }
 
         {
-            JsonNode end_prb_ul = rrmConfigNode.get("end_prb_ul");
+            JsonNode end_prb_ul = rrmConfigNode.path("end_prb_ul");
             if (!end_prb_ul.isMissingNode()) {
                 RRMConfig.EndPrbUl endPrbUl = new RRMConfig.EndPrbUl();
 
@@ -190,45 +222,50 @@
         }
     }
 
+    @JsonProperty("PDCP-Throughput")
     public PDCPThroughput getPdcpThroughput() {
         return pdcpThroughput;
     }
 
+    @JsonProperty("PDCP-Throughput")
     public void setPdcpThroughput(PDCPThroughput pdcpThroughput) {
         this.pdcpThroughput = pdcpThroughput;
     }
 
+    @JsonProperty("PDCP-Packet-Delay")
     public PDCPPacketDelay getPdcpPackDelay() {
         return pdcpPackDelay;
     }
 
+    @JsonProperty("PDCP-Packet-Delay")
     public void setPdcpPackDelay(PDCPPacketDelay pdcpPackDelay) {
         this.pdcpPackDelay = pdcpPackDelay;
     }
 
+    @JsonProperty("Resource-Usage")
     public ResourceUsage getResourceUsage() {
         return resourceUsage;
     }
 
+    @JsonProperty("Resource-Usage")
     public void setResourceUsage(ResourceUsage resourceUsage) {
         this.resourceUsage = resourceUsage;
     }
 
     @Override
     public String toString() {
-        StringBuilder sb = new StringBuilder();
-        sb.append("{\n")
-                .append(linkId != null ? "\"link-id\":" + linkId : "")
-                .append(type != null ? ",\n\"type\":" + type : "")
-                .append(rrmParameters != null ? ",\n\"rrm-params\":" + rrmParameters : "")
-                .append(trafficPercent != null ? ",\n\"traffic-percent\":" + trafficPercent : "")
-                .append(bearerParameters != null ? ",\n\"bearer-params\":" + bearerParameters : "")
-                .append(quality != null ? ",\n\"quality\":" + quality : "")
-                .append(pdcpThroughput != null ? ",\n\"pdcp-throughput\":" + pdcpThroughput : "")
-                .append(pdcpPackDelay != null ? ",\n\"pdcp-packet-delay\":" + pdcpPackDelay : "")
-                .append(resourceUsage != null ? ",\n\"resource-usage\":" + resourceUsage : "")
-                .append("\n}\n");
-        return sb.toString();
+        return "RnibLink{" +
+                "linkId=" + linkId +
+                ", rrmParameters=" + rrmParameters +
+                ", trafficPercent=" + trafficPercent +
+                ", bearerParameters=" + bearerParameters +
+                ", quality=" + quality +
+                ", pdcpThroughput=" + pdcpThroughput +
+                ", pdcpPackDelay=" + pdcpPackDelay +
+                ", resourceUsage=" + resourceUsage +
+                ", type=" + type +
+                ", timer=" + timer +
+                '}';
     }
 
     @Override
@@ -288,6 +325,11 @@
         }
     }
 
+    @JsonPropertyOrder({
+            "dl",
+            "ul"
+    })
+    @JsonIgnoreProperties(ignoreUnknown = true)
     public class PDCPThroughput {
         private PDCPMeasReportPerUe.ThroughputDl dl;
         private PDCPMeasReportPerUe.ThroughputUl ul;
@@ -310,15 +352,18 @@
 
         @Override
         public String toString() {
-            StringBuilder sb = new StringBuilder();
-            sb.append("{\n")
-                    .append(dl != null ? "\"dl\":" + dl : "")
-                    .append(ul != null ? ",\n\"ul\":" + ul : "")
-                    .append("\n}\n");
-            return sb.toString();
+            return "PDCPThroughput{" +
+                    "dl=" + dl +
+                    ", ul=" + ul +
+                    '}';
         }
     }
 
+    @JsonPropertyOrder({
+            "dl",
+            "ul"
+    })
+    @JsonIgnoreProperties(ignoreUnknown = true)
     public class PDCPPacketDelay {
         PDCPMeasReportPerUe.PktDelayDl dl;
         PDCPMeasReportPerUe.PktDelayUl ul;
@@ -341,15 +386,18 @@
 
         @Override
         public String toString() {
-            StringBuilder sb = new StringBuilder();
-            sb.append("{\n")
-                    .append(dl != null ? "\"dl\":" + dl : "")
-                    .append(ul != null ? ",\n\"ul\":" + ul : "")
-                    .append("\n}\n");
-            return sb.toString();
+            return "PDCPPacketDelay{" +
+                    "dl=" + dl +
+                    ", ul=" + ul +
+                    '}';
         }
     }
 
+    @JsonPropertyOrder({
+            "dl",
+            "ul"
+    })
+    @JsonIgnoreProperties(ignoreUnknown = true)
     public class ResourceUsage {
         PRBUsage.PrbUsageDl dl;
         PRBUsage.PrbUsageUl ul;
@@ -372,23 +420,31 @@
 
         @Override
         public String toString() {
-            StringBuilder sb = new StringBuilder();
-            sb.append("{\n")
-                    .append(dl != null ? "\"dl\":" + dl : "")
-                    .append(ul != null ? ",\n\"ul\":" + ul : "")
-                    .append("\n}\n");
-            return sb.toString();
+            return "ResourceUsage{" +
+                    "dl=" + dl +
+                    ", ul=" + ul +
+                    '}';
         }
     }
 
+    @JsonPropertyOrder({
+            "rsrp",
+            "rsrq",
+            "cqiHist",
+            "cqiMode",
+            "cqiMean",
+            "mcsDl",
+            "mcsUl"
+    })
+    @JsonIgnoreProperties(ignoreUnknown = true)
     public class LinkQuality {
         double rsrp;
         double rsrq;
         RadioRepPerServCell.CqiHist cqiHist;
         double cqiMode;
         double cqiMean;
-        SchedMeasRepPerServCell.McsDl mcs_dl;
-        SchedMeasRepPerServCell.McsUl mcs_ul;
+        SchedMeasRepPerServCell.McsDl mcsDl;
+        SchedMeasRepPerServCell.McsUl mcsUl;
 
         public double getRsrp() {
             return rsrp;
@@ -430,34 +486,33 @@
             this.cqiMean = cqiMean;
         }
 
-        public SchedMeasRepPerServCell.McsDl getMcs_dl() {
-            return mcs_dl;
+        public SchedMeasRepPerServCell.McsDl getMcsDl() {
+            return mcsDl;
         }
 
-        public void setMcs_dl(SchedMeasRepPerServCell.McsDl mcs_dl) {
-            this.mcs_dl = mcs_dl;
+        public void setMcsDl(SchedMeasRepPerServCell.McsDl mcsDl) {
+            this.mcsDl = mcsDl;
         }
 
-        public SchedMeasRepPerServCell.McsUl getMcs_ul() {
-            return mcs_ul;
+        public SchedMeasRepPerServCell.McsUl getMcsUl() {
+            return mcsUl;
         }
 
-        public void setMcs_ul(SchedMeasRepPerServCell.McsUl mcs_ul) {
-            this.mcs_ul = mcs_ul;
+        public void setMcsUl(SchedMeasRepPerServCell.McsUl mcsUl) {
+            this.mcsUl = mcsUl;
         }
 
         @Override
         public String toString() {
-            StringBuilder sb = new StringBuilder();
-            sb.append("{\n")
-                    .append("\"rsrp\":" + rsrp)
-                    .append(",\n\"rsrq\":" + rsrq)
-                    .append(",\n\"cqiMode\":" + cqiMode)
-                    .append(",\n\"cqiMean\":" + cqiMean)
-                    .append(mcs_dl != null ? ",\n\"mcs-dl\":" + mcs_dl : "")
-                    .append(mcs_ul != null ? ",\n\"mcs-ul\":" + mcs_ul : "")
-                    .append("\n}\n");
-            return sb.toString();
+            return "LinkQuality{" +
+                    "rsrp=" + rsrp +
+                    ", rsrq=" + rsrq +
+                    ", cqiHist=" + cqiHist +
+                    ", cqiMode=" + cqiMode +
+                    ", cqiMean=" + cqiMean +
+                    ", mcsDl=" + mcsDl +
+                    ", mcsUl=" + mcsUl +
+                    '}';
         }
     }
 }
diff --git a/src/main/java/org.onosproject.xran/entities/RnibSlice.java b/src/main/java/org.onosproject.xran/entities/RnibSlice.java
index 349e8ee..92e1d98 100644
--- a/src/main/java/org.onosproject.xran/entities/RnibSlice.java
+++ b/src/main/java/org.onosproject.xran/entities/RnibSlice.java
@@ -16,12 +16,15 @@
 
 package org.onosproject.xran.entities;
 
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+
 import java.util.Map;
 import java.util.Set;
 
 /**
  * Created by dimitris on 7/22/17.
  */
+@JsonIgnoreProperties(ignoreUnknown = true)
 public class RnibSlice {
     private long sliceId;
     private Set<RnibLink> links;
diff --git a/src/main/java/org.onosproject.xran/entities/RnibUe.java b/src/main/java/org.onosproject.xran/entities/RnibUe.java
index b58e77e..fb5bb71 100644
--- a/src/main/java/org.onosproject.xran/entities/RnibUe.java
+++ b/src/main/java/org.onosproject.xran/entities/RnibUe.java
@@ -16,6 +16,10 @@
 
 package org.onosproject.xran.entities;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
 import org.onlab.packet.MacAddress;
 import org.onosproject.net.HostId;
 import org.onosproject.xran.codecs.api.CRNTI;
@@ -37,20 +41,38 @@
 /**
  * Created by dimitris on 7/22/17.
  */
+@JsonPropertyOrder({
+        "IMSI",
+        "ENBUES1APID",
+        "MMEUES1APID",
+        "CRNTI",
+        "State",
+        "Capability",
+        "MeasurementConfiguration"
+})
+@JsonIgnoreProperties(ignoreUnknown = true)
 public class RnibUe {
-
+    @JsonIgnore
     private static final String SCHEME = "xran";
-
+    @JsonIgnore
     private static final Logger log =
             LoggerFactory.getLogger(RnibUe.class);
 
+    @JsonProperty("IMSI")
     private String imsi;
+    @JsonProperty("ENBUES1APID")
     private ENBUES1APID enbS1apId;
+    @JsonProperty("MMEUES1APID")
     private MMEUES1APID mmeS1apId;
+    @JsonProperty("CRNTI")
     private CRNTI ranId;
+    @JsonProperty("State")
     private State state;
+    @JsonProperty("Capability")
     private UECapabilityInfo capability;
+    @JsonProperty("MeasurementConfiguration")
     private RXSigMeasConfig measConfig;
+    @JsonIgnore
     private Timer timer;
 
     public RnibUe() {
@@ -77,48 +99,59 @@
         return new MMEUES1APID(l);
     }
 
+    @JsonIgnore
     public Timer getTimer() {
         return timer;
     }
 
+    @JsonIgnore
     public void setTimer(Timer timer) {
         this.timer.cancel();
         this.timer.purge();
         this.timer = timer;
     }
 
+    @JsonProperty("MMEUES1APID")
     public MMEUES1APID getMmeS1apId() {
         return mmeS1apId;
     }
 
+    @JsonProperty("MMEUES1APID")
     public void setMmeS1apId(MMEUES1APID mmeS1apId) {
         this.mmeS1apId = mmeS1apId;
     }
 
+    @JsonProperty("ENBUES1APID")
     public ENBUES1APID getEnbS1apId() {
         return enbS1apId;
     }
 
+    @JsonProperty("ENBUES1APID")
     public void setEnbS1apId(ENBUES1APID enbS1apId) {
         this.enbS1apId = enbS1apId;
     }
 
+    @JsonProperty("CRNTI")
     public CRNTI getRanId() {
         return ranId;
     }
 
+    @JsonProperty("CRNTI")
     public void setRanId(CRNTI ranId) {
         this.ranId = ranId;
     }
 
+    @JsonProperty("IMSI")
     public String getImsi() {
         return imsi;
     }
 
+    @JsonProperty("IMSI")
     public void setImsi(String imsi) {
         this.imsi = imsi;
     }
 
+    @JsonIgnore
     public HostId getHostId() {
         try {
             String text = this.mmeS1apId.value.toString(16),
@@ -157,44 +190,48 @@
         return null;
     }
 
-
+    @JsonProperty("MeasurementConfiguration")
     public RXSigMeasConfig getMeasConfig() {
         return measConfig;
     }
 
+    @JsonProperty("MeasurementConfiguration")
     public void setMeasConfig(RXSigMeasConfig measConfig) {
         this.measConfig = measConfig;
     }
 
+    @JsonProperty("Capability")
     public UECapabilityInfo getCapability() {
         return capability;
     }
 
+    @JsonProperty("Capability")
     public void setCapability(UECapabilityInfo capability) {
         this.capability = capability;
     }
 
+    @JsonProperty("State")
     public State getState() {
         return state;
     }
 
+    @JsonProperty("State")
     public void setState(State state) {
         this.state = state;
     }
 
     @Override
     public String toString() {
-        StringBuilder sb = new StringBuilder();
-        sb.append("{\n")
-                .append(mmeS1apId != null ? "\n\"mme-s1-ap-id\":" + mmeS1apId : "")
-                .append(enbS1apId != null ? ",\n\"enb-s1-ap-id\":" + enbS1apId : "")
-                .append(imsi != null ? ",\"imsi\":" + imsi : "")
-                .append(ranId != null ? ",\n\"ran-id\":" + ranId : "")
-                .append(state != null ? ",\n\"state\":" + state : "")
-                .append(capability != null ? ",\n\"capability\":" + capability : "")
-                .append(measConfig != null ? ",\n\"meas-config\":" + measConfig : "")
-                .append("\n}\n");
-        return sb.toString();
+        return "RnibUe{" +
+                "imsi='" + imsi + '\'' +
+                ", enbS1apId=" + enbS1apId +
+                ", mmeS1apId=" + mmeS1apId +
+                ", ranId=" + ranId +
+                ", state=" + state +
+                ", capability=" + capability +
+                ", measConfig=" + measConfig +
+                ", timer=" + timer +
+                '}';
     }
 
     @Override
