jackson, HTTP codes and JSON responses, xICIC/RRMConfig fix
diff --git a/src/main/java/org.onosproject.xran/XranStore.java b/src/main/java/org.onosproject.xran/XranStore.java
index 081f51e..eb5dfc6 100644
--- a/src/main/java/org.onosproject.xran/XranStore.java
+++ b/src/main/java/org.onosproject.xran/XranStore.java
@@ -59,9 +59,9 @@
 
     List<Object> getNodes();
 
-    List<RnibCell> getCellNodes();
+    List<Object> getCellNodes();
 
-    List<RnibUe> getUeNodes();
+    List<Object> getUeNodes();
 
     Object getByNodeId(String nodeId);
 
diff --git a/src/main/java/org.onosproject.xran/codecs/api/ARFCNValue.java b/src/main/java/org.onosproject.xran/codecs/api/ARFCNValue.java
index cffdb07..acdd791 100644
--- a/src/main/java/org.onosproject.xran/codecs/api/ARFCNValue.java
+++ b/src/main/java/org.onosproject.xran/codecs/api/ARFCNValue.java
@@ -4,41 +4,40 @@
 
 package org.onosproject.xran.codecs.api;
 
-import org.openmuc.jasn1.ber.types.BerInteger;
+import org.onosproject.xran.codecs.ber.types.BerInteger;
 
 import java.math.BigInteger;
-import java.util.Arrays;
 
 
 public class ARFCNValue extends BerInteger {
 
-	private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 1L;
 
-	public ARFCNValue() {
-	}
+    public ARFCNValue() {
+    }
 
-	public ARFCNValue(byte[] code) {
-		super(code);
-	}
+    public ARFCNValue(byte[] code) {
+        super(code);
+    }
 
-	public ARFCNValue(BigInteger value) {
-		super(value);
-	}
+    public ARFCNValue(BigInteger value) {
+        super(value);
+    }
 
-	public ARFCNValue(long value) {
-		super(value);
-	}
+    public ARFCNValue(long value) {
+        super(value);
+    }
 
-	@Override
-	public int hashCode() {
-		return value.intValue();
-	}
+    @Override
+    public int hashCode() {
+        return value.intValue();
+    }
 
-	@Override
-	public boolean equals(Object obj) {
-		if (obj instanceof ARFCNValue) {
-			return value.intValue() == ((ARFCNValue) obj).value.intValue();
-		}
-		return super.equals(obj);
-	}
+    @Override
+    public boolean equals(Object obj) {
+        if (obj instanceof ARFCNValue) {
+            return value.intValue() == ((ARFCNValue) obj).value.intValue();
+        }
+        return super.equals(obj);
+    }
 }
diff --git a/src/main/java/org.onosproject.xran/codecs/api/AdmEstCause.java b/src/main/java/org.onosproject.xran/codecs/api/AdmEstCause.java
index e344fc5..7d1ffcf 100644
--- a/src/main/java/org.onosproject.xran/codecs/api/AdmEstCause.java
+++ b/src/main/java/org.onosproject.xran/codecs/api/AdmEstCause.java
@@ -4,7 +4,7 @@
 
 package org.onosproject.xran.codecs.api;
 
-import org.openmuc.jasn1.ber.types.BerEnum;
+import org.onosproject.xran.codecs.ber.types.BerEnum;
 
 import java.math.BigInteger;
 
diff --git a/src/main/java/org.onosproject.xran/codecs/api/AdmEstResponse.java b/src/main/java/org.onosproject.xran/codecs/api/AdmEstResponse.java
index 388b64e..f594b70 100644
--- a/src/main/java/org.onosproject.xran/codecs/api/AdmEstResponse.java
+++ b/src/main/java/org.onosproject.xran/codecs/api/AdmEstResponse.java
@@ -13,9 +13,9 @@
 import java.io.UnsupportedEncodingException;
 import java.math.BigInteger;
 import java.io.Serializable;
-import org.openmuc.jasn1.ber.*;
-import org.openmuc.jasn1.ber.types.*;
-import org.openmuc.jasn1.ber.types.string.*;
+import org.onosproject.xran.codecs.ber.*;
+import org.onosproject.xran.codecs.ber.types.*;
+import org.onosproject.xran.codecs.ber.types.string.*;
 
 
 public class AdmEstResponse extends BerEnum {
diff --git a/src/main/java/org.onosproject.xran/codecs/api/AdmEstStatus.java b/src/main/java/org.onosproject.xran/codecs/api/AdmEstStatus.java
index 68680a6..039e5e3 100644
--- a/src/main/java/org.onosproject.xran/codecs/api/AdmEstStatus.java
+++ b/src/main/java/org.onosproject.xran/codecs/api/AdmEstStatus.java
@@ -13,9 +13,9 @@
 import java.io.UnsupportedEncodingException;
 import java.math.BigInteger;
 import java.io.Serializable;
-import org.openmuc.jasn1.ber.*;
-import org.openmuc.jasn1.ber.types.*;
-import org.openmuc.jasn1.ber.types.string.*;
+import org.onosproject.xran.codecs.ber.*;
+import org.onosproject.xran.codecs.ber.types.*;
+import org.onosproject.xran.codecs.ber.types.string.*;
 
 
 public class AdmEstStatus extends BerEnum {
diff --git a/src/main/java/org.onosproject.xran/codecs/api/BitRate.java b/src/main/java/org.onosproject.xran/codecs/api/BitRate.java
index 7b0b49d..9dd16ec 100644
--- a/src/main/java/org.onosproject.xran/codecs/api/BitRate.java
+++ b/src/main/java/org.onosproject.xran/codecs/api/BitRate.java
@@ -13,9 +13,9 @@
 import java.io.UnsupportedEncodingException;
 import java.math.BigInteger;
 import java.io.Serializable;
-import org.openmuc.jasn1.ber.*;
-import org.openmuc.jasn1.ber.types.*;
-import org.openmuc.jasn1.ber.types.string.*;
+import org.onosproject.xran.codecs.ber.*;
+import org.onosproject.xran.codecs.ber.types.*;
+import org.onosproject.xran.codecs.ber.types.string.*;
 
 
 public class BitRate extends BerInteger {
diff --git a/src/main/java/org.onosproject.xran/codecs/api/CACap.java b/src/main/java/org.onosproject.xran/codecs/api/CACap.java
index cd2ef5c..4642978 100644
--- a/src/main/java/org.onosproject.xran/codecs/api/CACap.java
+++ b/src/main/java/org.onosproject.xran/codecs/api/CACap.java
@@ -4,12 +4,13 @@
 
 package org.onosproject.xran.codecs.api;
 
-import org.openmuc.jasn1.ber.BerByteArrayOutputStream;
-import org.openmuc.jasn1.ber.BerLength;
-import org.openmuc.jasn1.ber.BerTag;
-import org.openmuc.jasn1.ber.types.BerBoolean;
-import org.openmuc.jasn1.ber.types.BerEnum;
-import org.openmuc.jasn1.ber.types.BerInteger;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
+import org.onosproject.xran.codecs.ber.types.BerBoolean;
+import org.onosproject.xran.codecs.ber.types.BerEnum;
+import org.onosproject.xran.codecs.ber.types.BerInteger;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -22,6 +23,7 @@
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
 
+	@JsonIgnore
 	public byte[] code = null;
 	private BerInteger band = null;
 	private BerEnum caclassdl = null;
@@ -193,7 +195,7 @@
 			sb.append("\t");
 		}
 		if (band != null) {
-			sb.append("\"band\":").append(band);
+			sb.append("band:").append(band);
 		}
 		
 		sb.append(",\n");
@@ -201,7 +203,7 @@
 			sb.append("\t");
 		}
 		if (caclassdl != null) {
-			sb.append("\"caclassdl\":").append(caclassdl);
+			sb.append("caclassdl:").append(caclassdl);
 		}
 		
 		sb.append(",\n");
@@ -209,7 +211,7 @@
 			sb.append("\t");
 		}
 		if (caclassul != null) {
-			sb.append("\"caclassul\":").append(caclassul);
+			sb.append("caclassul:").append(caclassul);
 		}
 		
 		sb.append(",\n");
@@ -217,7 +219,7 @@
 			sb.append("\t");
 		}
 		if (crossCarrierSched != null) {
-			sb.append("\"crossCarrierSched\":").append(crossCarrierSched);
+			sb.append("crossCarrierSched:").append(crossCarrierSched);
 		}
 		
 		sb.append("\n");
diff --git a/src/main/java/org.onosproject.xran/codecs/api/CRNTI.java b/src/main/java/org.onosproject.xran/codecs/api/CRNTI.java
index 69d5f48..38f893b 100644
--- a/src/main/java/org.onosproject.xran/codecs/api/CRNTI.java
+++ b/src/main/java/org.onosproject.xran/codecs/api/CRNTI.java
@@ -14,9 +14,9 @@
 import java.io.UnsupportedEncodingException;
 import java.math.BigInteger;
 import java.io.Serializable;
-import org.openmuc.jasn1.ber.*;
-import org.openmuc.jasn1.ber.types.*;
-import org.openmuc.jasn1.ber.types.string.*;
+import org.onosproject.xran.codecs.ber.*;
+import org.onosproject.xran.codecs.ber.types.*;
+import org.onosproject.xran.codecs.ber.types.string.*;
 
 import javax.xml.bind.DatatypeConverter;
 
@@ -51,6 +51,6 @@
 
 	@Override
 	public String toString() {
-		return "\"" + DatatypeConverter.printHexBinary(value) + "\"";
+		return "" + DatatypeConverter.printHexBinary(value) + "";
 	}
 }
diff --git a/src/main/java/org.onosproject.xran/codecs/api/CandScell.java b/src/main/java/org.onosproject.xran/codecs/api/CandScell.java
index 7b954d0..2113691 100644
--- a/src/main/java/org.onosproject.xran/codecs/api/CandScell.java
+++ b/src/main/java/org.onosproject.xran/codecs/api/CandScell.java
@@ -4,9 +4,10 @@
 
 package org.onosproject.xran.codecs.api;
 
-import org.openmuc.jasn1.ber.BerByteArrayOutputStream;
-import org.openmuc.jasn1.ber.BerLength;
-import org.openmuc.jasn1.ber.BerTag;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -19,6 +20,7 @@
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
 
+	@JsonIgnore
 	public byte[] code = null;
 	private PhysCellId pci = null;
 	private ARFCNValue earfcnDl = null;
@@ -144,7 +146,7 @@
 			sb.append("\t");
 		}
 		if (pci != null) {
-			sb.append("\"pci\": ").append(pci);
+			sb.append("pci: ").append(pci);
 		}
 		
 		sb.append(",\n");
@@ -152,7 +154,7 @@
 			sb.append("\t");
 		}
 		if (earfcnDl != null) {
-			sb.append("\"earfcnDl\": ").append(earfcnDl);
+			sb.append("earfcnDl: ").append(earfcnDl);
 		}
 		sb.append("\n");
 		for (int i = 0; i < indentLevel; i++) {
diff --git a/src/main/java/org.onosproject.xran/codecs/api/DCCap.java b/src/main/java/org.onosproject.xran/codecs/api/DCCap.java
index f3f7c61..ea75cfb 100644
--- a/src/main/java/org.onosproject.xran/codecs/api/DCCap.java
+++ b/src/main/java/org.onosproject.xran/codecs/api/DCCap.java
@@ -4,10 +4,11 @@
 
 package org.onosproject.xran.codecs.api;
 
-import org.openmuc.jasn1.ber.BerByteArrayOutputStream;
-import org.openmuc.jasn1.ber.BerLength;
-import org.openmuc.jasn1.ber.BerTag;
-import org.openmuc.jasn1.ber.types.BerEnum;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
+import org.onosproject.xran.codecs.ber.types.BerEnum;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -20,6 +21,7 @@
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
 
+	@JsonIgnore
 	public byte[] code = null;
 	private BerEnum drbTypeSplit = null;
 	
@@ -122,7 +124,7 @@
 			sb.append("\t");
 		}
 		if (drbTypeSplit != null) {
-			sb.append("\"drbTypeSplit\": ").append(drbTypeSplit);
+			sb.append("drbTypeSplit: ").append(drbTypeSplit);
 		}
 		
 		sb.append("\n");
diff --git a/src/main/java/org.onosproject.xran/codecs/api/DuplexMode.java b/src/main/java/org.onosproject.xran/codecs/api/DuplexMode.java
index cfbd191..ae2d40c 100644
--- a/src/main/java/org.onosproject.xran/codecs/api/DuplexMode.java
+++ b/src/main/java/org.onosproject.xran/codecs/api/DuplexMode.java
@@ -4,7 +4,7 @@
 
 package org.onosproject.xran.codecs.api;
 
-import org.openmuc.jasn1.ber.types.BerEnum;
+import org.onosproject.xran.codecs.ber.types.BerEnum;
 
 import java.math.BigInteger;
 
diff --git a/src/main/java/org.onosproject.xran/codecs/api/ECGI.java b/src/main/java/org.onosproject.xran/codecs/api/ECGI.java
index 01789f2..c903fd6 100644
--- a/src/main/java/org.onosproject.xran/codecs/api/ECGI.java
+++ b/src/main/java/org.onosproject.xran/codecs/api/ECGI.java
@@ -4,9 +4,10 @@
 
 package org.onosproject.xran.codecs.api;
 
-import org.openmuc.jasn1.ber.BerByteArrayOutputStream;
-import org.openmuc.jasn1.ber.BerLength;
-import org.openmuc.jasn1.ber.BerTag;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -19,6 +20,7 @@
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
 
+	@JsonIgnore
 	public byte[] code = null;
 	private PLMNIdentity pLMNIdentity = null;
 	private EUTRANCellIdentifier eUTRANcellIdentifier = null;
@@ -144,7 +146,7 @@
 			sb.append("\t");
 		}
 		if (pLMNIdentity != null) {
-			sb.append("\"pLMNIdentity\": ").append(pLMNIdentity);
+			sb.append("pLMNIdentity: ").append(pLMNIdentity);
 		}
 		
 		sb.append(",\n");
@@ -152,7 +154,7 @@
 			sb.append("\t");
 		}
 		if (eUTRANcellIdentifier != null) {
-			sb.append("\"eUTRANcellIdentifier\": ").append(eUTRANcellIdentifier);
+			sb.append("eUTRANcellIdentifier: ").append(eUTRANcellIdentifier);
 		}
 		
 		sb.append("\n");
diff --git a/src/main/java/org.onosproject.xran/codecs/api/ENBUES1APID.java b/src/main/java/org.onosproject.xran/codecs/api/ENBUES1APID.java
index 2bb7c15..61a9aba 100644
--- a/src/main/java/org.onosproject.xran/codecs/api/ENBUES1APID.java
+++ b/src/main/java/org.onosproject.xran/codecs/api/ENBUES1APID.java
@@ -13,9 +13,9 @@
 import java.io.UnsupportedEncodingException;
 import java.math.BigInteger;
 import java.io.Serializable;
-import org.openmuc.jasn1.ber.*;
-import org.openmuc.jasn1.ber.types.*;
-import org.openmuc.jasn1.ber.types.string.*;
+import org.onosproject.xran.codecs.ber.*;
+import org.onosproject.xran.codecs.ber.types.*;
+import org.onosproject.xran.codecs.ber.types.string.*;
 
 
 public class ENBUES1APID extends BerInteger {
diff --git a/src/main/java/org.onosproject.xran/codecs/api/ERABDecision.java b/src/main/java/org.onosproject.xran/codecs/api/ERABDecision.java
index 7d50dc7..fb70c38 100644
--- a/src/main/java/org.onosproject.xran/codecs/api/ERABDecision.java
+++ b/src/main/java/org.onosproject.xran/codecs/api/ERABDecision.java
@@ -13,9 +13,9 @@
 import java.io.UnsupportedEncodingException;
 import java.math.BigInteger;
 import java.io.Serializable;
-import org.openmuc.jasn1.ber.*;
-import org.openmuc.jasn1.ber.types.*;
-import org.openmuc.jasn1.ber.types.string.*;
+import org.onosproject.xran.codecs.ber.*;
+import org.onosproject.xran.codecs.ber.types.*;
+import org.onosproject.xran.codecs.ber.types.string.*;
 
 
 public class ERABDecision extends BerEnum {
diff --git a/src/main/java/org.onosproject.xran/codecs/api/ERABDirection.java b/src/main/java/org.onosproject.xran/codecs/api/ERABDirection.java
index d29502c..332953a 100644
--- a/src/main/java/org.onosproject.xran/codecs/api/ERABDirection.java
+++ b/src/main/java/org.onosproject.xran/codecs/api/ERABDirection.java
@@ -13,9 +13,9 @@
 import java.io.UnsupportedEncodingException;
 import java.math.BigInteger;
 import java.io.Serializable;
-import org.openmuc.jasn1.ber.*;
-import org.openmuc.jasn1.ber.types.*;
-import org.openmuc.jasn1.ber.types.string.*;
+import org.onosproject.xran.codecs.ber.*;
+import org.onosproject.xran.codecs.ber.types.*;
+import org.onosproject.xran.codecs.ber.types.string.*;
 
 
 public class ERABDirection extends BerEnum {
diff --git a/src/main/java/org.onosproject.xran/codecs/api/ERABID.java b/src/main/java/org.onosproject.xran/codecs/api/ERABID.java
index 92875c8..907243a 100644
--- a/src/main/java/org.onosproject.xran/codecs/api/ERABID.java
+++ b/src/main/java/org.onosproject.xran/codecs/api/ERABID.java
@@ -13,9 +13,9 @@
 import java.io.UnsupportedEncodingException;
 import java.math.BigInteger;
 import java.io.Serializable;
-import org.openmuc.jasn1.ber.*;
-import org.openmuc.jasn1.ber.types.*;
-import org.openmuc.jasn1.ber.types.string.*;
+import org.onosproject.xran.codecs.ber.*;
+import org.onosproject.xran.codecs.ber.types.*;
+import org.onosproject.xran.codecs.ber.types.string.*;
 
 
 public class ERABID extends BerInteger {
diff --git a/src/main/java/org.onosproject.xran/codecs/api/ERABParams.java b/src/main/java/org.onosproject.xran/codecs/api/ERABParams.java
index 237c5d9..fafd02d 100644
--- a/src/main/java/org.onosproject.xran/codecs/api/ERABParams.java
+++ b/src/main/java/org.onosproject.xran/codecs/api/ERABParams.java
@@ -13,9 +13,12 @@
 import java.io.UnsupportedEncodingException;
 import java.math.BigInteger;
 import java.io.Serializable;
-import org.openmuc.jasn1.ber.*;
-import org.openmuc.jasn1.ber.types.*;
-import org.openmuc.jasn1.ber.types.string.*;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.onosproject.xran.codecs.ber.*;
+import org.onosproject.xran.codecs.ber.types.*;
+import org.onosproject.xran.codecs.ber.types.string.*;
 
 
 public class ERABParams implements Serializable {
@@ -23,6 +26,7 @@
 	private static final long serialVersionUID = 1L;
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
+	@JsonIgnore
 	public byte[] code = null;
 	private List<ERABParamsItem> seqOf = null;
 
@@ -34,6 +38,7 @@
 		this.code = code;
 	}
 
+	@JsonValue
 	public List<ERABParamsItem> getERABParamsItem() {
 		if (seqOf == null) {
 			seqOf = new ArrayList<ERABParamsItem>();
diff --git a/src/main/java/org.onosproject.xran/codecs/api/ERABParamsItem.java b/src/main/java/org.onosproject.xran/codecs/api/ERABParamsItem.java
index 9db7698..d36acb0 100644
--- a/src/main/java/org.onosproject.xran/codecs/api/ERABParamsItem.java
+++ b/src/main/java/org.onosproject.xran/codecs/api/ERABParamsItem.java
@@ -13,9 +13,11 @@
 import java.io.UnsupportedEncodingException;
 import java.math.BigInteger;
 import java.io.Serializable;
-import org.openmuc.jasn1.ber.*;
-import org.openmuc.jasn1.ber.types.*;
-import org.openmuc.jasn1.ber.types.string.*;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import org.onosproject.xran.codecs.ber.*;
+import org.onosproject.xran.codecs.ber.types.*;
+import org.onosproject.xran.codecs.ber.types.string.*;
 
 
 public class ERABParamsItem implements Serializable {
@@ -24,6 +26,7 @@
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
 
+	@JsonIgnore
 	public byte[] code = null;
 	private ERABID id = null;
 	private ERABDirection direction = null;
@@ -310,21 +313,21 @@
 			sb.append("\t");
 		}
 		if (id != null) {
-			sb.append("\"id\": ").append(id);
+			sb.append("id: ").append(id);
 		}
 		sb.append(",\n");
 		for (int i = 0; i < indentLevel + 1; i++) {
 			sb.append("\t");
 		}
 		if (direction != null) {
-			sb.append("\"direction\": ").append(direction);
+			sb.append("direction: ").append(direction);
 		}
 		sb.append(",\n");
 		for (int i = 0; i < indentLevel + 1; i++) {
 			sb.append("\t");
 		}
 		if (type != null) {
-			sb.append("\"type\": ").append(type);
+			sb.append("type: ").append(type);
 		}
 		
 		sb.append(",\n");
@@ -332,7 +335,7 @@
 			sb.append("\t");
 		}
 		if (qci != null) {
-			sb.append("\"qci\": ").append(qci);
+			sb.append("qci: ").append(qci);
 		}
 		
 		sb.append(",\n");
@@ -340,7 +343,7 @@
 			sb.append("\t");
 		}
 		if (arp != null) {
-			sb.append("\"arp\": ").append(arp);
+			sb.append("arp: ").append(arp);
 		}
 		
 		sb.append(",\n");
@@ -348,7 +351,7 @@
 			sb.append("\t");
 		}
 		if (gbrDl != null) {
-			sb.append("\"gbrDl\": ").append(gbrDl);
+			sb.append("gbrDl: ").append(gbrDl);
 		}
 		
 		sb.append(",\n");
@@ -356,7 +359,7 @@
 			sb.append("\t");
 		}
 		if (gbrUl != null) {
-			sb.append("\"gbrUl\": ").append(gbrUl);
+			sb.append("gbrUl: ").append(gbrUl);
 		}
 		
 		sb.append(",\n");
@@ -364,7 +367,7 @@
 			sb.append("\t");
 		}
 		if (mbrDl != null) {
-			sb.append("\"mbrDl\": ").append(mbrDl);
+			sb.append("mbrDl: ").append(mbrDl);
 		}
 		
 		sb.append(",\n");
@@ -372,7 +375,7 @@
 			sb.append("\t");
 		}
 		if (mbrUl != null) {
-			sb.append("\"mbrUl\": ").append(mbrUl);
+			sb.append("mbrUl: ").append(mbrUl);
 		}
 		
 		sb.append("\n");
diff --git a/src/main/java/org.onosproject.xran/codecs/api/ERABResponse.java b/src/main/java/org.onosproject.xran/codecs/api/ERABResponse.java
index fdf66fa..eaff5a9 100644
--- a/src/main/java/org.onosproject.xran/codecs/api/ERABResponse.java
+++ b/src/main/java/org.onosproject.xran/codecs/api/ERABResponse.java
@@ -13,9 +13,12 @@
 import java.io.UnsupportedEncodingException;
 import java.math.BigInteger;
 import java.io.Serializable;
-import org.openmuc.jasn1.ber.*;
-import org.openmuc.jasn1.ber.types.*;
-import org.openmuc.jasn1.ber.types.string.*;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.onosproject.xran.codecs.ber.*;
+import org.onosproject.xran.codecs.ber.types.*;
+import org.onosproject.xran.codecs.ber.types.string.*;
 
 
 public class ERABResponse implements Serializable {
@@ -23,6 +26,7 @@
 	private static final long serialVersionUID = 1L;
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
+	@JsonIgnore
 	public byte[] code = null;
 	private List<ERABResponseItem> seqOf = null;
 
@@ -34,6 +38,7 @@
 		this.code = code;
 	}
 
+	@JsonValue
 	public List<ERABResponseItem> getERABResponseItem() {
 		if (seqOf == null) {
 			seqOf = new ArrayList<ERABResponseItem>();
diff --git a/src/main/java/org.onosproject.xran/codecs/api/ERABResponseItem.java b/src/main/java/org.onosproject.xran/codecs/api/ERABResponseItem.java
index 7608bed..db5181d 100644
--- a/src/main/java/org.onosproject.xran/codecs/api/ERABResponseItem.java
+++ b/src/main/java/org.onosproject.xran/codecs/api/ERABResponseItem.java
@@ -13,9 +13,11 @@
 import java.io.UnsupportedEncodingException;
 import java.math.BigInteger;
 import java.io.Serializable;
-import org.openmuc.jasn1.ber.*;
-import org.openmuc.jasn1.ber.types.*;
-import org.openmuc.jasn1.ber.types.string.*;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import org.onosproject.xran.codecs.ber.*;
+import org.onosproject.xran.codecs.ber.types.*;
+import org.onosproject.xran.codecs.ber.types.string.*;
 
 
 public class ERABResponseItem implements Serializable {
@@ -24,6 +26,7 @@
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
 
+	@JsonIgnore
 	public byte[] code = null;
 	private ERABID id = null;
 	private ERABDecision decision = null;
@@ -149,7 +152,7 @@
 			sb.append("\t");
 		}
 		if (id != null) {
-			sb.append("\"id\": ").append(id);
+			sb.append("id: ").append(id);
 		}
 		
 		sb.append(",\n");
@@ -157,7 +160,7 @@
 			sb.append("\t");
 		}
 		if (decision != null) {
-			sb.append("\"decision\": ").append(decision);
+			sb.append("decision: ").append(decision);
 		}
 		
 		sb.append("\n");
diff --git a/src/main/java/org.onosproject.xran/codecs/api/ERABType.java b/src/main/java/org.onosproject.xran/codecs/api/ERABType.java
index 9f2449c..7d95c98 100644
--- a/src/main/java/org.onosproject.xran/codecs/api/ERABType.java
+++ b/src/main/java/org.onosproject.xran/codecs/api/ERABType.java
@@ -13,9 +13,9 @@
 import java.io.UnsupportedEncodingException;
 import java.math.BigInteger;
 import java.io.Serializable;
-import org.openmuc.jasn1.ber.*;
-import org.openmuc.jasn1.ber.types.*;
-import org.openmuc.jasn1.ber.types.string.*;
+import org.onosproject.xran.codecs.ber.*;
+import org.onosproject.xran.codecs.ber.types.*;
+import org.onosproject.xran.codecs.ber.types.string.*;
 
 
 public class ERABType extends BerEnum {
diff --git a/src/main/java/org.onosproject.xran/codecs/api/EUTRANCellIdentifier.java b/src/main/java/org.onosproject.xran/codecs/api/EUTRANCellIdentifier.java
index 7c7f2a2..8dd094d 100644
--- a/src/main/java/org.onosproject.xran/codecs/api/EUTRANCellIdentifier.java
+++ b/src/main/java/org.onosproject.xran/codecs/api/EUTRANCellIdentifier.java
@@ -4,7 +4,7 @@
 
 package org.onosproject.xran.codecs.api;
 
-import org.openmuc.jasn1.ber.types.*;
+import org.onosproject.xran.codecs.ber.types.BerBitString;
 
 import javax.xml.bind.DatatypeConverter;
 import java.util.Arrays;
@@ -37,9 +37,4 @@
 		}
 		return super.equals(obj);
 	}
-
-	@Override
-	public String toString() {
-		return "\"" + DatatypeConverter.printHexBinary(value) + "\"";
-	}
 }
diff --git a/src/main/java/org.onosproject.xran/codecs/api/HOFailureCause.java b/src/main/java/org.onosproject.xran/codecs/api/HOFailureCause.java
index 67be0de..5723e83 100644
--- a/src/main/java/org.onosproject.xran/codecs/api/HOFailureCause.java
+++ b/src/main/java/org.onosproject.xran/codecs/api/HOFailureCause.java
@@ -4,7 +4,7 @@
 
 package org.onosproject.xran.codecs.api;
 
-import org.openmuc.jasn1.ber.types.BerEnum;
+import org.onosproject.xran.codecs.ber.types.BerEnum;
 
 import java.math.BigInteger;
 
diff --git a/src/main/java/org.onosproject.xran/codecs/api/MMEUES1APID.java b/src/main/java/org.onosproject.xran/codecs/api/MMEUES1APID.java
index 4967941..6edb788 100644
--- a/src/main/java/org.onosproject.xran/codecs/api/MMEUES1APID.java
+++ b/src/main/java/org.onosproject.xran/codecs/api/MMEUES1APID.java
@@ -15,9 +15,9 @@
 import java.io.Serializable;
 import java.util.Objects;
 
-import org.openmuc.jasn1.ber.*;
-import org.openmuc.jasn1.ber.types.*;
-import org.openmuc.jasn1.ber.types.string.*;
+import org.onosproject.xran.codecs.ber.*;
+import org.onosproject.xran.codecs.ber.types.*;
+import org.onosproject.xran.codecs.ber.types.string.*;
 
 
 public class MMEUES1APID extends BerInteger {
diff --git a/src/main/java/org.onosproject.xran/codecs/api/PCIARFCN.java b/src/main/java/org.onosproject.xran/codecs/api/PCIARFCN.java
index e3bd88f..a02833d 100644
--- a/src/main/java/org.onosproject.xran/codecs/api/PCIARFCN.java
+++ b/src/main/java/org.onosproject.xran/codecs/api/PCIARFCN.java
@@ -4,9 +4,10 @@
 
 package org.onosproject.xran.codecs.api;
 
-import org.openmuc.jasn1.ber.BerByteArrayOutputStream;
-import org.openmuc.jasn1.ber.BerLength;
-import org.openmuc.jasn1.ber.BerTag;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -19,6 +20,7 @@
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
 
+	@JsonIgnore
 	public byte[] code = null;
 	private PhysCellId pci = null;
 	private ARFCNValue earfcnDl = null;
@@ -144,7 +146,7 @@
 			sb.append("\t");
 		}
 		if (pci != null) {
-			sb.append("\"pci\": ").append(pci);
+			sb.append("pci: ").append(pci);
 		}
 		
 		sb.append(",\n");
@@ -152,7 +154,7 @@
 			sb.append("\t");
 		}
 		if (earfcnDl != null) {
-			sb.append("\"earfcnDl\": ").append(earfcnDl);
+			sb.append("earfcnDl: ").append(earfcnDl);
 		}
 		
 		sb.append("\n");
diff --git a/src/main/java/org.onosproject.xran/codecs/api/PLMNIdentity.java b/src/main/java/org.onosproject.xran/codecs/api/PLMNIdentity.java
index 5279ed6..39f0ec9 100644
--- a/src/main/java/org.onosproject.xran/codecs/api/PLMNIdentity.java
+++ b/src/main/java/org.onosproject.xran/codecs/api/PLMNIdentity.java
@@ -4,9 +4,8 @@
 
 package org.onosproject.xran.codecs.api;
 
-import org.openmuc.jasn1.ber.types.BerOctetString;
+import org.onosproject.xran.codecs.ber.types.BerOctetString;
 
-import javax.xml.bind.DatatypeConverter;
 import java.util.Arrays;
 
 
@@ -34,8 +33,4 @@
         return super.equals(obj);
     }
 
-    @Override
-    public String toString() {
-        return "\"" + DatatypeConverter.printHexBinary(value) + "\"";
-    }
 }
diff --git a/src/main/java/org.onosproject.xran/codecs/api/PRBUsage.java b/src/main/java/org.onosproject.xran/codecs/api/PRBUsage.java
index a36141c..ebe133f 100644
--- a/src/main/java/org.onosproject.xran/codecs/api/PRBUsage.java
+++ b/src/main/java/org.onosproject.xran/codecs/api/PRBUsage.java
@@ -13,9 +13,12 @@
 import java.io.UnsupportedEncodingException;
 import java.math.BigInteger;
 import java.io.Serializable;
-import org.openmuc.jasn1.ber.*;
-import org.openmuc.jasn1.ber.types.*;
-import org.openmuc.jasn1.ber.types.string.*;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.onosproject.xran.codecs.ber.*;
+import org.onosproject.xran.codecs.ber.types.*;
+import org.onosproject.xran.codecs.ber.types.string.*;
 
 
 public class PRBUsage implements Serializable {
@@ -27,6 +30,7 @@
 		private static final long serialVersionUID = 1L;
 
 		public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
+		@JsonIgnore
 		public byte[] code = null;
 		private List<BerInteger> seqOf = null;
 
@@ -38,7 +42,7 @@
 			this.code = code;
 		}
 
-		public List<BerInteger> getBerInteger() {
+		@JsonValue public List<BerInteger> getBerInteger() {
 			if (seqOf == null) {
 				seqOf = new ArrayList<BerInteger>();
 			}
@@ -156,7 +160,7 @@
 		private static final long serialVersionUID = 1L;
 
 		public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
-		public byte[] code = null;
+		@JsonIgnore public byte[] code = null;
 		private List<BerInteger> seqOf = null;
 
 		public PrbUsageUl() {
@@ -167,7 +171,7 @@
 			this.code = code;
 		}
 
-		public List<BerInteger> getBerInteger() {
+		@JsonValue public List<BerInteger> getBerInteger() {
 			if (seqOf == null) {
 				seqOf = new ArrayList<BerInteger>();
 			}
@@ -282,7 +286,7 @@
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
 
-	public byte[] code = null;
+	@JsonIgnore public byte[] code = null;
 	private PrbUsageDl prbUsageDl = null;
 	private PrbUsageUl prbUsageUl = null;
 	
@@ -407,7 +411,7 @@
 			sb.append("\t");
 		}
 		if (prbUsageDl != null) {
-			sb.append("\"prbUsageDl\": ");
+			sb.append("prbUsageDl: ");
 			prbUsageDl.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -416,7 +420,7 @@
 			sb.append("\t");
 		}
 		if (prbUsageUl != null) {
-			sb.append("\"prbUsageUl\": ");
+			sb.append("prbUsageUl: ");
 			prbUsageUl.appendAsString(sb, indentLevel + 1);
 		}
 		
diff --git a/src/main/java/org.onosproject.xran/codecs/api/PhysCellId.java b/src/main/java/org.onosproject.xran/codecs/api/PhysCellId.java
index e05df5b..0c7e330 100644
--- a/src/main/java/org.onosproject.xran/codecs/api/PhysCellId.java
+++ b/src/main/java/org.onosproject.xran/codecs/api/PhysCellId.java
@@ -4,7 +4,7 @@
 
 package org.onosproject.xran.codecs.api;
 
-import org.openmuc.jasn1.ber.types.BerInteger;
+import org.onosproject.xran.codecs.ber.types.BerInteger;
 
 import java.math.BigInteger;
 
diff --git a/src/main/java/org.onosproject.xran/codecs/api/PropScell.java b/src/main/java/org.onosproject.xran/codecs/api/PropScell.java
index 9d473be..2e9400b 100644
--- a/src/main/java/org.onosproject.xran/codecs/api/PropScell.java
+++ b/src/main/java/org.onosproject.xran/codecs/api/PropScell.java
@@ -4,12 +4,13 @@
 
 package org.onosproject.xran.codecs.api;
 
-import org.openmuc.jasn1.ber.BerByteArrayOutputStream;
-import org.openmuc.jasn1.ber.BerLength;
-import org.openmuc.jasn1.ber.BerTag;
-import org.openmuc.jasn1.ber.types.BerBoolean;
-import org.openmuc.jasn1.ber.types.BerEnum;
-import org.openmuc.jasn1.ber.types.BerInteger;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
+import org.onosproject.xran.codecs.ber.types.BerBoolean;
+import org.onosproject.xran.codecs.ber.types.BerEnum;
+import org.onosproject.xran.codecs.ber.types.BerInteger;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -22,6 +23,7 @@
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
 
+	@JsonIgnore
 	public byte[] code = null;
 	private PCIARFCN pciArfcn = null;
 	private BerBoolean crossCarrierSchedEnable = null;
diff --git a/src/main/java/org.onosproject.xran/codecs/api/QCI.java b/src/main/java/org.onosproject.xran/codecs/api/QCI.java
index adee94e..c8a4e69 100644
--- a/src/main/java/org.onosproject.xran/codecs/api/QCI.java
+++ b/src/main/java/org.onosproject.xran/codecs/api/QCI.java
@@ -4,7 +4,7 @@
 
 package org.onosproject.xran.codecs.api;
 
-import org.openmuc.jasn1.ber.types.BerInteger;
+import org.onosproject.xran.codecs.ber.types.BerInteger;
 
 import java.math.BigInteger;
 
diff --git a/src/main/java/org.onosproject.xran/codecs/api/RSRPRange.java b/src/main/java/org.onosproject.xran/codecs/api/RSRPRange.java
index 592f41e..c841f05 100644
--- a/src/main/java/org.onosproject.xran/codecs/api/RSRPRange.java
+++ b/src/main/java/org.onosproject.xran/codecs/api/RSRPRange.java
@@ -13,9 +13,9 @@
 import java.io.UnsupportedEncodingException;
 import java.math.BigInteger;
 import java.io.Serializable;
-import org.openmuc.jasn1.ber.*;
-import org.openmuc.jasn1.ber.types.*;
-import org.openmuc.jasn1.ber.types.string.*;
+import org.onosproject.xran.codecs.ber.*;
+import org.onosproject.xran.codecs.ber.types.*;
+import org.onosproject.xran.codecs.ber.types.string.*;
 
 
 public class RSRPRange extends BerInteger {
diff --git a/src/main/java/org.onosproject.xran/codecs/api/RSRQRange.java b/src/main/java/org.onosproject.xran/codecs/api/RSRQRange.java
index 4d74e85..c0115a3 100644
--- a/src/main/java/org.onosproject.xran/codecs/api/RSRQRange.java
+++ b/src/main/java/org.onosproject.xran/codecs/api/RSRQRange.java
@@ -13,9 +13,9 @@
 import java.io.UnsupportedEncodingException;
 import java.math.BigInteger;
 import java.io.Serializable;
-import org.openmuc.jasn1.ber.*;
-import org.openmuc.jasn1.ber.types.*;
-import org.openmuc.jasn1.ber.types.string.*;
+import org.onosproject.xran.codecs.ber.*;
+import org.onosproject.xran.codecs.ber.types.*;
+import org.onosproject.xran.codecs.ber.types.string.*;
 
 
 public class RSRQRange extends BerInteger {
diff --git a/src/main/java/org.onosproject.xran/codecs/api/RXSigMeasRepInterval.java b/src/main/java/org.onosproject.xran/codecs/api/RXSigMeasRepInterval.java
index 8ce29aa..55be762 100644
--- a/src/main/java/org.onosproject.xran/codecs/api/RXSigMeasRepInterval.java
+++ b/src/main/java/org.onosproject.xran/codecs/api/RXSigMeasRepInterval.java
@@ -13,9 +13,9 @@
 import java.io.UnsupportedEncodingException;
 import java.math.BigInteger;
 import java.io.Serializable;
-import org.openmuc.jasn1.ber.*;
-import org.openmuc.jasn1.ber.types.*;
-import org.openmuc.jasn1.ber.types.string.*;
+import org.onosproject.xran.codecs.ber.*;
+import org.onosproject.xran.codecs.ber.types.*;
+import org.onosproject.xran.codecs.ber.types.string.*;
 
 
 public class RXSigMeasRepInterval extends BerEnum {
diff --git a/src/main/java/org.onosproject.xran/codecs/api/RXSigRepQty.java b/src/main/java/org.onosproject.xran/codecs/api/RXSigRepQty.java
index 8794f09..1c7f3ad 100644
--- a/src/main/java/org.onosproject.xran/codecs/api/RXSigRepQty.java
+++ b/src/main/java/org.onosproject.xran/codecs/api/RXSigRepQty.java
@@ -13,9 +13,9 @@
 import java.io.UnsupportedEncodingException;
 import java.math.BigInteger;
 import java.io.Serializable;
-import org.openmuc.jasn1.ber.*;
-import org.openmuc.jasn1.ber.types.*;
-import org.openmuc.jasn1.ber.types.string.*;
+import org.onosproject.xran.codecs.ber.*;
+import org.onosproject.xran.codecs.ber.types.*;
+import org.onosproject.xran.codecs.ber.types.string.*;
 
 
 public class RXSigRepQty extends BerEnum {
diff --git a/src/main/java/org.onosproject.xran/codecs/api/RXSigReport.java b/src/main/java/org.onosproject.xran/codecs/api/RXSigReport.java
index f07dd09..d11dc34 100644
--- a/src/main/java/org.onosproject.xran/codecs/api/RXSigReport.java
+++ b/src/main/java/org.onosproject.xran/codecs/api/RXSigReport.java
@@ -13,9 +13,11 @@
 import java.io.UnsupportedEncodingException;
 import java.math.BigInteger;
 import java.io.Serializable;
-import org.openmuc.jasn1.ber.*;
-import org.openmuc.jasn1.ber.types.*;
-import org.openmuc.jasn1.ber.types.string.*;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import org.onosproject.xran.codecs.ber.*;
+import org.onosproject.xran.codecs.ber.types.*;
+import org.onosproject.xran.codecs.ber.types.string.*;
 
 
 public class RXSigReport implements Serializable {
@@ -24,6 +26,7 @@
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
 
+	@JsonIgnore
 	public byte[] code = null;
 	private PCIARFCN pciArfcn = null;
 	private RSRPRange rsrp = null;
@@ -172,7 +175,7 @@
 			sb.append("\t");
 		}
 		if (pciArfcn != null) {
-			sb.append("\"pciArfcn\": ");
+			sb.append("pciArfcn: ");
 			pciArfcn.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -181,14 +184,14 @@
 			sb.append("\t");
 		}
 		if (rsrp != null) {
-			sb.append("\"rsrp\": ").append(rsrp);
+			sb.append("rsrp: ").append(rsrp);
 		}
 		sb.append(",\n");
 		for (int i = 0; i < indentLevel + 1; i++) {
 			sb.append("\t");
 		}
 		if (rsrq != null) {
-			sb.append("\"rsrq\": ").append(rsrq);
+			sb.append("rsrq: ").append(rsrq);
 		}
 		
 		sb.append("\n");
diff --git a/src/main/java/org.onosproject.xran/codecs/api/RadioRepPerServCell.java b/src/main/java/org.onosproject.xran/codecs/api/RadioRepPerServCell.java
index 525fb0a..93d7dde 100644
--- a/src/main/java/org.onosproject.xran/codecs/api/RadioRepPerServCell.java
+++ b/src/main/java/org.onosproject.xran/codecs/api/RadioRepPerServCell.java
@@ -4,10 +4,12 @@
 
 package org.onosproject.xran.codecs.api;
 
-import org.openmuc.jasn1.ber.BerByteArrayOutputStream;
-import org.openmuc.jasn1.ber.BerLength;
-import org.openmuc.jasn1.ber.BerTag;
-import org.openmuc.jasn1.ber.types.BerInteger;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
+import org.onosproject.xran.codecs.ber.types.BerInteger;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -26,6 +28,7 @@
 		private static final long serialVersionUID = 1L;
 
 		public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
+		@JsonIgnore
 		public byte[] code = null;
 		private List<BerInteger> seqOf = null;
 
@@ -37,7 +40,7 @@
 			this.code = code;
 		}
 
-		public List<BerInteger> getBerInteger() {
+		@JsonValue public List<BerInteger> getBerInteger() {
 			if (seqOf == null) {
 				seqOf = new ArrayList<BerInteger>();
 			}
@@ -156,7 +159,7 @@
 		private static final long serialVersionUID = 1L;
 
 		public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
-		public byte[] code = null;
+		@JsonIgnore public byte[] code = null;
 		private List<BerInteger> seqOf = null;
 
 		public RiHist() {
@@ -167,7 +170,7 @@
 			this.code = code;
 		}
 
-		public List<BerInteger> getBerInteger() {
+		@JsonValue public List<BerInteger> getBerInteger() {
 			if (seqOf == null) {
 				seqOf = new ArrayList<BerInteger>();
 			}
@@ -287,7 +290,7 @@
 		private static final long serialVersionUID = 1L;
 
 		public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
-		public byte[] code = null;
+		@JsonIgnore public byte[] code = null;
 		private List<BerInteger> seqOf = null;
 
 		public PuschSinrHist() {
@@ -298,7 +301,7 @@
 			this.code = code;
 		}
 
-		public List<BerInteger> getBerInteger() {
+		@JsonValue public List<BerInteger> getBerInteger() {
 			if (seqOf == null) {
 				seqOf = new ArrayList<BerInteger>();
 			}
@@ -418,7 +421,7 @@
 		private static final long serialVersionUID = 1L;
 
 		public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
-		public byte[] code = null;
+		@JsonIgnore public byte[] code = null;
 		private List<BerInteger> seqOf = null;
 
 		public PucchSinrHist() {
@@ -429,6 +432,7 @@
 			this.code = code;
 		}
 
+		@JsonValue
 		public List<BerInteger> getBerInteger() {
 			if (seqOf == null) {
 				seqOf = new ArrayList<BerInteger>();
@@ -545,7 +549,7 @@
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
 
-	public byte[] code = null;
+	@JsonIgnore public byte[] code = null;
 	private PCIARFCN pciArfcn = null;
 	private CqiHist cqiHist = null;
 	private RiHist riHist = null;
@@ -739,7 +743,7 @@
 			sb.append("\t");
 		}
 		if (pciArfcn != null) {
-			sb.append("\"pciArfcn\": ");
+			sb.append("pciArfcn: ");
 			pciArfcn.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -748,7 +752,7 @@
 			sb.append("\t");
 		}
 		if (cqiHist != null) {
-			sb.append("\"cqiHist\": ");
+			sb.append("cqiHist: ");
 			cqiHist.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -757,7 +761,7 @@
 			sb.append("\t");
 		}
 		if (riHist != null) {
-			sb.append("\"riHist\": ");
+			sb.append("riHist: ");
 			riHist.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -766,7 +770,7 @@
 			sb.append("\t");
 		}
 		if (puschSinrHist != null) {
-			sb.append("\"puschSinrHist\": ");
+			sb.append("puschSinrHist: ");
 			puschSinrHist.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -775,7 +779,7 @@
 			sb.append("\t");
 		}
 		if (pucchSinrHist != null) {
-			sb.append("\"pucchSinrHist\": ");
+			sb.append("pucchSinrHist: ");
 			pucchSinrHist.appendAsString(sb, indentLevel + 1);
 		}
 		
diff --git a/src/main/java/org.onosproject.xran/codecs/api/ReconfIndReason.java b/src/main/java/org.onosproject.xran/codecs/api/ReconfIndReason.java
index 6ab2221..3c08c48 100644
--- a/src/main/java/org.onosproject.xran/codecs/api/ReconfIndReason.java
+++ b/src/main/java/org.onosproject.xran/codecs/api/ReconfIndReason.java
@@ -13,9 +13,9 @@
 import java.io.UnsupportedEncodingException;
 import java.math.BigInteger;
 import java.io.Serializable;
-import org.openmuc.jasn1.ber.*;
-import org.openmuc.jasn1.ber.types.*;
-import org.openmuc.jasn1.ber.types.string.*;
+import org.onosproject.xran.codecs.ber.*;
+import org.onosproject.xran.codecs.ber.types.*;
+import org.onosproject.xran.codecs.ber.types.string.*;
 
 
 public class ReconfIndReason extends BerEnum {
diff --git a/src/main/java/org.onosproject.xran/codecs/api/RelCause.java b/src/main/java/org.onosproject.xran/codecs/api/RelCause.java
index c983d06..5d1191d 100644
--- a/src/main/java/org.onosproject.xran/codecs/api/RelCause.java
+++ b/src/main/java/org.onosproject.xran/codecs/api/RelCause.java
@@ -13,9 +13,9 @@
 import java.io.UnsupportedEncodingException;
 import java.math.BigInteger;
 import java.io.Serializable;
-import org.openmuc.jasn1.ber.*;
-import org.openmuc.jasn1.ber.types.*;
-import org.openmuc.jasn1.ber.types.string.*;
+import org.onosproject.xran.codecs.ber.*;
+import org.onosproject.xran.codecs.ber.types.*;
+import org.onosproject.xran.codecs.ber.types.string.*;
 
 
 public class RelCause extends BerEnum {
diff --git a/src/main/java/org.onosproject.xran/codecs/api/SchedMeasRepPerServCell.java b/src/main/java/org.onosproject.xran/codecs/api/SchedMeasRepPerServCell.java
index a2ed8fb..753fa5f 100644
--- a/src/main/java/org.onosproject.xran/codecs/api/SchedMeasRepPerServCell.java
+++ b/src/main/java/org.onosproject.xran/codecs/api/SchedMeasRepPerServCell.java
@@ -13,9 +13,12 @@
 import java.io.UnsupportedEncodingException;
 import java.math.BigInteger;
 import java.io.Serializable;
-import org.openmuc.jasn1.ber.*;
-import org.openmuc.jasn1.ber.types.*;
-import org.openmuc.jasn1.ber.types.string.*;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.onosproject.xran.codecs.ber.*;
+import org.onosproject.xran.codecs.ber.types.*;
+import org.onosproject.xran.codecs.ber.types.string.*;
 
 
 public class SchedMeasRepPerServCell implements Serializable {
@@ -27,6 +30,7 @@
 		private static final long serialVersionUID = 1L;
 
 		public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
+		@JsonIgnore
 		public byte[] code = null;
 		private List<QCI> seqOf = null;
 
@@ -38,6 +42,7 @@
 			this.code = code;
 		}
 
+		@JsonValue
 		public List<QCI> getQCI() {
 			if (seqOf == null) {
 				seqOf = new ArrayList<QCI>();
@@ -157,7 +162,7 @@
 		private static final long serialVersionUID = 1L;
 
 		public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
-		public byte[] code = null;
+		@JsonIgnore public byte[] code = null;
 		private List<BerInteger> seqOf = null;
 
 		public McsDl() {
@@ -168,7 +173,7 @@
 			this.code = code;
 		}
 
-		public List<BerInteger> getBerInteger() {
+		@JsonValue public List<BerInteger> getBerInteger() {
 			if (seqOf == null) {
 				seqOf = new ArrayList<BerInteger>();
 			}
@@ -287,7 +292,7 @@
 		private static final long serialVersionUID = 1L;
 
 		public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
-		public byte[] code = null;
+		@JsonIgnore public byte[] code = null;
 		private List<BerInteger> seqOf = null;
 
 		public NumSchedTtisDl() {
@@ -298,7 +303,7 @@
 			this.code = code;
 		}
 
-		public List<BerInteger> getBerInteger() {
+		@JsonValue public List<BerInteger> getBerInteger() {
 			if (seqOf == null) {
 				seqOf = new ArrayList<BerInteger>();
 			}
@@ -417,7 +422,7 @@
 		private static final long serialVersionUID = 1L;
 
 		public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
-		public byte[] code = null;
+		@JsonIgnore public byte[] code = null;
 		private List<BerInteger> seqOf = null;
 
 		public McsUl() {
@@ -428,7 +433,7 @@
 			this.code = code;
 		}
 
-		public List<BerInteger> getBerInteger() {
+		@JsonValue public List<BerInteger> getBerInteger() {
 			if (seqOf == null) {
 				seqOf = new ArrayList<BerInteger>();
 			}
@@ -547,7 +552,7 @@
 		private static final long serialVersionUID = 1L;
 
 		public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
-		public byte[] code = null;
+		@JsonIgnore public byte[] code = null;
 		private List<BerInteger> seqOf = null;
 
 		public NumSchedTtisUl() {
@@ -558,7 +563,7 @@
 			this.code = code;
 		}
 
-		public List<BerInteger> getBerInteger() {
+		@JsonValue public List<BerInteger> getBerInteger() {
 			if (seqOf == null) {
 				seqOf = new ArrayList<BerInteger>();
 			}
@@ -677,7 +682,7 @@
 		private static final long serialVersionUID = 1L;
 
 		public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
-		public byte[] code = null;
+		@JsonIgnore public byte[] code = null;
 		private List<BerInteger> seqOf = null;
 
 		public RankDl1() {
@@ -688,7 +693,7 @@
 			this.code = code;
 		}
 
-		public List<BerInteger> getBerInteger() {
+		@JsonValue public List<BerInteger> getBerInteger() {
 			if (seqOf == null) {
 				seqOf = new ArrayList<BerInteger>();
 			}
@@ -807,7 +812,7 @@
 		private static final long serialVersionUID = 1L;
 
 		public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
-		public byte[] code = null;
+		@JsonIgnore public byte[] code = null;
 		private List<BerInteger> seqOf = null;
 
 		public RankDl2() {
@@ -818,6 +823,7 @@
 			this.code = code;
 		}
 
+		@JsonValue
 		public List<BerInteger> getBerInteger() {
 			if (seqOf == null) {
 				seqOf = new ArrayList<BerInteger>();
@@ -934,7 +940,7 @@
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
 
-	public byte[] code = null;
+	@JsonIgnore public byte[] code = null;
 	private PCIARFCN pciArfcn = null;
 	private QciVals qciVals = null;
 	private PRBUsage prbUsage = null;
@@ -1220,7 +1226,7 @@
 			sb.append("\t");
 		}
 		if (pciArfcn != null) {
-			sb.append("\"pciArfcn\": ");
+			sb.append("pciArfcn: ");
 			pciArfcn.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -1229,7 +1235,7 @@
 			sb.append("\t");
 		}
 		if (qciVals != null) {
-			sb.append("\"qciVals\": ");
+			sb.append("qciVals: ");
 			qciVals.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -1238,7 +1244,7 @@
 			sb.append("\t");
 		}
 		if (prbUsage != null) {
-			sb.append("\"prbUsage\": ");
+			sb.append("prbUsage: ");
 			prbUsage.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -1247,7 +1253,7 @@
 			sb.append("\t");
 		}
 		if (mcsDl != null) {
-			sb.append("\"mcsDl\": ");
+			sb.append("mcsDl: ");
 			mcsDl.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -1256,7 +1262,7 @@
 			sb.append("\t");
 		}
 		if (numSchedTtisDl != null) {
-			sb.append("\"numSchedTtisDl\": ");
+			sb.append("numSchedTtisDl: ");
 			numSchedTtisDl.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -1265,7 +1271,7 @@
 			sb.append("\t");
 		}
 		if (mcsUl != null) {
-			sb.append("\"mcsUl\": ");
+			sb.append("mcsUl: ");
 			mcsUl.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -1274,7 +1280,7 @@
 			sb.append("\t");
 		}
 		if (numSchedTtisUl != null) {
-			sb.append("\"numSchedTtisUl\": ");
+			sb.append("numSchedTtisUl: ");
 			numSchedTtisUl.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -1283,7 +1289,7 @@
 			sb.append("\t");
 		}
 		if (rankDl1 != null) {
-			sb.append("\"rankDl1\": ");
+			sb.append("rankDl1: ");
 			rankDl1.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -1292,7 +1298,7 @@
 			sb.append("\t");
 		}
 		if (rankDl2 != null) {
-			sb.append("\"rankDl2\": ");
+			sb.append("rankDl2: ");
 			rankDl2.appendAsString(sb, indentLevel + 1);
 		}
 		
diff --git a/src/main/java/org.onosproject.xran/codecs/api/TrafficSplitPercentage.java b/src/main/java/org.onosproject.xran/codecs/api/TrafficSplitPercentage.java
index bf3031a..cf37663 100644
--- a/src/main/java/org.onosproject.xran/codecs/api/TrafficSplitPercentage.java
+++ b/src/main/java/org.onosproject.xran/codecs/api/TrafficSplitPercentage.java
@@ -13,9 +13,11 @@
 import java.io.UnsupportedEncodingException;
 import java.math.BigInteger;
 import java.io.Serializable;
-import org.openmuc.jasn1.ber.*;
-import org.openmuc.jasn1.ber.types.*;
-import org.openmuc.jasn1.ber.types.string.*;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import org.onosproject.xran.codecs.ber.*;
+import org.onosproject.xran.codecs.ber.types.*;
+import org.onosproject.xran.codecs.ber.types.string.*;
 
 
 public class TrafficSplitPercentage implements Serializable {
@@ -24,6 +26,7 @@
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
 
+	@JsonIgnore
 	public byte[] code = null;
 	private ECGI ecgi = null;
 	private BerInteger trafficPercentDl = null;
@@ -179,7 +182,7 @@
 			sb.append("\t");
 		}
 		if (ecgi != null) {
-			sb.append("\"ecgi\": ");
+			sb.append("ecgi: ");
 			ecgi.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -188,7 +191,7 @@
 			for (int i = 0; i < indentLevel + 1; i++) {
 				sb.append("\t");
 			}
-			sb.append("\"trafficPercentDl\": ").append(trafficPercentDl);
+			sb.append("trafficPercentDl: ").append(trafficPercentDl);
 		}
 		
 		if (trafficPercentUl != null) {
@@ -196,7 +199,7 @@
 			for (int i = 0; i < indentLevel + 1; i++) {
 				sb.append("\t");
 			}
-			sb.append("\"trafficPercentUl\": ").append(trafficPercentUl);
+			sb.append("trafficPercentUl: ").append(trafficPercentUl);
 		}
 		
 		sb.append("\n");
diff --git a/src/main/java/org.onosproject.xran/codecs/api/UEAMBR.java b/src/main/java/org.onosproject.xran/codecs/api/UEAMBR.java
index eeadfa2..0fb8a7f 100644
--- a/src/main/java/org.onosproject.xran/codecs/api/UEAMBR.java
+++ b/src/main/java/org.onosproject.xran/codecs/api/UEAMBR.java
@@ -4,9 +4,10 @@
 
 package org.onosproject.xran.codecs.api;
 
-import org.openmuc.jasn1.ber.BerByteArrayOutputStream;
-import org.openmuc.jasn1.ber.BerLength;
-import org.openmuc.jasn1.ber.BerTag;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -19,6 +20,7 @@
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
 
+	@JsonIgnore
 	public byte[] code = null;
 	private BitRate ambrDl = null;
 	private BitRate ambrUl = null;
@@ -144,7 +146,7 @@
 			sb.append("\t");
 		}
 		if (ambrDl != null) {
-			sb.append("\"ambrDl\": ").append(ambrDl);
+			sb.append("ambrDl: ").append(ambrDl);
 		}
 		
 		sb.append(",\n");
@@ -152,7 +154,7 @@
 			sb.append("\t");
 		}
 		if (ambrUl != null) {
-			sb.append("\"ambrUl\": ").append(ambrUl);
+			sb.append("ambrUl: ").append(ambrUl);
 		}
 		
 		sb.append("\n");
diff --git a/src/main/java/org.onosproject.xran/codecs/api/XICICPA.java b/src/main/java/org.onosproject.xran/codecs/api/XICICPA.java
index 4586eac..5c69cfa 100644
--- a/src/main/java/org.onosproject.xran/codecs/api/XICICPA.java
+++ b/src/main/java/org.onosproject.xran/codecs/api/XICICPA.java
@@ -4,7 +4,7 @@
 
 package org.onosproject.xran.codecs.api;
 
-import org.openmuc.jasn1.ber.types.BerEnum;
+import org.onosproject.xran.codecs.ber.types.BerEnum;
 
 import java.math.BigInteger;
 
diff --git a/src/main/java/org.onosproject.xran/codecs/ber/BerByteArrayOutputStream.java b/src/main/java/org.onosproject.xran/codecs/ber/BerByteArrayOutputStream.java
new file mode 100644
index 0000000..e32f381
--- /dev/null
+++ b/src/main/java/org.onosproject.xran/codecs/ber/BerByteArrayOutputStream.java
@@ -0,0 +1,115 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package org.onosproject.xran.codecs.ber;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.nio.ByteBuffer;
+
+public class BerByteArrayOutputStream extends OutputStream {
+
+    private final boolean automaticResize;
+    public byte[] buffer;
+    public int index;
+
+    /**
+     * Creates a <code>BerByteArrayOutputStream</code> with a byte array of size <code>bufferSize</code>. The buffer
+     * will not be resized automatically. Use {@link #BerByteArrayOutputStream(int, boolean)} instead if you want the
+     * buffer to be dynamically resized.
+     *
+     * @param bufferSize the size of the underlying buffer
+     */
+    public BerByteArrayOutputStream(int bufferSize) {
+        this(new byte[bufferSize], bufferSize - 1, false);
+    }
+
+    public BerByteArrayOutputStream(int bufferSize, boolean automaticResize) {
+        this(new byte[bufferSize], bufferSize - 1, automaticResize);
+    }
+
+    public BerByteArrayOutputStream(byte[] buffer) {
+        this(buffer, buffer.length - 1, false);
+    }
+
+    public BerByteArrayOutputStream(byte[] buffer, int startingIndex) {
+        this(buffer, startingIndex, false);
+    }
+
+    public BerByteArrayOutputStream(byte[] buffer, int startingIndex, boolean automaticResize) {
+        if (buffer.length <= 0) {
+            throw new IllegalArgumentException("buffer size may not be <= 0");
+        }
+        this.buffer = buffer;
+        index = startingIndex;
+        this.automaticResize = automaticResize;
+    }
+
+    @Override
+    public void write(int arg0) throws IOException {
+        write((byte) arg0);
+    }
+
+    public void write(byte arg0) throws IOException {
+        try {
+            buffer[index] = arg0;
+        } catch (ArrayIndexOutOfBoundsException e) {
+            if (automaticResize) {
+                resize();
+                buffer[index] = arg0;
+            } else {
+                throw new ArrayIndexOutOfBoundsException("buffer.length = " + buffer.length);
+            }
+        }
+        index--;
+    }
+
+    private void resize() {
+        byte[] newBuffer = new byte[buffer.length * 2];
+        System.arraycopy(buffer, index + 1, newBuffer, buffer.length + index + 1, buffer.length - index - 1);
+        index += buffer.length;
+        buffer = newBuffer;
+
+    }
+
+    @Override
+    public void write(byte[] byteArray) throws IOException {
+        for (int i = byteArray.length - 1; i >= 0; i--) {
+            try {
+                buffer[index] = byteArray[i];
+            } catch (ArrayIndexOutOfBoundsException e) {
+                if (automaticResize) {
+                    resize();
+                    buffer[index] = byteArray[i];
+                } else {
+                    throw new ArrayIndexOutOfBoundsException("buffer.length = " + buffer.length);
+                }
+            }
+            index--;
+        }
+    }
+
+    /**
+     * Returns a new array containing the subarray of the stream array that contains the coded content.
+     *
+     * @return a new array containing the subarray of the stream array
+     */
+    public byte[] getArray() {
+        if (index == -1) {
+            return buffer;
+        }
+        int subBufferLength = buffer.length - index - 1;
+        byte[] subBuffer = new byte[subBufferLength];
+        System.arraycopy(buffer, index + 1, subBuffer, 0, subBufferLength);
+        return subBuffer;
+
+    }
+
+    public ByteBuffer getByteBuffer() {
+        return ByteBuffer.wrap(buffer, index + 1, buffer.length - (index + 1));
+    }
+
+    public void reset() {
+        index = buffer.length - 1;
+    }
+}
diff --git a/src/main/java/org.onosproject.xran/codecs/ber/BerLength.java b/src/main/java/org.onosproject.xran/codecs/ber/BerLength.java
new file mode 100644
index 0000000..8057a58
--- /dev/null
+++ b/src/main/java/org.onosproject.xran/codecs/ber/BerLength.java
@@ -0,0 +1,115 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package org.onosproject.xran.codecs.ber;
+
+import java.io.EOFException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Serializable;
+
+public class BerLength implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    public int val;
+
+    public BerLength() {
+    }
+
+    public static int skip(InputStream is) throws IOException {
+
+        int val = is.read();
+        if (val == -1) {
+            throw new EOFException("Unexpected end of input stream.");
+        }
+
+        if ((val & 0x80) == 0) {
+            return 1;
+        }
+
+        int lengthLength = val & 0x7f;
+
+        // check for indefinite length
+        if (lengthLength == 0) {
+            val = -1;
+            return 1;
+        }
+
+        if (lengthLength > 4) {
+            throw new IOException("Length is out of bound!");
+        }
+
+        for (int i = 0; i < lengthLength; i++) {
+            int nextByte = is.read();
+            if (nextByte == -1) {
+                throw new EOFException("Unexpected end of input stream.");
+            }
+        }
+
+        return lengthLength + 1;
+    }
+
+    public static int encodeLength(BerByteArrayOutputStream os, int length) throws IOException {
+        // the indefinite form is ignored for now
+
+        if (length <= 127) {
+            // this is the short form, it is coded differently than the long
+            // form for values > 127
+            os.write((byte) length);
+            return 1;
+        } else {
+            int numLengthBytes = 1;
+
+            while (((int) (Math.pow(2, 8 * numLengthBytes) - 1)) < length) {
+                numLengthBytes++;
+            }
+
+            for (int i = 0; i < numLengthBytes; i++) {
+                os.write((length >> 8 * i) & 0xff);
+            }
+
+            os.write(0x80 | numLengthBytes);
+
+            return 1 + numLengthBytes;
+        }
+
+    }
+
+    public int decode(InputStream is) throws IOException {
+
+        val = is.read();
+        if (val == -1) {
+            throw new EOFException("Unexpected end of input stream.");
+        }
+
+        if ((val & 0x80) == 0) {
+            return 1;
+        }
+
+        int lengthLength = val & 0x7f;
+
+        // check for indefinite length
+        if (lengthLength == 0) {
+            val = -1;
+            return 1;
+        }
+
+        if (lengthLength > 4) {
+            throw new IOException("Length is out of bound!");
+        }
+
+        val = 0;
+
+        for (int i = 0; i < lengthLength; i++) {
+            int nextByte = is.read();
+            if (nextByte == -1) {
+                throw new EOFException("Unexpected end of input stream.");
+            }
+            val |= nextByte << (8 * (lengthLength - i - 1));
+        }
+
+        return lengthLength + 1;
+    }
+
+}
diff --git a/src/main/java/org.onosproject.xran/codecs/ber/BerTag.java b/src/main/java/org.onosproject.xran/codecs/ber/BerTag.java
new file mode 100644
index 0000000..5d5df85
--- /dev/null
+++ b/src/main/java/org.onosproject.xran/codecs/ber/BerTag.java
@@ -0,0 +1,186 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package org.onosproject.xran.codecs.ber;
+
+import java.io.EOFException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Serializable;
+
+public class BerTag implements Serializable {
+
+    public static final int UNIVERSAL_CLASS = 0x00;
+    public static final int APPLICATION_CLASS = 0x40;
+    public static final int CONTEXT_CLASS = 0x80;
+    public static final int PRIVATE_CLASS = 0xc0;
+    public static final int PRIMITIVE = 0x00;
+    public static final int CONSTRUCTED = 0x20;
+    public static final int BOOLEAN_TAG = 1;
+    public static final int INTEGER_TAG = 2;
+    public static final int BIT_STRING_TAG = 3;
+    public static final int OCTET_STRING_TAG = 4;
+    public static final int NULL_TAG = 5;
+    public static final int OBJECT_IDENTIFIER_TAG = 6;
+    public static final int OBJECT_DESCRIPTOR_TAG = 7;
+    public static final int REAL_TAG = 9;
+    public static final int ENUMERATED_TAG = 10;
+    public static final int EMBEDDED_PDV_TAG = 11;
+    public static final int UTF8_STRING_TAG = 12;
+    public static final int TIME_TAG = 14;
+    public static final int NUMERIC_STRING_TAG = 18;
+    public static final int PRINTABLE_STRING_TAG = 19;
+    public static final int TELETEX_STRING_TAG = 20;
+    public static final int VIDEOTEX_STRING_TAG = 21;
+    public static final int IA5_STRING_TAG = 22;
+    public static final int UTC_TIME_TAG = 23;
+    public static final int GENERALIZED_TIME_TAG = 24;
+    public static final int GRAPHIC_STRING_TAG = 25;
+    public static final int VISIBLE_STRING_TAG = 26;
+    public static final int GENERAL_STRING_TAG = 27;
+    public static final int UNIVERSAL_STRING_TAG = 28;
+    public static final int BMP_STRING_TAG = 30;
+    public static final int DATE_TAG = 31;
+    public static final int TIME_OF_DAY_TAG = 32;
+    public static final int DATE_TIME_TAG = 33;
+    public static final int DURATION_TAG = 34;
+    private static final long serialVersionUID = 1L;
+    public byte[] tagBytes = null;
+    public int tagClass;
+    public int primitive;
+    public int tagNumber;
+
+    public BerTag(int identifierClass, int primitive, int tagNumber) {
+        this.tagClass = identifierClass;
+        this.primitive = primitive;
+        this.tagNumber = tagNumber;
+        code();
+    }
+
+    public BerTag() {
+    }
+
+    private void code() {
+        if (tagNumber < 31) {
+            tagBytes = new byte[1];
+            tagBytes[0] = (byte) (tagClass | primitive | tagNumber);
+        } else {
+            int tagLength = 1;
+            while (tagNumber > (Math.pow(2, (7 * tagLength)) - 1)) {
+                tagLength++;
+            }
+
+            tagBytes = new byte[1 + tagLength];
+            tagBytes[0] = (byte) (tagClass | primitive | 31);
+
+            for (int j = 1; j <= (tagLength - 1); j++) {
+                tagBytes[j] = (byte) (((tagNumber >> (7 * (tagLength - j))) & 0xff) | 0x80);
+            }
+
+            tagBytes[tagLength] = (byte) (tagNumber & 0x7f);
+
+        }
+    }
+
+    public int encode(BerByteArrayOutputStream os) throws IOException {
+        if (tagBytes == null) {
+            code();
+        }
+        for (int i = (tagBytes.length - 1); i >= 0; i--) {
+            os.write(tagBytes[i]);
+        }
+        return tagBytes.length;
+    }
+
+    public int decode(InputStream is) throws IOException {
+        int nextByte = is.read();
+        if (nextByte == -1) {
+            throw new EOFException("Unexpected end of input stream.");
+        }
+
+        tagClass = nextByte & 0xC0;
+        primitive = nextByte & 0x20;
+        tagNumber = nextByte & 0x1f;
+
+        int codeLength = 1;
+
+        if (tagNumber == 0x1f) {
+            tagNumber = 0;
+
+            int counter = 0;
+
+            do {
+                nextByte = is.read();
+                if (nextByte == -1) {
+                    throw new EOFException("Unexpected end of input stream.");
+                }
+
+                codeLength++;
+                if (counter >= 6) {
+                    throw new IOException("Invalid Tag");
+                }
+                tagNumber = tagNumber << 7;
+                tagNumber |= (nextByte & 0x7f);
+                counter++;
+            } while ((nextByte & 0x80) == 0x80);
+
+        }
+
+        return codeLength;
+    }
+
+    /**
+     * Decodes the Identifier from the ByteArrayInputStream and throws an Exception if it is not equal to itself.
+     * Returns the number of bytes read from the InputStream.
+     *
+     * @param is the input stream to read the identifier from.
+     * @return the length of the identifier read.
+     * @throws IOException if an exception occurs reading the identifier from the stream.
+     */
+    public int decodeAndCheck(InputStream is) throws IOException {
+
+        for (Byte identifierByte : tagBytes) {
+            int nextByte = is.read();
+            if (nextByte == -1) {
+                throw new EOFException("Unexpected end of input stream.");
+            }
+
+            if (nextByte != (identifierByte & 0xff)) {
+                throw new IOException("Identifier does not match!");
+            }
+        }
+        return tagBytes.length;
+    }
+
+    public boolean equals(int identifierClass, int primitive, int tagNumber) {
+        return (this.tagNumber == tagNumber && this.tagClass == identifierClass && this.primitive == primitive);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (!(obj instanceof BerTag)) {
+            return false;
+        }
+        if (obj == this) {
+            return true;
+        }
+        BerTag berIdentifier = (BerTag) obj;
+        return (tagNumber == berIdentifier.tagNumber && tagClass == berIdentifier.tagClass
+                && primitive == berIdentifier.primitive);
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 17;
+        hash = hash * 31 + tagNumber;
+        hash = hash * 31 + tagClass;
+        hash = hash * 31 + primitive;
+        return hash;
+    }
+
+    @Override
+    public String toString() {
+        return "identifier class: " + tagClass + ", primitive: " + primitive + ", tag number: " + tagNumber;
+    }
+
+}
diff --git a/src/main/java/org.onosproject.xran/codecs/ber/internal/Util.java b/src/main/java/org.onosproject.xran/codecs/ber/internal/Util.java
new file mode 100644
index 0000000..c2d64cc
--- /dev/null
+++ b/src/main/java/org.onosproject.xran/codecs/ber/internal/Util.java
@@ -0,0 +1,28 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package org.onosproject.xran.codecs.ber.internal;
+
+import java.io.EOFException;
+import java.io.IOException;
+import java.io.InputStream;
+
+public class Util {
+
+    public static void readFully(InputStream is, byte[] buffer) throws IOException {
+        readFully(is, buffer, 0, buffer.length);
+    }
+
+    public static void readFully(InputStream is, byte[] buffer, int off, int len) throws IOException {
+        do {
+            int bytesRead = is.read(buffer, off, len);
+            if (bytesRead == -1) {
+                throw new EOFException("Unexpected end of input stream.");
+            }
+
+            len -= bytesRead;
+            off += bytesRead;
+        } while (len > 0);
+    }
+
+}
diff --git a/src/main/java/org.onosproject.xran/codecs/ber/types/BerAny.java b/src/main/java/org.onosproject.xran/codecs/ber/types/BerAny.java
new file mode 100644
index 0000000..db5daee
--- /dev/null
+++ b/src/main/java/org.onosproject.xran/codecs/ber/types/BerAny.java
@@ -0,0 +1,75 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package org.onosproject.xran.codecs.ber.types;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
+import org.onosproject.xran.codecs.ber.internal.Util;
+import org.onosproject.xran.codecs.util.HexConverter;
+
+import javax.xml.bind.DatatypeConverter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Serializable;
+
+public class BerAny implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    public byte[] value;
+
+    public BerAny() {
+    }
+
+    public BerAny(byte[] value) {
+        this.value = value;
+    }
+
+    public int encode(BerByteArrayOutputStream os) throws IOException {
+        os.write(value);
+        return value.length;
+    }
+
+    public int decode(InputStream is) throws IOException {
+
+        return decode(is, null);
+    }
+
+    public int decode(InputStream is, BerTag tag) throws IOException {
+
+        int decodedLength = 0;
+
+        int tagLength;
+
+        if (tag == null) {
+            tag = new BerTag();
+            tagLength = tag.decode(is);
+            decodedLength += tagLength;
+        } else {
+            tagLength = tag.encode(new BerByteArrayOutputStream(10));
+        }
+
+        BerLength lengthField = new BerLength();
+        int lengthLength = lengthField.decode(is);
+        decodedLength += lengthLength + lengthField.val;
+
+        value = new byte[tagLength + lengthLength + lengthField.val];
+
+        Util.readFully(is, value, tagLength + lengthLength, lengthField.val);
+        BerByteArrayOutputStream os = new BerByteArrayOutputStream(value, tagLength + lengthLength - 1);
+        BerLength.encodeLength(os, lengthField.val);
+        tag.encode(os);
+
+        return decodedLength;
+    }
+
+    @JsonValue
+    @Override
+    public String toString() {
+        return DatatypeConverter.printHexBinary(value);
+    }
+
+}
diff --git a/src/main/java/org.onosproject.xran/codecs/ber/types/BerBitString.java b/src/main/java/org.onosproject.xran/codecs/ber/types/BerBitString.java
new file mode 100644
index 0000000..9ebfe14
--- /dev/null
+++ b/src/main/java/org.onosproject.xran/codecs/ber/types/BerBitString.java
@@ -0,0 +1,131 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package org.onosproject.xran.codecs.ber.types;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
+import org.onosproject.xran.codecs.ber.internal.Util;
+import org.onosproject.xran.codecs.util.HexConverter;
+
+import javax.xml.bind.DatatypeConverter;
+import java.io.EOFException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Serializable;
+
+public class BerBitString implements Serializable {
+
+    public final static BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.PRIMITIVE, BerTag.BIT_STRING_TAG);
+    private static final long serialVersionUID = 1L;
+    @JsonIgnore
+    public byte[] code = null;
+
+    public byte[] value;
+    public int numBits;
+
+    public BerBitString() {
+    }
+
+    public BerBitString(byte[] value, int numBits) {
+
+        if (value == null) {
+            throw new NullPointerException("value cannot be null");
+        }
+        if (numBits < 0) {
+            throw new IllegalArgumentException("numBits cannot be negative.");
+        }
+        if (numBits > (value.length * 8)) {
+            throw new IllegalArgumentException("'value' is too short to hold all bits.");
+        }
+
+        this.value = value;
+        this.numBits = numBits;
+
+    }
+
+    public BerBitString(byte[] code) {
+        this.code = code;
+    }
+
+    public int encode(BerByteArrayOutputStream os) throws IOException {
+        return encode(os, true);
+    }
+
+    public int encode(BerByteArrayOutputStream os, boolean withTag) throws IOException {
+
+        if (code != null) {
+            for (int i = code.length - 1; i >= 0; i--) {
+                os.write(code[i]);
+            }
+            if (withTag) {
+                return tag.encode(os) + code.length;
+            }
+            return code.length;
+        }
+
+        for (int i = (value.length - 1); i >= 0; i--) {
+            os.write(value[i]);
+        }
+        os.write(value.length * 8 - numBits);
+
+        int codeLength = value.length + 1;
+
+        codeLength += BerLength.encodeLength(os, codeLength);
+
+        if (withTag) {
+            codeLength += tag.encode(os);
+        }
+
+        return codeLength;
+    }
+
+    public int decode(InputStream is) throws IOException {
+        return decode(is, true);
+    }
+
+    public int decode(InputStream is, boolean withTag) throws IOException {
+        // could be encoded in primitiv and constructed mode
+        // only primitiv mode is implemented
+
+        int codeLength = 0;
+
+        if (withTag) {
+            codeLength += tag.decodeAndCheck(is);
+        }
+
+        BerLength length = new BerLength();
+        codeLength += length.decode(is);
+
+        value = new byte[length.val - 1];
+
+        int unusedBits = is.read();
+        if (unusedBits == -1) {
+            throw new EOFException("Unexpected end of input stream.");
+        }
+        if (unusedBits > 7) {
+            throw new IOException(
+                    "Number of unused bits in bit string expected to be less than 8 but is: " + unusedBits);
+        }
+
+        numBits = (value.length * 8) - unusedBits;
+
+        if (value.length > 0) {
+            Util.readFully(is, value);
+        }
+
+        codeLength += value.length + 1;
+
+        return codeLength;
+
+    }
+
+    @JsonValue
+    @Override
+    public String toString() {
+        return DatatypeConverter.printHexBinary(value);
+    }
+}
diff --git a/src/main/java/org.onosproject.xran/codecs/ber/types/BerBoolean.java b/src/main/java/org.onosproject.xran/codecs/ber/types/BerBoolean.java
new file mode 100644
index 0000000..14e4e5b
--- /dev/null
+++ b/src/main/java/org.onosproject.xran/codecs/ber/types/BerBoolean.java
@@ -0,0 +1,115 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package org.onosproject.xran.codecs.ber.types;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
+
+import java.io.EOFException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Serializable;
+
+public class BerBoolean implements Serializable {
+
+    public final static BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.PRIMITIVE, BerTag.BOOLEAN_TAG);
+    private static final long serialVersionUID = 1L;
+    @JsonIgnore
+    public byte[] code = null;
+
+    public boolean value;
+
+    public BerBoolean() {
+    }
+
+    public BerBoolean(byte[] code) {
+        this.code = code;
+    }
+
+    public BerBoolean(boolean value) {
+        this.value = value;
+    }
+
+    public int encode(BerByteArrayOutputStream os) throws IOException {
+        return encode(os, true);
+    }
+
+    public int encode(BerByteArrayOutputStream os, boolean withTag) throws IOException {
+
+        if (code != null) {
+            for (int i = code.length - 1; i >= 0; i--) {
+                os.write(code[i]);
+            }
+            if (withTag) {
+                return tag.encode(os) + code.length;
+            }
+            return code.length;
+        }
+
+        int codeLength = 1;
+
+        if (value) {
+            os.write(0xff);
+        } else {
+            os.write(0);
+        }
+
+        codeLength += BerLength.encodeLength(os, codeLength);
+
+        if (withTag) {
+            codeLength += tag.encode(os);
+        }
+
+        return codeLength;
+    }
+
+    public int decode(InputStream is) throws IOException {
+        return decode(is, true);
+    }
+
+    public int decode(InputStream is, boolean withTag) throws IOException {
+
+        int codeLength = 0;
+
+        if (withTag) {
+            codeLength += tag.decodeAndCheck(is);
+        }
+
+        BerLength length = new BerLength();
+        codeLength += length.decode(is);
+
+        if (length.val != 1) {
+            throw new IOException("Decoded length of BerBoolean is not correct");
+        }
+
+        int nextByte = is.read();
+        if (nextByte == -1) {
+            throw new EOFException("Unexpected end of input stream.");
+        }
+
+        codeLength++;
+        if (nextByte == 0) {
+            value = false;
+        } else {
+            value = true;
+        }
+
+        return codeLength;
+    }
+
+    public void encodeAndSave(int encodingSizeGuess) throws IOException {
+        BerByteArrayOutputStream os = new BerByteArrayOutputStream(encodingSizeGuess);
+        encode(os, false);
+        code = os.getArray();
+    }
+
+    @JsonValue
+    @Override
+    public String toString() {
+        return "" + value;
+    }
+}
diff --git a/src/main/java/org.onosproject.xran/codecs/ber/types/BerDate.java b/src/main/java/org.onosproject.xran/codecs/ber/types/BerDate.java
new file mode 100644
index 0000000..e6c3362
--- /dev/null
+++ b/src/main/java/org.onosproject.xran/codecs/ber/types/BerDate.java
@@ -0,0 +1,55 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package org.onosproject.xran.codecs.ber.types;
+
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerTag;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+
+public class BerDate extends BerTime {
+
+    public final static BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.PRIMITIVE, BerTag.DATE_TAG);
+    private static final long serialVersionUID = 1L;
+
+    public BerDate() {
+    }
+
+    public BerDate(byte[] value) {
+        super(value);
+    }
+
+    public BerDate(String valueAsString) throws UnsupportedEncodingException {
+        super(valueAsString);
+    }
+
+    @Override
+    public int encode(BerByteArrayOutputStream os, boolean withTag) throws IOException {
+
+        int codeLength = super.encode(os, false);
+
+        if (withTag) {
+            codeLength += tag.encode(os);
+        }
+
+        return codeLength;
+    }
+
+    @Override
+    public int decode(InputStream is, boolean withTag) throws IOException {
+
+        int codeLength = 0;
+
+        if (withTag) {
+            codeLength += tag.decodeAndCheck(is);
+        }
+
+        codeLength += super.decode(is, false);
+
+        return codeLength;
+    }
+
+}
diff --git a/src/main/java/org.onosproject.xran/codecs/ber/types/BerDateTime.java b/src/main/java/org.onosproject.xran/codecs/ber/types/BerDateTime.java
new file mode 100644
index 0000000..7196707
--- /dev/null
+++ b/src/main/java/org.onosproject.xran/codecs/ber/types/BerDateTime.java
@@ -0,0 +1,55 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package org.onosproject.xran.codecs.ber.types;
+
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerTag;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+
+public class BerDateTime extends BerTime {
+
+    public final static BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.PRIMITIVE, BerTag.DATE_TIME_TAG);
+    private static final long serialVersionUID = 1L;
+
+    public BerDateTime() {
+    }
+
+    public BerDateTime(byte[] value) {
+        super(value);
+    }
+
+    public BerDateTime(String valueAsString) throws UnsupportedEncodingException {
+        super(valueAsString);
+    }
+
+    @Override
+    public int encode(BerByteArrayOutputStream os, boolean withTag) throws IOException {
+
+        int codeLength = super.encode(os, false);
+
+        if (withTag) {
+            codeLength += tag.encode(os);
+        }
+
+        return codeLength;
+    }
+
+    @Override
+    public int decode(InputStream is, boolean withTag) throws IOException {
+
+        int codeLength = 0;
+
+        if (withTag) {
+            codeLength += tag.decodeAndCheck(is);
+        }
+
+        codeLength += super.decode(is, false);
+
+        return codeLength;
+    }
+
+}
diff --git a/src/main/java/org.onosproject.xran/codecs/ber/types/BerDuration.java b/src/main/java/org.onosproject.xran/codecs/ber/types/BerDuration.java
new file mode 100644
index 0000000..6203472
--- /dev/null
+++ b/src/main/java/org.onosproject.xran/codecs/ber/types/BerDuration.java
@@ -0,0 +1,55 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package org.onosproject.xran.codecs.ber.types;
+
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerTag;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+
+public class BerDuration extends BerTime {
+
+    public final static BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.PRIMITIVE, BerTag.DURATION_TAG);
+    private static final long serialVersionUID = 1L;
+
+    public BerDuration() {
+    }
+
+    public BerDuration(byte[] value) {
+        super(value);
+    }
+
+    public BerDuration(String valueAsString) throws UnsupportedEncodingException {
+        super(valueAsString);
+    }
+
+    @Override
+    public int encode(BerByteArrayOutputStream os, boolean withTag) throws IOException {
+
+        int codeLength = super.encode(os, false);
+
+        if (withTag) {
+            codeLength += tag.encode(os);
+        }
+
+        return codeLength;
+    }
+
+    @Override
+    public int decode(InputStream is, boolean withTag) throws IOException {
+
+        int codeLength = 0;
+
+        if (withTag) {
+            codeLength += tag.decodeAndCheck(is);
+        }
+
+        codeLength += super.decode(is, false);
+
+        return codeLength;
+    }
+
+}
diff --git a/src/main/java/org.onosproject.xran/codecs/ber/types/BerEmbeddedPdv.java b/src/main/java/org.onosproject.xran/codecs/ber/types/BerEmbeddedPdv.java
new file mode 100644
index 0000000..e9bc9af
--- /dev/null
+++ b/src/main/java/org.onosproject.xran/codecs/ber/types/BerEmbeddedPdv.java
@@ -0,0 +1,747 @@
+/**
+ * This class file was automatically generated by jASN1 v1.7.2-SNAPSHOT (http://www.openmuc.org)
+ */
+
+package org.onosproject.xran.codecs.ber.types;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
+import org.onosproject.xran.codecs.ber.types.string.BerObjectDescriptor;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Serializable;
+
+public class BerEmbeddedPdv implements Serializable {
+
+    public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 11);
+    private static final long serialVersionUID = 1L;
+    @JsonIgnore public byte[] code = null;
+    private Identification identification = null;
+    private BerObjectDescriptor dataValueDescriptor = null;
+    private BerOctetString dataValue = null;
+    public BerEmbeddedPdv() {
+    }
+
+    public BerEmbeddedPdv(byte[] code) {
+        this.code = code;
+    }
+
+    public Identification getIdentification() {
+        return identification;
+    }
+
+    public void setIdentification(Identification identification) {
+        this.identification = identification;
+    }
+
+    public BerObjectDescriptor getDataValueDescriptor() {
+        return dataValueDescriptor;
+    }
+
+    public void setDataValueDescriptor(BerObjectDescriptor dataValueDescriptor) {
+        this.dataValueDescriptor = dataValueDescriptor;
+    }
+
+    public BerOctetString getDataValue() {
+        return dataValue;
+    }
+
+    public void setDataValue(BerOctetString dataValue) {
+        this.dataValue = dataValue;
+    }
+
+    public int encode(BerByteArrayOutputStream os) throws IOException {
+        return encode(os, true);
+    }
+
+    public int encode(BerByteArrayOutputStream os, boolean withTag) throws IOException {
+
+        if (code != null) {
+            for (int i = code.length - 1; i >= 0; i--) {
+                os.write(code[i]);
+            }
+            if (withTag) {
+                return tag.encode(os) + code.length;
+            }
+            return code.length;
+        }
+
+        int codeLength = 0;
+        int sublength;
+
+        codeLength += dataValue.encode(os, false);
+        // write tag: CONTEXT_CLASS, PRIMITIVE, 2
+        os.write(0x82);
+        codeLength += 1;
+
+        if (dataValueDescriptor != null) {
+            codeLength += dataValueDescriptor.encode(os, false);
+            // write tag: CONTEXT_CLASS, PRIMITIVE, 1
+            os.write(0x81);
+            codeLength += 1;
+        }
+
+        sublength = identification.encode(os);
+        codeLength += sublength;
+        codeLength += BerLength.encodeLength(os, sublength);
+        // write tag: CONTEXT_CLASS, CONSTRUCTED, 0
+        os.write(0xA0);
+        codeLength += 1;
+
+        codeLength += BerLength.encodeLength(os, codeLength);
+
+        if (withTag) {
+            codeLength += tag.encode(os);
+        }
+
+        return codeLength;
+
+    }
+
+    public int decode(InputStream is) throws IOException {
+        return decode(is, true);
+    }
+
+    public int decode(InputStream is, boolean withTag) throws IOException {
+        int codeLength = 0;
+        int subCodeLength = 0;
+        BerTag berTag = new BerTag();
+
+        if (withTag) {
+            codeLength += tag.decodeAndCheck(is);
+        }
+
+        BerLength length = new BerLength();
+        codeLength += length.decode(is);
+
+        int totalLength = length.val;
+        codeLength += totalLength;
+
+        subCodeLength += berTag.decode(is);
+        if (berTag.equals(BerTag.CONTEXT_CLASS, BerTag.CONSTRUCTED, 0)) {
+            subCodeLength += length.decode(is);
+            identification = new Identification();
+            subCodeLength += identification.decode(is, null);
+            subCodeLength += berTag.decode(is);
+        } else {
+            throw new IOException("Tag does not match the mandatory sequence element tag.");
+        }
+
+        if (berTag.equals(BerTag.CONTEXT_CLASS, BerTag.PRIMITIVE, 1)) {
+            dataValueDescriptor = new BerObjectDescriptor();
+            subCodeLength += dataValueDescriptor.decode(is, false);
+            subCodeLength += berTag.decode(is);
+        }
+
+        if (berTag.equals(BerTag.CONTEXT_CLASS, BerTag.PRIMITIVE, 2)) {
+            dataValue = new BerOctetString();
+            subCodeLength += dataValue.decode(is, false);
+            if (subCodeLength == totalLength) {
+                return codeLength;
+            }
+        }
+        throw new IOException("Unexpected end of sequence, length tag: " + totalLength + ", actual sequence length: "
+                + subCodeLength);
+
+    }
+
+    public void encodeAndSave(int encodingSizeGuess) throws IOException {
+        BerByteArrayOutputStream os = new BerByteArrayOutputStream(encodingSizeGuess);
+        encode(os, false);
+        code = os.getArray();
+    }
+
+    @JsonValue
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        appendAsString(sb, 0);
+        return sb.toString();
+    }
+
+    public void appendAsString(StringBuilder sb, int indentLevel) {
+
+        sb.append("{");
+        sb.append("\n");
+        for (int i = 0; i < indentLevel + 1; i++) {
+            sb.append("\t");
+        }
+        if (identification != null) {
+            sb.append("identification: ");
+            identification.appendAsString(sb, indentLevel + 1);
+        } else {
+            sb.append("identification: <empty-required-field>");
+        }
+
+        if (dataValueDescriptor != null) {
+            sb.append(",\n");
+            for (int i = 0; i < indentLevel + 1; i++) {
+                sb.append("\t");
+            }
+            sb.append("dataValueDescriptor: ").append(dataValueDescriptor);
+        }
+
+        sb.append(",\n");
+        for (int i = 0; i < indentLevel + 1; i++) {
+            sb.append("\t");
+        }
+        if (dataValue != null) {
+            sb.append("dataValue: ").append(dataValue);
+        } else {
+            sb.append("dataValue: <empty-required-field>");
+        }
+
+        sb.append("\n");
+        for (int i = 0; i < indentLevel; i++) {
+            sb.append("\t");
+        }
+        sb.append("}");
+    }
+
+    public static class Identification implements Serializable {
+
+        private static final long serialVersionUID = 1L;
+
+        @JsonIgnore
+        public byte[] code = null;
+        private Syntaxes syntaxes = null;
+        private BerObjectIdentifier syntax = null;
+        private BerInteger presentationContextId = null;
+        private ContextNegotiation contextNegotiation = null;
+        private BerObjectIdentifier transferSyntax = null;
+        private BerNull fixed = null;
+        public Identification() {
+        }
+        public Identification(byte[] code) {
+            this.code = code;
+        }
+
+        public Syntaxes getSyntaxes() {
+            return syntaxes;
+        }
+
+        public void setSyntaxes(Syntaxes syntaxes) {
+            this.syntaxes = syntaxes;
+        }
+
+        public BerObjectIdentifier getSyntax() {
+            return syntax;
+        }
+
+        public void setSyntax(BerObjectIdentifier syntax) {
+            this.syntax = syntax;
+        }
+
+        public BerInteger getPresentationContextId() {
+            return presentationContextId;
+        }
+
+        public void setPresentationContextId(BerInteger presentationContextId) {
+            this.presentationContextId = presentationContextId;
+        }
+
+        public ContextNegotiation getContextNegotiation() {
+            return contextNegotiation;
+        }
+
+        public void setContextNegotiation(ContextNegotiation contextNegotiation) {
+            this.contextNegotiation = contextNegotiation;
+        }
+
+        public BerObjectIdentifier getTransferSyntax() {
+            return transferSyntax;
+        }
+
+        public void setTransferSyntax(BerObjectIdentifier transferSyntax) {
+            this.transferSyntax = transferSyntax;
+        }
+
+        public BerNull getFixed() {
+            return fixed;
+        }
+
+        public void setFixed(BerNull fixed) {
+            this.fixed = fixed;
+        }
+
+        public int encode(BerByteArrayOutputStream os) throws IOException {
+
+            if (code != null) {
+                for (int i = code.length - 1; i >= 0; i--) {
+                    os.write(code[i]);
+                }
+                return code.length;
+            }
+
+            int codeLength = 0;
+            if (fixed != null) {
+                codeLength += fixed.encode(os, false);
+                // write tag: CONTEXT_CLASS, PRIMITIVE, 5
+                os.write(0x85);
+                codeLength += 1;
+                return codeLength;
+            }
+
+            if (transferSyntax != null) {
+                codeLength += transferSyntax.encode(os, false);
+                // write tag: CONTEXT_CLASS, PRIMITIVE, 4
+                os.write(0x84);
+                codeLength += 1;
+                return codeLength;
+            }
+
+            if (contextNegotiation != null) {
+                codeLength += contextNegotiation.encode(os, false);
+                // write tag: CONTEXT_CLASS, CONSTRUCTED, 3
+                os.write(0xA3);
+                codeLength += 1;
+                return codeLength;
+            }
+
+            if (presentationContextId != null) {
+                codeLength += presentationContextId.encode(os, false);
+                // write tag: CONTEXT_CLASS, PRIMITIVE, 2
+                os.write(0x82);
+                codeLength += 1;
+                return codeLength;
+            }
+
+            if (syntax != null) {
+                codeLength += syntax.encode(os, false);
+                // write tag: CONTEXT_CLASS, PRIMITIVE, 1
+                os.write(0x81);
+                codeLength += 1;
+                return codeLength;
+            }
+
+            if (syntaxes != null) {
+                codeLength += syntaxes.encode(os, false);
+                // write tag: CONTEXT_CLASS, CONSTRUCTED, 0
+                os.write(0xA0);
+                codeLength += 1;
+                return codeLength;
+            }
+
+            throw new IOException("Error encoding CHOICE: No element of CHOICE was selected.");
+        }
+
+        public int decode(InputStream is) throws IOException {
+            return decode(is, null);
+        }
+
+        public int decode(InputStream is, BerTag berTag) throws IOException {
+
+            int codeLength = 0;
+            BerTag passedTag = berTag;
+
+            if (berTag == null) {
+                berTag = new BerTag();
+                codeLength += berTag.decode(is);
+            }
+
+            if (berTag.equals(BerTag.CONTEXT_CLASS, BerTag.CONSTRUCTED, 0)) {
+                syntaxes = new Syntaxes();
+                codeLength += syntaxes.decode(is, false);
+                return codeLength;
+            }
+
+            if (berTag.equals(BerTag.CONTEXT_CLASS, BerTag.PRIMITIVE, 1)) {
+                syntax = new BerObjectIdentifier();
+                codeLength += syntax.decode(is, false);
+                return codeLength;
+            }
+
+            if (berTag.equals(BerTag.CONTEXT_CLASS, BerTag.PRIMITIVE, 2)) {
+                presentationContextId = new BerInteger();
+                codeLength += presentationContextId.decode(is, false);
+                return codeLength;
+            }
+
+            if (berTag.equals(BerTag.CONTEXT_CLASS, BerTag.CONSTRUCTED, 3)) {
+                contextNegotiation = new ContextNegotiation();
+                codeLength += contextNegotiation.decode(is, false);
+                return codeLength;
+            }
+
+            if (berTag.equals(BerTag.CONTEXT_CLASS, BerTag.PRIMITIVE, 4)) {
+                transferSyntax = new BerObjectIdentifier();
+                codeLength += transferSyntax.decode(is, false);
+                return codeLength;
+            }
+
+            if (berTag.equals(BerTag.CONTEXT_CLASS, BerTag.PRIMITIVE, 5)) {
+                fixed = new BerNull();
+                codeLength += fixed.decode(is, false);
+                return codeLength;
+            }
+
+            if (passedTag != null) {
+                return 0;
+            }
+
+            throw new IOException("Error decoding CHOICE: Tag " + berTag + " matched to no item.");
+        }
+
+        public void encodeAndSave(int encodingSizeGuess) throws IOException {
+            BerByteArrayOutputStream os = new BerByteArrayOutputStream(encodingSizeGuess);
+            encode(os);
+            code = os.getArray();
+        }
+
+        @Override
+        public String toString() {
+            StringBuilder sb = new StringBuilder();
+            appendAsString(sb, 0);
+            return sb.toString();
+        }
+
+        public void appendAsString(StringBuilder sb, int indentLevel) {
+
+            if (syntaxes != null) {
+                sb.append("syntaxes: ");
+                syntaxes.appendAsString(sb, indentLevel + 1);
+                return;
+            }
+
+            if (syntax != null) {
+                sb.append("syntax: ").append(syntax);
+                return;
+            }
+
+            if (presentationContextId != null) {
+                sb.append("presentationContextId: ").append(presentationContextId);
+                return;
+            }
+
+            if (contextNegotiation != null) {
+                sb.append("contextNegotiation: ");
+                contextNegotiation.appendAsString(sb, indentLevel + 1);
+                return;
+            }
+
+            if (transferSyntax != null) {
+                sb.append("transferSyntax: ").append(transferSyntax);
+                return;
+            }
+
+            if (fixed != null) {
+                sb.append("fixed: ").append(fixed);
+                return;
+            }
+
+            sb.append("<none>");
+        }
+
+        public static class Syntaxes implements Serializable {
+
+            public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
+            private static final long serialVersionUID = 1L;
+            @JsonIgnore public byte[] code = null;
+            private BerObjectIdentifier abstract_ = null;
+            private BerObjectIdentifier transfer = null;
+
+            public Syntaxes() {
+            }
+
+            public Syntaxes(byte[] code) {
+                this.code = code;
+            }
+
+            public BerObjectIdentifier getAbstract() {
+                return abstract_;
+            }
+
+            public void setAbstract(BerObjectIdentifier abstract_) {
+                this.abstract_ = abstract_;
+            }
+
+            public BerObjectIdentifier getTransfer() {
+                return transfer;
+            }
+
+            public void setTransfer(BerObjectIdentifier transfer) {
+                this.transfer = transfer;
+            }
+
+            public int encode(BerByteArrayOutputStream os) throws IOException {
+                return encode(os, true);
+            }
+
+            public int encode(BerByteArrayOutputStream os, boolean withTag) throws IOException {
+
+                if (code != null) {
+                    for (int i = code.length - 1; i >= 0; i--) {
+                        os.write(code[i]);
+                    }
+                    if (withTag) {
+                        return tag.encode(os) + code.length;
+                    }
+                    return code.length;
+                }
+
+                int codeLength = 0;
+                codeLength += transfer.encode(os, false);
+                // write tag: CONTEXT_CLASS, PRIMITIVE, 1
+                os.write(0x81);
+                codeLength += 1;
+
+                codeLength += abstract_.encode(os, false);
+                // write tag: CONTEXT_CLASS, PRIMITIVE, 0
+                os.write(0x80);
+                codeLength += 1;
+
+                codeLength += BerLength.encodeLength(os, codeLength);
+
+                if (withTag) {
+                    codeLength += tag.encode(os);
+                }
+
+                return codeLength;
+
+            }
+
+            public int decode(InputStream is) throws IOException {
+                return decode(is, true);
+            }
+
+            public int decode(InputStream is, boolean withTag) throws IOException {
+                int codeLength = 0;
+                int subCodeLength = 0;
+                BerTag berTag = new BerTag();
+
+                if (withTag) {
+                    codeLength += tag.decodeAndCheck(is);
+                }
+
+                BerLength length = new BerLength();
+                codeLength += length.decode(is);
+
+                int totalLength = length.val;
+                codeLength += totalLength;
+
+                subCodeLength += berTag.decode(is);
+                if (berTag.equals(BerTag.CONTEXT_CLASS, BerTag.PRIMITIVE, 0)) {
+                    abstract_ = new BerObjectIdentifier();
+                    subCodeLength += abstract_.decode(is, false);
+                    subCodeLength += berTag.decode(is);
+                } else {
+                    throw new IOException("Tag does not match the mandatory sequence element tag.");
+                }
+
+                if (berTag.equals(BerTag.CONTEXT_CLASS, BerTag.PRIMITIVE, 1)) {
+                    transfer = new BerObjectIdentifier();
+                    subCodeLength += transfer.decode(is, false);
+                    if (subCodeLength == totalLength) {
+                        return codeLength;
+                    }
+                }
+                throw new IOException("Unexpected end of sequence, length tag: " + totalLength
+                        + ", actual sequence length: " + subCodeLength);
+
+            }
+
+            public void encodeAndSave(int encodingSizeGuess) throws IOException {
+                BerByteArrayOutputStream os = new BerByteArrayOutputStream(encodingSizeGuess);
+                encode(os, false);
+                code = os.getArray();
+            }
+
+            @Override
+            public String toString() {
+                StringBuilder sb = new StringBuilder();
+                appendAsString(sb, 0);
+                return sb.toString();
+            }
+
+            public void appendAsString(StringBuilder sb, int indentLevel) {
+
+                sb.append("{");
+                sb.append("\n");
+                for (int i = 0; i < indentLevel + 1; i++) {
+                    sb.append("\t");
+                }
+                if (abstract_ != null) {
+                    sb.append("abstract_: ").append(abstract_);
+                } else {
+                    sb.append("abstract_: <empty-required-field>");
+                }
+
+                sb.append(",\n");
+                for (int i = 0; i < indentLevel + 1; i++) {
+                    sb.append("\t");
+                }
+                if (transfer != null) {
+                    sb.append("transfer: ").append(transfer);
+                } else {
+                    sb.append("transfer: <empty-required-field>");
+                }
+
+                sb.append("\n");
+                for (int i = 0; i < indentLevel; i++) {
+                    sb.append("\t");
+                }
+                sb.append("}");
+            }
+
+        }
+
+        public static class ContextNegotiation implements Serializable {
+
+            public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
+            private static final long serialVersionUID = 1L;
+            @JsonIgnore public byte[] code = null;
+            private BerInteger presentationContextId = null;
+            private BerObjectIdentifier transferSyntax = null;
+
+            public ContextNegotiation() {
+            }
+
+            public ContextNegotiation(byte[] code) {
+                this.code = code;
+            }
+
+            public BerInteger getPresentationContextId() {
+                return presentationContextId;
+            }
+
+            public void setPresentationContextId(BerInteger presentationContextId) {
+                this.presentationContextId = presentationContextId;
+            }
+
+            public BerObjectIdentifier getTransferSyntax() {
+                return transferSyntax;
+            }
+
+            public void setTransferSyntax(BerObjectIdentifier transferSyntax) {
+                this.transferSyntax = transferSyntax;
+            }
+
+            public int encode(BerByteArrayOutputStream os) throws IOException {
+                return encode(os, true);
+            }
+
+            public int encode(BerByteArrayOutputStream os, boolean withTag) throws IOException {
+
+                if (code != null) {
+                    for (int i = code.length - 1; i >= 0; i--) {
+                        os.write(code[i]);
+                    }
+                    if (withTag) {
+                        return tag.encode(os) + code.length;
+                    }
+                    return code.length;
+                }
+
+                int codeLength = 0;
+                codeLength += transferSyntax.encode(os, false);
+                // write tag: CONTEXT_CLASS, PRIMITIVE, 1
+                os.write(0x81);
+                codeLength += 1;
+
+                codeLength += presentationContextId.encode(os, false);
+                // write tag: CONTEXT_CLASS, PRIMITIVE, 0
+                os.write(0x80);
+                codeLength += 1;
+
+                codeLength += BerLength.encodeLength(os, codeLength);
+
+                if (withTag) {
+                    codeLength += tag.encode(os);
+                }
+
+                return codeLength;
+
+            }
+
+            public int decode(InputStream is) throws IOException {
+                return decode(is, true);
+            }
+
+            public int decode(InputStream is, boolean withTag) throws IOException {
+                int codeLength = 0;
+                int subCodeLength = 0;
+                BerTag berTag = new BerTag();
+
+                if (withTag) {
+                    codeLength += tag.decodeAndCheck(is);
+                }
+
+                BerLength length = new BerLength();
+                codeLength += length.decode(is);
+
+                int totalLength = length.val;
+                codeLength += totalLength;
+
+                subCodeLength += berTag.decode(is);
+                if (berTag.equals(BerTag.CONTEXT_CLASS, BerTag.PRIMITIVE, 0)) {
+                    presentationContextId = new BerInteger();
+                    subCodeLength += presentationContextId.decode(is, false);
+                    subCodeLength += berTag.decode(is);
+                } else {
+                    throw new IOException("Tag does not match the mandatory sequence element tag.");
+                }
+
+                if (berTag.equals(BerTag.CONTEXT_CLASS, BerTag.PRIMITIVE, 1)) {
+                    transferSyntax = new BerObjectIdentifier();
+                    subCodeLength += transferSyntax.decode(is, false);
+                    if (subCodeLength == totalLength) {
+                        return codeLength;
+                    }
+                }
+                throw new IOException("Unexpected end of sequence, length tag: " + totalLength
+                        + ", actual sequence length: " + subCodeLength);
+
+            }
+
+            public void encodeAndSave(int encodingSizeGuess) throws IOException {
+                BerByteArrayOutputStream os = new BerByteArrayOutputStream(encodingSizeGuess);
+                encode(os, false);
+                code = os.getArray();
+            }
+
+            @Override
+            public String toString() {
+                StringBuilder sb = new StringBuilder();
+                appendAsString(sb, 0);
+                return sb.toString();
+            }
+
+            public void appendAsString(StringBuilder sb, int indentLevel) {
+
+                sb.append("{");
+                sb.append("\n");
+                for (int i = 0; i < indentLevel + 1; i++) {
+                    sb.append("\t");
+                }
+                if (presentationContextId != null) {
+                    sb.append("presentationContextId: ").append(presentationContextId);
+                } else {
+                    sb.append("presentationContextId: <empty-required-field>");
+                }
+
+                sb.append(",\n");
+                for (int i = 0; i < indentLevel + 1; i++) {
+                    sb.append("\t");
+                }
+                if (transferSyntax != null) {
+                    sb.append("transferSyntax: ").append(transferSyntax);
+                } else {
+                    sb.append("transferSyntax: <empty-required-field>");
+                }
+
+                sb.append("\n");
+                for (int i = 0; i < indentLevel; i++) {
+                    sb.append("\t");
+                }
+                sb.append("}");
+            }
+
+        }
+
+    }
+
+}
diff --git a/src/main/java/org.onosproject.xran/codecs/ber/types/BerEnum.java b/src/main/java/org.onosproject.xran/codecs/ber/types/BerEnum.java
new file mode 100644
index 0000000..ea97be5
--- /dev/null
+++ b/src/main/java/org.onosproject.xran/codecs/ber/types/BerEnum.java
@@ -0,0 +1,59 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package org.onosproject.xran.codecs.ber.types;
+
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerTag;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.math.BigInteger;
+
+public class BerEnum extends BerInteger {
+
+    public final static BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.PRIMITIVE, BerTag.ENUMERATED_TAG);
+    private static final long serialVersionUID = 1L;
+
+    public BerEnum() {
+    }
+
+    public BerEnum(byte[] code) {
+        this.code = code;
+    }
+
+    public BerEnum(BigInteger val) {
+        this.value = val;
+    }
+
+    public BerEnum(long val) {
+        this.value = BigInteger.valueOf(val);
+    }
+
+    @Override
+    public int encode(BerByteArrayOutputStream os, boolean withTag) throws IOException {
+
+        int codeLength = super.encode(os, false);
+
+        if (withTag) {
+            codeLength += tag.encode(os);
+        }
+
+        return codeLength;
+    }
+
+    @Override
+    public int decode(InputStream is, boolean withTag) throws IOException {
+
+        int codeLength = 0;
+
+        if (withTag) {
+            codeLength += tag.decodeAndCheck(is);
+        }
+
+        codeLength += super.decode(is, false);
+
+        return codeLength;
+    }
+
+}
diff --git a/src/main/java/org.onosproject.xran/codecs/ber/types/BerGeneralizedTime.java b/src/main/java/org.onosproject.xran/codecs/ber/types/BerGeneralizedTime.java
new file mode 100644
index 0000000..00f3340
--- /dev/null
+++ b/src/main/java/org.onosproject.xran/codecs/ber/types/BerGeneralizedTime.java
@@ -0,0 +1,133 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package org.onosproject.xran.codecs.ber.types;
+
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerTag;
+import org.onosproject.xran.codecs.ber.types.string.BerVisibleString;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.text.ParseException;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.TimeZone;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class BerGeneralizedTime extends BerVisibleString {
+
+    public final static BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.PRIMITIVE, BerTag.GENERALIZED_TIME_TAG);
+    private static final long serialVersionUID = 1L;
+    /*
+     * Generalized time is one of the following (ITU-T X.680 08/2015): YYYYMMDDHH[MM[SS]][.fff] LocalTime
+     * YYYYMMDDHH[MM[SS]][.fff]Z UTC YYYYMMDDHH[MM[SS]][.fff]+-HH[MM] local time with time zone
+     *
+     * Regexp: ^ (?<year>\\d{4}) YYYY (?<month>\\d{2}) MM (?<day>\\d{2}) DD (?<hour>\\d{2}) HH ( [MM[SS]]
+     * (?<minute>\\d{2}) MM (?<second>\\d{2})? [SS] )? ([.,](?<frac>\\d+))? [.fff] (or [,fff]) (?<timezone> "" or "Z" or
+     * "+-HH[MM]" Z | ( "+-HH[MM]" [+-] "+-" \\d{2}(?<tzmin>\\d{2})? HH[MM] ) )? $
+     */
+    private final static String GENERALIZED_TIME_PATTERN = "^(?<year>\\d{4})(?<month>\\d{2})(?<day>\\d{2})(?<hour>\\d{2})((?<minute>\\d{2})(?<second>\\d{2})?)?([.,](?<frac>\\d+))?(?<timezone>Z|([+-]\\d{2}(?<tzmin>\\d{2})?))?$";
+    private final static Pattern generalizedTimePattern = Pattern.compile(GENERALIZED_TIME_PATTERN);
+
+    public BerGeneralizedTime() {
+    }
+
+    public BerGeneralizedTime(byte[] value) {
+        super(value);
+    }
+
+    public BerGeneralizedTime(String valueAsString) {
+        super(valueAsString);
+    }
+
+    @Override
+    public int encode(BerByteArrayOutputStream os, boolean withTag) throws IOException {
+
+        int codeLength = super.encode(os, false);
+
+        if (withTag) {
+            codeLength += tag.encode(os);
+        }
+
+        return codeLength;
+    }
+
+    @Override
+    public int decode(InputStream is, boolean withTag) throws IOException {
+
+        int codeLength = 0;
+
+        if (withTag) {
+            codeLength += tag.decodeAndCheck(is);
+        }
+
+        codeLength += super.decode(is, false);
+
+        return codeLength;
+    }
+
+    Calendar asCalendar() throws ParseException {
+
+        Matcher matcher = generalizedTimePattern.matcher(toString());
+
+        if (!matcher.find()) {
+            throw new ParseException("", 0);
+        }
+
+        String mg, mgf;
+        int year = Integer.valueOf(matcher.group("year"));
+        int month = Integer.valueOf(matcher.group("month"));
+        month -= 1; // java.util.Calendar's month goes from 0 to 11
+        int day = Integer.valueOf(matcher.group("day"));
+        int hour = Integer.valueOf(matcher.group("hour"));
+
+        mg = matcher.group("minute");
+        mgf = matcher.group("frac");
+        int minute = 0, second = 0, millisec = 0;
+        double frac = mgf == null ? 0 : Double.valueOf("0." + mgf);
+        if (mg == null) {
+            // Missing minutes and seconds
+            if (mgf != null) {
+                // frac is a fraction of a hour
+                millisec = (int) Math.round(1000 * 60 * 60 * frac);
+            }
+        } else {
+            minute = Integer.valueOf(mg);
+            mg = matcher.group("second");
+            if (mg == null) {
+                // Missing seconds
+                if (mgf != null) {
+                    // frac is a fraction of a minute
+                    millisec = (int) Math.round(1000 * 60 * frac);
+                }
+            } else {
+                second = Integer.valueOf(mg);
+                if (mgf != null) {
+                    // frac is a fraction of a second
+                    millisec = (int) Math.round(1000 * frac);
+                }
+            }
+        }
+
+        mg = matcher.group("timezone");
+        String mgt = matcher.group("tzmin");
+        String timeZoneStr = mg == null ? TimeZone.getDefault().getID()
+                : (mg.equals("Z") ? "UTC" : (mgt == null ? "GMT" + mg + "00" : "GMT" + mg));
+        TimeZone timeZone = TimeZone.getTimeZone(timeZoneStr);
+
+        Calendar calendar = Calendar.getInstance();
+        calendar.setLenient(true); // accept millisec greater than 999
+        calendar.set(year, month, day, hour, minute, second);
+        calendar.set(Calendar.MILLISECOND, millisec);
+        calendar.setTimeZone(timeZone);
+
+        return calendar;
+    }
+
+    Date asDate() throws ParseException {
+        return asCalendar().getTime();
+    }
+
+}
diff --git a/src/main/java/org.onosproject.xran/codecs/ber/types/BerInteger.java b/src/main/java/org.onosproject.xran/codecs/ber/types/BerInteger.java
new file mode 100644
index 0000000..c22cd4d
--- /dev/null
+++ b/src/main/java/org.onosproject.xran/codecs/ber/types/BerInteger.java
@@ -0,0 +1,128 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package org.onosproject.xran.codecs.ber.types;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
+import org.onosproject.xran.codecs.ber.internal.Util;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Serializable;
+import java.math.BigInteger;
+
+public class BerInteger implements Serializable {
+
+    public final static BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.PRIMITIVE, BerTag.INTEGER_TAG);
+    private static final long serialVersionUID = 1L;
+    @JsonIgnore
+    public byte[] code = null;
+
+    public BigInteger value;
+
+    public BerInteger() {
+    }
+
+    public BerInteger(byte[] code) {
+        this.code = code;
+    }
+
+    public BerInteger(BigInteger val) {
+        this.value = val;
+    }
+
+    public BerInteger(long val) {
+        this.value = BigInteger.valueOf(val);
+    }
+
+    public int encode(BerByteArrayOutputStream os) throws IOException {
+        return encode(os, true);
+    }
+
+    public int encode(BerByteArrayOutputStream os, boolean withTag) throws IOException {
+
+        if (code != null) {
+            for (int i = code.length - 1; i >= 0; i--) {
+                os.write(code[i]);
+            }
+            if (withTag) {
+                return tag.encode(os) + code.length;
+            }
+            return code.length;
+        }
+
+        byte[] encoded = value.toByteArray();
+        int codeLength = encoded.length;
+        os.write(encoded);
+
+        codeLength += BerLength.encodeLength(os, codeLength);
+
+        if (withTag) {
+            codeLength += tag.encode(os);
+        }
+
+        return codeLength;
+    }
+
+    public int decode(InputStream is) throws IOException {
+        return decode(is, true);
+    }
+
+    public int decode(InputStream is, boolean withTag) throws IOException {
+
+        int codeLength = 0;
+
+        if (withTag) {
+            codeLength += tag.decodeAndCheck(is);
+        }
+
+        BerLength length = new BerLength();
+        codeLength += length.decode(is);
+
+        if (length.val < 1) {
+            throw new IOException("Decoded length of BerInteger is not correct");
+        }
+
+        byte[] byteCode = new byte[length.val];
+        Util.readFully(is, byteCode);
+
+        codeLength += length.val;
+
+        value = new BigInteger(byteCode);
+
+        return codeLength;
+    }
+
+    public void encodeAndSave(int encodingSizeGuess) throws IOException {
+        BerByteArrayOutputStream os = new BerByteArrayOutputStream(encodingSizeGuess);
+        encode(os, false);
+        code = os.getArray();
+    }
+
+    @JsonValue
+    @Override
+    public String toString() {
+        return "" + value;
+    }
+
+    public byte byteValue() {
+        return value.byteValue();
+    }
+
+    public short shortValue() {
+        return value.shortValue();
+    }
+
+    public int intValue() {
+        return value.intValue();
+    }
+
+    public long longValue() {
+        return value.longValue();
+    }
+
+}
diff --git a/src/main/java/org.onosproject.xran/codecs/ber/types/BerNull.java b/src/main/java/org.onosproject.xran/codecs/ber/types/BerNull.java
new file mode 100644
index 0000000..6437d0b
--- /dev/null
+++ b/src/main/java/org.onosproject.xran/codecs/ber/types/BerNull.java
@@ -0,0 +1,72 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package org.onosproject.xran.codecs.ber.types;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Serializable;
+
+public class BerNull implements Serializable {
+
+    public final static BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.PRIMITIVE, BerTag.NULL_TAG);
+    private static final long serialVersionUID = 1L;
+    @JsonIgnore
+    public byte[] code = null;
+
+    public BerNull() {
+    }
+
+    public BerNull(byte[] code) {
+    }
+
+    public int encode(BerByteArrayOutputStream os) throws IOException {
+        return encode(os, true);
+    }
+
+    public int encode(BerByteArrayOutputStream os, boolean withTag) throws IOException {
+
+        int codeLength = BerLength.encodeLength(os, 0);
+
+        if (withTag) {
+            codeLength += tag.encode(os);
+        }
+
+        return codeLength;
+    }
+
+    public int decode(InputStream is) throws IOException {
+        return decode(is, true);
+    }
+
+    public int decode(InputStream is, boolean withTag) throws IOException {
+
+        int codeLength = 0;
+
+        if (withTag) {
+            codeLength += tag.decodeAndCheck(is);
+        }
+
+        BerLength length = new BerLength();
+        codeLength += length.decode(is);
+
+        if (length.val != 0) {
+            throw new IOException("Decoded length of BerNull is not correct");
+        }
+
+        return codeLength;
+    }
+
+    @JsonValue
+    @Override
+    public String toString() {
+        return "ASN1_NULL";
+    }
+
+}
diff --git a/src/main/java/org.onosproject.xran/codecs/ber/types/BerObjectIdentifier.java b/src/main/java/org.onosproject.xran/codecs/ber/types/BerObjectIdentifier.java
new file mode 100644
index 0000000..d1cf4ba
--- /dev/null
+++ b/src/main/java/org.onosproject.xran/codecs/ber/types/BerObjectIdentifier.java
@@ -0,0 +1,209 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package org.onosproject.xran.codecs.ber.types;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
+import org.onosproject.xran.codecs.ber.internal.Util;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+public class BerObjectIdentifier implements Serializable {
+
+    public final static BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.PRIMITIVE, BerTag.OBJECT_IDENTIFIER_TAG);
+    private static final long serialVersionUID = 1L;
+    @JsonIgnore
+    public byte[] code = null;
+
+    public int[] value;
+
+    public BerObjectIdentifier() {
+    }
+
+    public BerObjectIdentifier(byte[] code) {
+        this.code = code;
+    }
+
+    public BerObjectIdentifier(int[] value) {
+        if ((value.length < 2) || ((value[0] == 0 || value[0] == 1) && (value[1] > 39)) || value[0] > 2) {
+            throw new IllegalArgumentException("invalid object identifier components");
+        }
+        for (int objectIdentifierComponent : value) {
+            if (objectIdentifierComponent < 0) {
+                throw new IllegalArgumentException("invalid object identifier components");
+            }
+        }
+
+        this.value = value;
+
+    }
+
+    public int encode(BerByteArrayOutputStream os) throws IOException {
+        return encode(os, true);
+    }
+
+    public int encode(BerByteArrayOutputStream os, boolean withTag) throws IOException {
+
+        if (code != null) {
+            for (int i = code.length - 1; i >= 0; i--) {
+                os.write(code[i]);
+            }
+            if (withTag) {
+                return tag.encode(os) + code.length;
+            }
+            return code.length;
+        }
+
+        int firstSubidentifier = 40 * value[0] + value[1];
+
+        int subidentifier;
+
+        int codeLength = 0;
+
+        for (int i = (value.length - 1); i > 0; i--) {
+
+            if (i == 1) {
+                subidentifier = firstSubidentifier;
+            } else {
+                subidentifier = value[i];
+            }
+
+            // get length of subidentifier
+            int subIDLength = 1;
+            while (subidentifier > (Math.pow(2, (7 * subIDLength)) - 1)) {
+                subIDLength++;
+            }
+
+            os.write(subidentifier & 0x7f);
+
+            for (int j = 1; j <= (subIDLength - 1); j++) {
+                os.write(((subidentifier >> (7 * j)) & 0xff) | 0x80);
+            }
+
+            codeLength += subIDLength;
+        }
+
+        codeLength += BerLength.encodeLength(os, codeLength);
+
+        if (withTag) {
+            codeLength += tag.encode(os);
+        }
+
+        return codeLength;
+    }
+
+    public int decode(InputStream is) throws IOException {
+        return decode(is, true);
+    }
+
+    public int decode(InputStream is, boolean withTag) throws IOException {
+
+        int codeLength = 0;
+
+        if (withTag) {
+            codeLength += tag.decodeAndCheck(is);
+        }
+
+        BerLength length = new BerLength();
+        codeLength += length.decode(is);
+
+        if (length.val == 0) {
+            value = new int[0];
+            return codeLength;
+        }
+
+        byte[] byteCode = new byte[length.val];
+        Util.readFully(is, byteCode);
+
+        codeLength += length.val;
+
+        List<Integer> objectIdentifierComponentsList = new ArrayList<>();
+
+        int subIDEndIndex = 0;
+        while ((byteCode[subIDEndIndex] & 0x80) == 0x80) {
+            if (subIDEndIndex >= (length.val - 1)) {
+                throw new IOException("Invalid Object Identifier");
+            }
+            subIDEndIndex++;
+        }
+
+        int subidentifier = 0;
+        for (int i = 0; i <= subIDEndIndex; i++) {
+            subidentifier |= (byteCode[i] << ((subIDEndIndex - i) * 7));
+        }
+
+        if (subidentifier < 40) {
+            objectIdentifierComponentsList.add(0);
+            objectIdentifierComponentsList.add(subidentifier);
+        } else if (subidentifier < 80) {
+            objectIdentifierComponentsList.add(1);
+            objectIdentifierComponentsList.add(subidentifier - 40);
+        } else {
+            objectIdentifierComponentsList.add(2);
+            objectIdentifierComponentsList.add(subidentifier - 80);
+        }
+
+        subIDEndIndex++;
+
+        while (subIDEndIndex < length.val) {
+            int subIDStartIndex = subIDEndIndex;
+
+            while ((byteCode[subIDEndIndex] & 0x80) == 0x80) {
+                if (subIDEndIndex == (length.val - 1)) {
+                    throw new IOException("Invalid Object Identifier");
+                }
+                subIDEndIndex++;
+            }
+            subidentifier = 0;
+            for (int j = subIDStartIndex; j <= subIDEndIndex; j++) {
+                subidentifier |= ((byteCode[j] & 0x7f) << ((subIDEndIndex - j) * 7));
+            }
+            objectIdentifierComponentsList.add(subidentifier);
+            subIDEndIndex++;
+        }
+
+        value = new int[objectIdentifierComponentsList.size()];
+        for (int i = 0; i < objectIdentifierComponentsList.size(); i++) {
+            value[i] = objectIdentifierComponentsList.get(i);
+        }
+
+        return codeLength;
+
+    }
+
+    @JsonValue
+    @Override
+    public String toString() {
+        if (value == null || value.length == 0) {
+            return "";
+        }
+
+        String objIDString = "";
+        objIDString += value[0];
+        for (int i = 1; i < value.length; i++) {
+            objIDString += "." + value[i];
+        }
+        return objIDString;
+    }
+
+    public BerObjectIdentifier append(int value) {
+        if (this.value == null) {
+            return new BerObjectIdentifier(new int[]{value});
+        }
+        int[] values = new int[this.value.length + 1];
+        for (int i = 0; i < this.value.length; ++i) {
+            values[i] = this.value[i];
+        }
+        values[values.length - 1] = value;
+        return new BerObjectIdentifier(values);
+    }
+
+}
diff --git a/src/main/java/org.onosproject.xran/codecs/ber/types/BerOctetString.java b/src/main/java/org.onosproject.xran/codecs/ber/types/BerOctetString.java
new file mode 100644
index 0000000..906e060
--- /dev/null
+++ b/src/main/java/org.onosproject.xran/codecs/ber/types/BerOctetString.java
@@ -0,0 +1,81 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package org.onosproject.xran.codecs.ber.types;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
+import org.onosproject.xran.codecs.ber.internal.Util;
+import org.onosproject.xran.codecs.util.HexConverter;
+
+import javax.xml.bind.DatatypeConverter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Serializable;
+
+public class BerOctetString implements Serializable {
+
+    public final static BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.PRIMITIVE, BerTag.OCTET_STRING_TAG);
+    private static final long serialVersionUID = 1L;
+    public byte[] value;
+
+    public BerOctetString() {
+    }
+
+    public BerOctetString(byte[] value) {
+        this.value = value;
+    }
+
+    public int encode(BerByteArrayOutputStream os) throws IOException {
+        return encode(os, true);
+    }
+
+    public int encode(BerByteArrayOutputStream os, boolean withTag) throws IOException {
+
+        os.write(value);
+        int codeLength = value.length;
+
+        codeLength += BerLength.encodeLength(os, codeLength);
+
+        if (withTag) {
+            codeLength += tag.encode(os);
+        }
+
+        return codeLength;
+    }
+
+    public int decode(InputStream is) throws IOException {
+        return decode(is, true);
+    }
+
+    public int decode(InputStream is, boolean withTag) throws IOException {
+
+        int codeLength = 0;
+
+        if (withTag) {
+            codeLength += tag.decodeAndCheck(is);
+        }
+
+        BerLength length = new BerLength();
+        codeLength += length.decode(is);
+
+        value = new byte[length.val];
+
+        if (length.val != 0) {
+            Util.readFully(is, value);
+            codeLength += length.val;
+        }
+
+        return codeLength;
+
+    }
+
+    @JsonValue
+    @Override
+    public String toString() {
+        return DatatypeConverter.printHexBinary(value);
+    }
+
+}
diff --git a/src/main/java/org.onosproject.xran/codecs/ber/types/BerReal.java b/src/main/java/org.onosproject.xran/codecs/ber/types/BerReal.java
new file mode 100644
index 0000000..08f8d06
--- /dev/null
+++ b/src/main/java/org.onosproject.xran/codecs/ber/types/BerReal.java
@@ -0,0 +1,233 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package org.onosproject.xran.codecs.ber.types;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
+import org.onosproject.xran.codecs.ber.internal.Util;
+
+import java.io.EOFException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Serializable;
+import java.math.BigInteger;
+
+public class BerReal implements Serializable {
+
+    public final static BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.PRIMITIVE, BerTag.REAL_TAG);
+    private static final long serialVersionUID = 1L;
+    @JsonIgnore
+    public byte[] code = null;
+
+    public double value;
+
+    public BerReal() {
+    }
+
+    public BerReal(byte[] code) {
+        this.code = code;
+    }
+
+    public BerReal(double value) {
+        this.value = value;
+    }
+
+    public int encode(BerByteArrayOutputStream os) throws IOException {
+        return encode(os, true);
+    }
+
+    public int encode(BerByteArrayOutputStream os, boolean withTag) throws IOException {
+
+        if (code != null) {
+            for (int i = code.length - 1; i >= 0; i--) {
+                os.write(code[i]);
+            }
+            if (withTag) {
+                return tag.encode(os) + code.length;
+            }
+            return code.length;
+        }
+
+        int codeLength = encodeValue(os);
+
+        codeLength += BerLength.encodeLength(os, codeLength);
+
+        if (withTag) {
+            codeLength += tag.encode(os);
+        }
+
+        return codeLength;
+    }
+
+    private int encodeValue(BerByteArrayOutputStream os) throws IOException {
+
+        // explained in Annex C and Ch. 8.5 of X.690
+
+        // we use binary encoding, with base 2 and F==0
+        // F is only needed when encoding with base 8 or 16
+
+        long longBits = Double.doubleToLongBits(value);
+
+        boolean isNegative = (longBits & 0x8000000000000000L) == 0x8000000000000000L;
+
+        int exponent = ((int) (longBits >> 52)) & 0x7ff;
+
+        long mantissa = (longBits & 0x000fffffffffffffL) | 0x0010000000000000L;
+
+        if (exponent == 0x7ff) {
+            if (mantissa == 0x0010000000000000L) {
+                if (isNegative) {
+                    // - infinity
+                    os.write(0x41);
+                } else {
+                    // + infinity
+                    os.write(0x40);
+                }
+                return 1;
+            } else {
+                throw new IOException("NAN not supported");
+            }
+        }
+
+        if ((exponent == 0 && mantissa == 0x0010000000000000L)) {
+            // zero
+            return 0;
+        }
+
+        // because IEEE double-precision format is (-1)^sign * 1.b51b50..b0 * 2^(e-1023) we need to subtract 1023 and 52
+        // from the exponent to get an exponent corresponding to an integer matissa as need here.
+        exponent -= 1075; // 1023 + 52 = 1075
+
+        // trailing zeros of the mantissa should be removed. Therefor find out how much the mantissa can be shifted and
+        // the exponent can be increased
+        int exponentIncr = 0;
+        while (((mantissa >> exponentIncr) & 0xff) == 0x00) {
+            exponentIncr += 8;
+        }
+        while (((mantissa >> exponentIncr) & 0x01) == 0x00) {
+            exponentIncr++;
+        }
+
+        exponent += exponentIncr;
+        mantissa >>= exponentIncr;
+
+        int mantissaLength = (Long.SIZE - Long.numberOfLeadingZeros(mantissa) + 7) / 8;
+
+        for (int i = 0; i < mantissaLength; i++) {
+            os.write((int) (mantissa >> (8 * i)));
+        }
+        int codeLength = mantissaLength;
+
+        byte[] exponentBytes = BigInteger.valueOf(exponent).toByteArray();
+        os.write(exponentBytes);
+        codeLength += exponentBytes.length;
+
+        byte exponentFormat = 0;
+        if (exponentBytes.length < 4) {
+            exponentFormat = (byte) (exponentBytes.length - 1);
+        } else {
+            os.write(exponentBytes.length);
+            codeLength++;
+            exponentFormat = 0x03;
+        }
+
+        if (isNegative) {
+            os.write(0x80 | 0x40 | exponentFormat);
+        } else {
+            os.write(0x80 | exponentFormat);
+        }
+
+        codeLength++;
+
+        return codeLength;
+    }
+
+    public int decode(InputStream is) throws IOException {
+        return decode(is, true);
+    }
+
+    public int decode(InputStream is, boolean withTag) throws IOException {
+
+        int codeLength = 0;
+
+        if (withTag) {
+            codeLength += tag.decodeAndCheck(is);
+        }
+
+        BerLength length = new BerLength();
+        codeLength += length.decode(is);
+
+        if (length.val == 0) {
+            value = 0;
+            return codeLength;
+        }
+
+        if (length.val == 1) {
+            int nextByte = is.read();
+            if (nextByte == -1) {
+                throw new EOFException("Unexpected end of input stream.");
+            }
+            if (nextByte == 0x40) {
+                value = Double.POSITIVE_INFINITY;
+            } else if (nextByte == 0x41) {
+                value = Double.NEGATIVE_INFINITY;
+            } else {
+                throw new IOException("invalid real encoding");
+            }
+            return codeLength + 1;
+        }
+
+        byte[] byteCode = new byte[length.val];
+        Util.readFully(is, byteCode);
+
+        if ((byteCode[0] & 0x80) != 0x80) {
+            throw new IOException("Only binary REAL encoding is supported");
+        }
+
+        codeLength += length.val;
+        int tempLength = 1;
+
+        int sign = 1;
+        if ((byteCode[0] & 0x40) == 0x40) {
+            sign = -1;
+        }
+
+        int exponentLength = (byteCode[0] & 0x03) + 1;
+        if (exponentLength == 4) {
+            exponentLength = byteCode[1];
+            tempLength++;
+        }
+
+        tempLength += exponentLength;
+
+        int exponent = 0;
+        for (int i = 0; i < exponentLength; i++) {
+            exponent |= byteCode[1 + i] << (8 * (exponentLength - i - 1));
+        }
+
+        long mantissa = 0;
+        for (int i = 0; i < length.val - tempLength; i++) {
+            mantissa |= (byteCode[i + tempLength] & 0xffL) << (8 * (length.val - tempLength - i - 1));
+        }
+
+        value = sign * mantissa * Math.pow(2, exponent);
+
+        return codeLength;
+    }
+
+    public void encodeAndSave(int encodingSizeGuess) throws IOException {
+        BerByteArrayOutputStream os = new BerByteArrayOutputStream(encodingSizeGuess);
+        encode(os, false);
+        code = os.getArray();
+    }
+
+    @JsonValue
+    @Override
+    public String toString() {
+        return "" + value;
+    }
+}
diff --git a/src/main/java/org.onosproject.xran/codecs/ber/types/BerTime.java b/src/main/java/org.onosproject.xran/codecs/ber/types/BerTime.java
new file mode 100644
index 0000000..cfd8d65
--- /dev/null
+++ b/src/main/java/org.onosproject.xran/codecs/ber/types/BerTime.java
@@ -0,0 +1,56 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package org.onosproject.xran.codecs.ber.types;
+
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerTag;
+import org.onosproject.xran.codecs.ber.types.string.BerVisibleString;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+
+public class BerTime extends BerVisibleString {
+
+    public final static BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.PRIMITIVE, BerTag.TIME_TAG);
+    private static final long serialVersionUID = 1L;
+
+    public BerTime() {
+    }
+
+    public BerTime(byte[] value) {
+        super(value);
+    }
+
+    public BerTime(String valueAsString) throws UnsupportedEncodingException {
+        super(valueAsString);
+    }
+
+    @Override
+    public int encode(BerByteArrayOutputStream os, boolean withTag) throws IOException {
+
+        int codeLength = super.encode(os, false);
+
+        if (withTag) {
+            codeLength += tag.encode(os);
+        }
+
+        return codeLength;
+    }
+
+    @Override
+    public int decode(InputStream is, boolean withTag) throws IOException {
+
+        int codeLength = 0;
+
+        if (withTag) {
+            codeLength += tag.decodeAndCheck(is);
+        }
+
+        codeLength += super.decode(is, false);
+
+        return codeLength;
+    }
+
+}
diff --git a/src/main/java/org.onosproject.xran/codecs/ber/types/BerTimeOfDay.java b/src/main/java/org.onosproject.xran/codecs/ber/types/BerTimeOfDay.java
new file mode 100644
index 0000000..d592a72
--- /dev/null
+++ b/src/main/java/org.onosproject.xran/codecs/ber/types/BerTimeOfDay.java
@@ -0,0 +1,55 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package org.onosproject.xran.codecs.ber.types;
+
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerTag;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+
+public class BerTimeOfDay extends BerTime {
+
+    public final static BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.PRIMITIVE, BerTag.TIME_OF_DAY_TAG);
+    private static final long serialVersionUID = 1L;
+
+    public BerTimeOfDay() {
+    }
+
+    public BerTimeOfDay(byte[] value) {
+        super(value);
+    }
+
+    public BerTimeOfDay(String valueAsString) throws UnsupportedEncodingException {
+        super(valueAsString);
+    }
+
+    @Override
+    public int encode(BerByteArrayOutputStream os, boolean withTag) throws IOException {
+
+        int codeLength = super.encode(os, false);
+
+        if (withTag) {
+            codeLength += tag.encode(os);
+        }
+
+        return codeLength;
+    }
+
+    @Override
+    public int decode(InputStream is, boolean withTag) throws IOException {
+
+        int codeLength = 0;
+
+        if (withTag) {
+            codeLength += tag.decodeAndCheck(is);
+        }
+
+        codeLength += super.decode(is, false);
+
+        return codeLength;
+    }
+
+}
diff --git a/src/main/java/org.onosproject.xran/codecs/ber/types/BerUtcTime.java b/src/main/java/org.onosproject.xran/codecs/ber/types/BerUtcTime.java
new file mode 100644
index 0000000..2cfc6b5
--- /dev/null
+++ b/src/main/java/org.onosproject.xran/codecs/ber/types/BerUtcTime.java
@@ -0,0 +1,107 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package org.onosproject.xran.codecs.ber.types;
+
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerTag;
+import org.onosproject.xran.codecs.ber.types.string.BerVisibleString;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.text.ParseException;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.TimeZone;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class BerUtcTime extends BerVisibleString {
+
+    public final static BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.PRIMITIVE, BerTag.UTC_TIME_TAG);
+    private static final long serialVersionUID = 1L;
+    /*
+     * UTC time is one of the following (ITU-T X.680 08/2015): YYMMDDhhmm[ss]Z YYMMDDhhmm[ss](+|-)hhmm Regexp: ^
+     * (?<year>\\d{2}) YY (?<month>\\d{2}) MM (?<day>\\d{2}) DD (?<hour>\\d{2}) hh (?<minute>\\d{2}) mm
+     * (?<second>\\d{2})? ss (?<timezone> Z | Z or (+|-)hhmm ( [+-]\\d{4} (+|-)hhmm ) ) $
+     */
+    private final static String UTC_TIME_PATTERN = "^(?<year>\\d{2})(?<month>\\d{2})(?<day>\\d{2})(?<hour>\\d{2})(?<minute>\\d{2})(?<second>\\d{2})?(?<timezone>Z|([+-]\\d{4}))$";
+    private final static Pattern utcTimePattern = Pattern.compile(UTC_TIME_PATTERN);
+
+    public BerUtcTime() {
+    }
+
+    public BerUtcTime(byte[] value) {
+        this.value = value;
+    }
+
+    public BerUtcTime(String valueAsString) {
+        super(valueAsString);
+    }
+
+    @Override
+    public int encode(BerByteArrayOutputStream os, boolean withTag) throws IOException {
+
+        int codeLength = super.encode(os, false);
+
+        if (withTag) {
+            codeLength += tag.encode(os);
+        }
+
+        return codeLength;
+    }
+
+    @Override
+    public int decode(InputStream is, boolean withTag) throws IOException {
+
+        int codeLength = 0;
+
+        if (withTag) {
+            codeLength += tag.decodeAndCheck(is);
+        }
+
+        codeLength += super.decode(is, false);
+
+        return codeLength;
+    }
+
+    @SuppressWarnings("WeakerAccess")
+    Calendar asCalendar() throws ParseException {
+
+        Matcher matcher = utcTimePattern.matcher(toString());
+
+        if (!matcher.find())
+            throw new ParseException("", 0);
+
+        String mg;
+        int year = Integer.valueOf(matcher.group("year"));
+        int month = Integer.valueOf(matcher.group("month"));
+        month -= 1; // java.util.Calendar's month goes from 0 to 11
+        int day = Integer.valueOf(matcher.group("day"));
+        int hour = Integer.valueOf(matcher.group("hour"));
+        int minute = Integer.valueOf(matcher.group("minute"));
+        mg = matcher.group("second");
+        int second = mg == null ? 0 : Integer.valueOf(mg);
+
+        mg = matcher.group("timezone");
+        String timeZoneStr = mg.equals("Z") ? "UTC" : "GMT" + mg;
+        TimeZone timeZone = TimeZone.getTimeZone(timeZoneStr);
+
+        Calendar calendar = Calendar.getInstance(timeZone);
+
+        // Add 2000 to the year
+        int century = (calendar.get(Calendar.YEAR) / 100) * 100;
+        year += century;
+
+        // noinspection MagicConstant
+        calendar.set(year, month, day, hour, minute, second);
+        calendar.set(Calendar.MILLISECOND, 0);
+
+        return calendar;
+    }
+
+    Date asDate() throws ParseException {
+        return asCalendar().getTime();
+    }
+
+}
diff --git a/src/main/java/org.onosproject.xran/codecs/ber/types/string/BerBMPString.java b/src/main/java/org.onosproject.xran/codecs/ber/types/string/BerBMPString.java
new file mode 100644
index 0000000..5f36c5a
--- /dev/null
+++ b/src/main/java/org.onosproject.xran/codecs/ber/types/string/BerBMPString.java
@@ -0,0 +1,58 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package org.onosproject.xran.codecs.ber.types.string;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerTag;
+import org.onosproject.xran.codecs.ber.types.BerOctetString;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+public class BerBMPString extends BerOctetString {
+
+    public final static BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.PRIMITIVE, BerTag.BMP_STRING_TAG);
+    private static final long serialVersionUID = 1L;
+
+    public BerBMPString() {
+    }
+
+    public BerBMPString(byte[] value) {
+        this.value = value;
+    }
+
+    @JsonValue
+    @Override
+    public String toString() {
+        return new String(value);
+    }
+
+    @Override
+    public int encode(BerByteArrayOutputStream os, boolean withTag) throws IOException {
+
+        int codeLength = super.encode(os, false);
+
+        if (withTag) {
+            codeLength += tag.encode(os);
+        }
+
+        return codeLength;
+    }
+
+    @Override
+    public int decode(InputStream is, boolean withTag) throws IOException {
+
+        int codeLength = 0;
+
+        if (withTag) {
+            codeLength += tag.decodeAndCheck(is);
+        }
+
+        codeLength += super.decode(is, false);
+
+        return codeLength;
+    }
+
+}
diff --git a/src/main/java/org.onosproject.xran/codecs/ber/types/string/BerGeneralString.java b/src/main/java/org.onosproject.xran/codecs/ber/types/string/BerGeneralString.java
new file mode 100644
index 0000000..1c89db5
--- /dev/null
+++ b/src/main/java/org.onosproject.xran/codecs/ber/types/string/BerGeneralString.java
@@ -0,0 +1,58 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package org.onosproject.xran.codecs.ber.types.string;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerTag;
+import org.onosproject.xran.codecs.ber.types.BerOctetString;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+public class BerGeneralString extends BerOctetString {
+
+    public final static BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.PRIMITIVE, BerTag.GENERAL_STRING_TAG);
+    private static final long serialVersionUID = 1L;
+
+    public BerGeneralString() {
+    }
+
+    public BerGeneralString(byte[] value) {
+        this.value = value;
+    }
+
+    @JsonValue
+    @Override
+    public String toString() {
+        return new String(value);
+    }
+
+    @Override
+    public int encode(BerByteArrayOutputStream os, boolean withTag) throws IOException {
+
+        int codeLength = super.encode(os, false);
+
+        if (withTag) {
+            codeLength += tag.encode(os);
+        }
+
+        return codeLength;
+    }
+
+    @Override
+    public int decode(InputStream is, boolean withTag) throws IOException {
+
+        int codeLength = 0;
+
+        if (withTag) {
+            codeLength += tag.decodeAndCheck(is);
+        }
+
+        codeLength += super.decode(is, false);
+
+        return codeLength;
+    }
+
+}
diff --git a/src/main/java/org.onosproject.xran/codecs/ber/types/string/BerGraphicString.java b/src/main/java/org.onosproject.xran/codecs/ber/types/string/BerGraphicString.java
new file mode 100644
index 0000000..ef70e72
--- /dev/null
+++ b/src/main/java/org.onosproject.xran/codecs/ber/types/string/BerGraphicString.java
@@ -0,0 +1,58 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package org.onosproject.xran.codecs.ber.types.string;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerTag;
+import org.onosproject.xran.codecs.ber.types.BerOctetString;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+public class BerGraphicString extends BerOctetString {
+
+    public final static BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.PRIMITIVE, BerTag.GRAPHIC_STRING_TAG);
+    private static final long serialVersionUID = 1L;
+
+    public BerGraphicString() {
+    }
+
+    public BerGraphicString(byte[] value) {
+        this.value = value;
+    }
+
+    @JsonValue
+    @Override
+    public String toString() {
+        return new String(value);
+    }
+
+    @Override
+    public int encode(BerByteArrayOutputStream os, boolean withTag) throws IOException {
+
+        int codeLength = super.encode(os, false);
+
+        if (withTag) {
+            codeLength += tag.encode(os);
+        }
+
+        return codeLength;
+    }
+
+    @Override
+    public int decode(InputStream is, boolean withTag) throws IOException {
+
+        int codeLength = 0;
+
+        if (withTag) {
+            codeLength += tag.decodeAndCheck(is);
+        }
+
+        codeLength += super.decode(is, false);
+
+        return codeLength;
+    }
+
+}
diff --git a/src/main/java/org.onosproject.xran/codecs/ber/types/string/BerIA5String.java b/src/main/java/org.onosproject.xran/codecs/ber/types/string/BerIA5String.java
new file mode 100644
index 0000000..a56240e
--- /dev/null
+++ b/src/main/java/org.onosproject.xran/codecs/ber/types/string/BerIA5String.java
@@ -0,0 +1,58 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package org.onosproject.xran.codecs.ber.types.string;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerTag;
+import org.onosproject.xran.codecs.ber.types.BerOctetString;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+public class BerIA5String extends BerOctetString {
+
+    public final static BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.PRIMITIVE, BerTag.IA5_STRING_TAG);
+    private static final long serialVersionUID = 1L;
+
+    public BerIA5String() {
+    }
+
+    public BerIA5String(byte[] value) {
+        this.value = value;
+    }
+
+    @JsonValue
+    @Override
+    public String toString() {
+        return new String(value);
+    }
+
+    @Override
+    public int encode(BerByteArrayOutputStream os, boolean withTag) throws IOException {
+
+        int codeLength = super.encode(os, false);
+
+        if (withTag) {
+            codeLength += tag.encode(os);
+        }
+
+        return codeLength;
+    }
+
+    @Override
+    public int decode(InputStream is, boolean withTag) throws IOException {
+
+        int codeLength = 0;
+
+        if (withTag) {
+            codeLength += tag.decodeAndCheck(is);
+        }
+
+        codeLength += super.decode(is, false);
+
+        return codeLength;
+    }
+
+}
diff --git a/src/main/java/org.onosproject.xran/codecs/ber/types/string/BerNumericString.java b/src/main/java/org.onosproject.xran/codecs/ber/types/string/BerNumericString.java
new file mode 100644
index 0000000..944b66d
--- /dev/null
+++ b/src/main/java/org.onosproject.xran/codecs/ber/types/string/BerNumericString.java
@@ -0,0 +1,58 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package org.onosproject.xran.codecs.ber.types.string;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerTag;
+import org.onosproject.xran.codecs.ber.types.BerOctetString;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+public class BerNumericString extends BerOctetString {
+
+    public final static BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.PRIMITIVE, BerTag.NUMERIC_STRING_TAG);
+    private static final long serialVersionUID = 1L;
+
+    public BerNumericString() {
+    }
+
+    public BerNumericString(byte[] value) {
+        this.value = value;
+    }
+
+    @JsonValue
+    @Override
+    public String toString() {
+        return new String(value);
+    }
+
+    @Override
+    public int encode(BerByteArrayOutputStream os, boolean withTag) throws IOException {
+
+        int codeLength = super.encode(os, false);
+
+        if (withTag) {
+            codeLength += tag.encode(os);
+        }
+
+        return codeLength;
+    }
+
+    @Override
+    public int decode(InputStream is, boolean withTag) throws IOException {
+
+        int codeLength = 0;
+
+        if (withTag) {
+            codeLength += tag.decodeAndCheck(is);
+        }
+
+        codeLength += super.decode(is, false);
+
+        return codeLength;
+    }
+
+}
diff --git a/src/main/java/org.onosproject.xran/codecs/ber/types/string/BerObjectDescriptor.java b/src/main/java/org.onosproject.xran/codecs/ber/types/string/BerObjectDescriptor.java
new file mode 100644
index 0000000..2b80cb0
--- /dev/null
+++ b/src/main/java/org.onosproject.xran/codecs/ber/types/string/BerObjectDescriptor.java
@@ -0,0 +1,51 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package org.onosproject.xran.codecs.ber.types.string;
+
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerTag;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+public class BerObjectDescriptor extends BerGraphicString {
+
+    public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.PRIMITIVE, BerTag.OBJECT_DESCRIPTOR_TAG);
+    private static final long serialVersionUID = 1L;
+
+    public BerObjectDescriptor() {
+    }
+
+    public BerObjectDescriptor(byte[] value) {
+        super(value);
+    }
+
+    @Override
+    public int encode(BerByteArrayOutputStream os, boolean withTag) throws IOException {
+
+        int codeLength;
+
+        codeLength = super.encode(os, false);
+        if (withTag) {
+            codeLength += tag.encode(os);
+        }
+
+        return codeLength;
+    }
+
+    @Override
+    public int decode(InputStream is, boolean withTag) throws IOException {
+
+        int codeLength = 0;
+
+        if (withTag) {
+            codeLength += tag.decodeAndCheck(is);
+        }
+
+        codeLength += super.decode(is, false);
+
+        return codeLength;
+    }
+
+}
diff --git a/src/main/java/org.onosproject.xran/codecs/ber/types/string/BerPrintableString.java b/src/main/java/org.onosproject.xran/codecs/ber/types/string/BerPrintableString.java
new file mode 100644
index 0000000..d865dcb
--- /dev/null
+++ b/src/main/java/org.onosproject.xran/codecs/ber/types/string/BerPrintableString.java
@@ -0,0 +1,58 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package org.onosproject.xran.codecs.ber.types.string;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerTag;
+import org.onosproject.xran.codecs.ber.types.BerOctetString;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+public class BerPrintableString extends BerOctetString {
+
+    public final static BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.PRIMITIVE, BerTag.PRINTABLE_STRING_TAG);
+    private static final long serialVersionUID = 1L;
+
+    public BerPrintableString() {
+    }
+
+    public BerPrintableString(byte[] value) {
+        this.value = value;
+    }
+
+    @JsonValue
+    @Override
+    public String toString() {
+        return new String(value);
+    }
+
+    @Override
+    public int encode(BerByteArrayOutputStream os, boolean withTag) throws IOException {
+
+        int codeLength = super.encode(os, false);
+
+        if (withTag) {
+            codeLength += tag.encode(os);
+        }
+
+        return codeLength;
+    }
+
+    @Override
+    public int decode(InputStream is, boolean withTag) throws IOException {
+
+        int codeLength = 0;
+
+        if (withTag) {
+            codeLength += tag.decodeAndCheck(is);
+        }
+
+        codeLength += super.decode(is, false);
+
+        return codeLength;
+    }
+
+}
diff --git a/src/main/java/org.onosproject.xran/codecs/ber/types/string/BerTeletexString.java b/src/main/java/org.onosproject.xran/codecs/ber/types/string/BerTeletexString.java
new file mode 100644
index 0000000..78e483b
--- /dev/null
+++ b/src/main/java/org.onosproject.xran/codecs/ber/types/string/BerTeletexString.java
@@ -0,0 +1,58 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package org.onosproject.xran.codecs.ber.types.string;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerTag;
+import org.onosproject.xran.codecs.ber.types.BerOctetString;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+public class BerTeletexString extends BerOctetString {
+
+    public final static BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.PRIMITIVE, BerTag.TELETEX_STRING_TAG);
+    private static final long serialVersionUID = 1L;
+
+    public BerTeletexString() {
+    }
+
+    public BerTeletexString(byte[] value) {
+        this.value = value;
+    }
+
+    @JsonValue
+    @Override
+    public String toString() {
+        return new String(value);
+    }
+
+    @Override
+    public int encode(BerByteArrayOutputStream os, boolean withTag) throws IOException {
+
+        int codeLength = super.encode(os, false);
+
+        if (withTag) {
+            codeLength += tag.encode(os);
+        }
+
+        return codeLength;
+    }
+
+    @Override
+    public int decode(InputStream is, boolean withTag) throws IOException {
+
+        int codeLength = 0;
+
+        if (withTag) {
+            codeLength += tag.decodeAndCheck(is);
+        }
+
+        codeLength += super.decode(is, false);
+
+        return codeLength;
+    }
+
+}
diff --git a/src/main/java/org.onosproject.xran/codecs/ber/types/string/BerUTF8String.java b/src/main/java/org.onosproject.xran/codecs/ber/types/string/BerUTF8String.java
new file mode 100644
index 0000000..7b107a4
--- /dev/null
+++ b/src/main/java/org.onosproject.xran/codecs/ber/types/string/BerUTF8String.java
@@ -0,0 +1,67 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package org.onosproject.xran.codecs.ber.types.string;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerTag;
+import org.onosproject.xran.codecs.ber.types.BerOctetString;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+
+public class BerUTF8String extends BerOctetString {
+
+    public final static BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.PRIMITIVE, BerTag.UTF8_STRING_TAG);
+    private static final long serialVersionUID = 1L;
+
+    public BerUTF8String() {
+    }
+
+    public BerUTF8String(byte[] value) {
+        this.value = value;
+    }
+
+    public BerUTF8String(String valueAsString) throws UnsupportedEncodingException {
+        value = valueAsString.getBytes("UTF-8");
+    }
+
+    @JsonValue
+    @Override
+    public String toString() {
+        try {
+            return new String(value, "UTF-8");
+        } catch (UnsupportedEncodingException e) {
+            return "Unsupported Encoding";
+        }
+    }
+
+    @Override
+    public int encode(BerByteArrayOutputStream os, boolean withTag) throws IOException {
+
+        int codeLength = super.encode(os, false);
+
+        if (withTag) {
+            codeLength += tag.encode(os);
+        }
+
+        return codeLength;
+    }
+
+    @Override
+    public int decode(InputStream is, boolean withTag) throws IOException {
+
+        int codeLength = 0;
+
+        if (withTag) {
+            codeLength += tag.decodeAndCheck(is);
+        }
+
+        codeLength += super.decode(is, false);
+
+        return codeLength;
+    }
+
+}
diff --git a/src/main/java/org.onosproject.xran/codecs/ber/types/string/BerUniversalString.java b/src/main/java/org.onosproject.xran/codecs/ber/types/string/BerUniversalString.java
new file mode 100644
index 0000000..06be21c
--- /dev/null
+++ b/src/main/java/org.onosproject.xran/codecs/ber/types/string/BerUniversalString.java
@@ -0,0 +1,58 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package org.onosproject.xran.codecs.ber.types.string;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerTag;
+import org.onosproject.xran.codecs.ber.types.BerOctetString;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+public class BerUniversalString extends BerOctetString {
+
+    public final static BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.PRIMITIVE, BerTag.UNIVERSAL_STRING_TAG);
+    private static final long serialVersionUID = 1L;
+
+    public BerUniversalString() {
+    }
+
+    public BerUniversalString(byte[] value) {
+        this.value = value;
+    }
+
+    @JsonValue
+    @Override
+    public String toString() {
+        return new String(value);
+    }
+
+    @Override
+    public int encode(BerByteArrayOutputStream os, boolean withTag) throws IOException {
+
+        int codeLength = super.encode(os, false);
+
+        if (withTag) {
+            codeLength += tag.encode(os);
+        }
+
+        return codeLength;
+    }
+
+    @Override
+    public int decode(InputStream is, boolean withTag) throws IOException {
+
+        int codeLength = 0;
+
+        if (withTag) {
+            codeLength += tag.decodeAndCheck(is);
+        }
+
+        codeLength += super.decode(is, false);
+
+        return codeLength;
+    }
+
+}
diff --git a/src/main/java/org.onosproject.xran/codecs/ber/types/string/BerVideotexString.java b/src/main/java/org.onosproject.xran/codecs/ber/types/string/BerVideotexString.java
new file mode 100644
index 0000000..e67d8ca
--- /dev/null
+++ b/src/main/java/org.onosproject.xran/codecs/ber/types/string/BerVideotexString.java
@@ -0,0 +1,58 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package org.onosproject.xran.codecs.ber.types.string;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerTag;
+import org.onosproject.xran.codecs.ber.types.BerOctetString;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+public class BerVideotexString extends BerOctetString {
+
+    public final static BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.PRIMITIVE, BerTag.VIDEOTEX_STRING_TAG);
+    private static final long serialVersionUID = 1L;
+
+    public BerVideotexString() {
+    }
+
+    public BerVideotexString(byte[] value) {
+        this.value = value;
+    }
+
+    @JsonValue
+    @Override
+    public String toString() {
+        return new String(value);
+    }
+
+    @Override
+    public int encode(BerByteArrayOutputStream os, boolean withTag) throws IOException {
+
+        int codeLength = super.encode(os, false);
+
+        if (withTag) {
+            codeLength += tag.encode(os);
+        }
+
+        return codeLength;
+    }
+
+    @Override
+    public int decode(InputStream is, boolean withTag) throws IOException {
+
+        int codeLength = 0;
+
+        if (withTag) {
+            codeLength += tag.decodeAndCheck(is);
+        }
+
+        codeLength += super.decode(is, false);
+
+        return codeLength;
+    }
+
+}
diff --git a/src/main/java/org.onosproject.xran/codecs/ber/types/string/BerVisibleString.java b/src/main/java/org.onosproject.xran/codecs/ber/types/string/BerVisibleString.java
new file mode 100644
index 0000000..ca7bfb3
--- /dev/null
+++ b/src/main/java/org.onosproject.xran/codecs/ber/types/string/BerVisibleString.java
@@ -0,0 +1,83 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package org.onosproject.xran.codecs.ber.types.string;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
+import org.onosproject.xran.codecs.ber.internal.Util;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Serializable;
+
+public class BerVisibleString implements Serializable {
+
+    public final static BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.PRIMITIVE, BerTag.VISIBLE_STRING_TAG);
+    private static final long serialVersionUID = 1L;
+    public byte[] value;
+
+    public BerVisibleString() {
+    }
+
+    public BerVisibleString(byte[] value) {
+        this.value = value;
+    }
+
+    public BerVisibleString(String valueAsString) {
+        value = valueAsString.getBytes();
+    }
+
+    public int encode(BerByteArrayOutputStream os) throws IOException {
+        return encode(os, true);
+    }
+
+    public int encode(BerByteArrayOutputStream os, boolean withTag) throws IOException {
+
+        os.write(value);
+        int codeLength = value.length;
+
+        codeLength += BerLength.encodeLength(os, codeLength);
+
+        if (withTag) {
+            codeLength += tag.encode(os);
+        }
+
+        return codeLength;
+    }
+
+    public int decode(InputStream is) throws IOException {
+        return decode(is, true);
+    }
+
+    public int decode(InputStream is, boolean withTag) throws IOException {
+
+        int codeLength = 0;
+
+        if (withTag) {
+            codeLength += tag.decodeAndCheck(is);
+        }
+
+        BerLength length = new BerLength();
+        codeLength += length.decode(is);
+
+        value = new byte[length.val];
+
+        if (length.val != 0) {
+            Util.readFully(is, value);
+            codeLength += length.val;
+        }
+
+        return codeLength;
+
+    }
+
+    @JsonValue
+    @Override
+    public String toString() {
+        return new String(value);
+    }
+
+}
diff --git a/src/main/java/org.onosproject.xran/codecs/pdu/BearerAdmissionRequest.java b/src/main/java/org.onosproject.xran/codecs/pdu/BearerAdmissionRequest.java
index 7f86f7c..7fa0f40 100644
--- a/src/main/java/org.onosproject.xran/codecs/pdu/BearerAdmissionRequest.java
+++ b/src/main/java/org.onosproject.xran/codecs/pdu/BearerAdmissionRequest.java
@@ -4,10 +4,11 @@
 
 package org.onosproject.xran.codecs.pdu;
 
-import org.openmuc.jasn1.ber.BerByteArrayOutputStream;
-import org.openmuc.jasn1.ber.BerLength;
-import org.openmuc.jasn1.ber.BerTag;
-import org.openmuc.jasn1.ber.types.BerInteger;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
+import org.onosproject.xran.codecs.ber.types.BerInteger;
 import org.onosproject.xran.codecs.api.CRNTI;
 import org.onosproject.xran.codecs.api.ECGI;
 import org.onosproject.xran.codecs.api.ERABParams;
@@ -23,6 +24,7 @@
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
 
+	@JsonIgnore
 	public byte[] code = null;
 	private CRNTI crnti = null;
 	private ECGI ecgi = null;
@@ -217,7 +219,7 @@
 			sb.append("\t");
 		}
 		if (crnti != null) {
-			sb.append("\"crnti\": ").append(crnti);
+			sb.append("crnti: ").append(crnti);
 		}
 		
 		sb.append(",\n");
@@ -225,7 +227,7 @@
 			sb.append("\t");
 		}
 		if (ecgi != null) {
-			sb.append("\"ecgi\": ");
+			sb.append("ecgi: ");
 			ecgi.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -234,7 +236,7 @@
 			sb.append("\t");
 		}
 		if (ueAmbr != null) {
-			sb.append("\"ueAmbr\": ");
+			sb.append("ueAmbr: ");
 			ueAmbr.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -243,7 +245,7 @@
 			sb.append("\t");
 		}
 		if (numErabs != null) {
-			sb.append("\"numErabs\": ").append(numErabs);
+			sb.append("numErabs: ").append(numErabs);
 		}
 		
 		sb.append(",\n");
@@ -251,7 +253,7 @@
 			sb.append("\t");
 		}
 		if (erabParams != null) {
-			sb.append("\"erabParams\": ");
+			sb.append("erabParams: ");
 			erabParams.appendAsString(sb, indentLevel + 1);
 		}
 		
diff --git a/src/main/java/org.onosproject.xran/codecs/pdu/BearerAdmissionResponse.java b/src/main/java/org.onosproject.xran/codecs/pdu/BearerAdmissionResponse.java
index 15c84e6..a4dfeb0 100644
--- a/src/main/java/org.onosproject.xran/codecs/pdu/BearerAdmissionResponse.java
+++ b/src/main/java/org.onosproject.xran/codecs/pdu/BearerAdmissionResponse.java
@@ -4,12 +4,13 @@
 
 package org.onosproject.xran.codecs.pdu;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import org.onosproject.xran.codecs.api.*;
-import org.openmuc.jasn1.ber.BerByteArrayOutputStream;
-import org.openmuc.jasn1.ber.BerLength;
-import org.openmuc.jasn1.ber.BerTag;
-import org.openmuc.jasn1.ber.types.BerInteger;
-import org.openmuc.jasn1.ber.types.string.BerUTF8String;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
+import org.onosproject.xran.codecs.ber.types.BerInteger;
+import org.onosproject.xran.codecs.ber.types.string.BerUTF8String;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -22,6 +23,7 @@
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
 
+	@JsonIgnore
 	public byte[] code = null;
 	private CRNTI crnti = null;
 	private ECGI ecgi = null;
@@ -193,7 +195,7 @@
 			sb.append("\t");
 		}
 		if (crnti != null) {
-			sb.append("\"crnti\": ").append(crnti);
+			sb.append("crnti: ").append(crnti);
 		}
 		
 		sb.append(",\n");
@@ -201,7 +203,7 @@
 			sb.append("\t");
 		}
 		if (ecgi != null) {
-			sb.append("\"ecgi\": ");
+			sb.append("ecgi: ");
 			ecgi.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -210,7 +212,7 @@
 			sb.append("\t");
 		}
 		if (numErabList != null) {
-			sb.append("\"numErabList\": ").append(numErabList);
+			sb.append("numErabList: ").append(numErabList);
 		}
 		
 		sb.append(",\n");
@@ -218,7 +220,7 @@
 			sb.append("\t");
 		}
 		if (erabResponse != null) {
-			sb.append("\"erabResponse\": ");
+			sb.append("erabResponse: ");
 			erabResponse.appendAsString(sb, indentLevel + 1);
 		}
 		
diff --git a/src/main/java/org.onosproject.xran/codecs/pdu/BearerAdmissionStatus.java b/src/main/java/org.onosproject.xran/codecs/pdu/BearerAdmissionStatus.java
index 16e85e1..f9c6476 100644
--- a/src/main/java/org.onosproject.xran/codecs/pdu/BearerAdmissionStatus.java
+++ b/src/main/java/org.onosproject.xran/codecs/pdu/BearerAdmissionStatus.java
@@ -4,10 +4,11 @@
 
 package org.onosproject.xran.codecs.pdu;
 
-import org.openmuc.jasn1.ber.BerByteArrayOutputStream;
-import org.openmuc.jasn1.ber.BerLength;
-import org.openmuc.jasn1.ber.BerTag;
-import org.openmuc.jasn1.ber.types.BerInteger;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
+import org.onosproject.xran.codecs.ber.types.BerInteger;
 import org.onosproject.xran.codecs.api.CRNTI;
 import org.onosproject.xran.codecs.api.ECGI;
 import org.onosproject.xran.codecs.api.ERABResponse;
@@ -22,6 +23,7 @@
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
 
+	@JsonIgnore
 	public byte[] code = null;
 	private CRNTI crnti = null;
 	private ECGI ecgi = null;
@@ -193,7 +195,7 @@
 			sb.append("\t");
 		}
 		if (crnti != null) {
-			sb.append("\"crnti\": ").append(crnti);
+			sb.append("crnti: ").append(crnti);
 		}
 		
 		sb.append(",\n");
@@ -201,7 +203,7 @@
 			sb.append("\t");
 		}
 		if (ecgi != null) {
-			sb.append("\"ecgi\": ");
+			sb.append("ecgi: ");
 			ecgi.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -210,7 +212,7 @@
 			sb.append("\t");
 		}
 		if (numErabs != null) {
-			sb.append("\"numErabs\": ").append(numErabs);
+			sb.append("numErabs: ").append(numErabs);
 		}
 		
 		sb.append(",\n");
@@ -218,7 +220,7 @@
 			sb.append("\t");
 		}
 		if (erabResponse != null) {
-			sb.append("\"erabResponse\": ");
+			sb.append("erabResponse: ");
 			erabResponse.appendAsString(sb, indentLevel + 1);
 		}
 		
diff --git a/src/main/java/org.onosproject.xran/codecs/pdu/BearerReleaseInd.java b/src/main/java/org.onosproject.xran/codecs/pdu/BearerReleaseInd.java
index 89cfa2d..055c8be 100644
--- a/src/main/java/org.onosproject.xran/codecs/pdu/BearerReleaseInd.java
+++ b/src/main/java/org.onosproject.xran/codecs/pdu/BearerReleaseInd.java
@@ -4,10 +4,12 @@
 
 package org.onosproject.xran.codecs.pdu;
 
-import org.openmuc.jasn1.ber.BerByteArrayOutputStream;
-import org.openmuc.jasn1.ber.BerLength;
-import org.openmuc.jasn1.ber.BerTag;
-import org.openmuc.jasn1.ber.types.BerInteger;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
+import org.onosproject.xran.codecs.ber.types.BerInteger;
 import org.onosproject.xran.codecs.api.CRNTI;
 import org.onosproject.xran.codecs.api.ECGI;
 import org.onosproject.xran.codecs.api.ERABID;
@@ -28,6 +30,7 @@
 		private static final long serialVersionUID = 1L;
 
 		public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
+		@JsonIgnore
 		public byte[] code = null;
 		private List<ERABID> seqOf = null;
 
@@ -39,6 +42,7 @@
 			this.code = code;
 		}
 
+		@JsonValue
 		public List<ERABID> getERABID() {
 			if (seqOf == null) {
 				seqOf = new ArrayList<ERABID>();
@@ -151,7 +155,7 @@
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
 
-	public byte[] code = null;
+	@JsonIgnore public byte[] code = null;
 	private CRNTI crnti = null;
 	private ECGI ecgi = null;
 	private BerInteger numErabs = null;
@@ -322,7 +326,7 @@
 			sb.append("\t");
 		}
 		if (crnti != null) {
-			sb.append("\"crnti\": ").append(crnti);
+			sb.append("crnti: ").append(crnti);
 		}
 		
 		sb.append(",\n");
@@ -330,7 +334,7 @@
 			sb.append("\t");
 		}
 		if (ecgi != null) {
-			sb.append("\"ecgi\": ");
+			sb.append("ecgi: ");
 			ecgi.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -339,7 +343,7 @@
 			sb.append("\t");
 		}
 		if (numErabs != null) {
-			sb.append("\"numErabs\": ").append(numErabs);
+			sb.append("numErabs: ").append(numErabs);
 		}
 		
 		sb.append(",\n");
@@ -347,7 +351,7 @@
 			sb.append("\t");
 		}
 		if (erabIds != null) {
-			sb.append("\"erabIds\": ");
+			sb.append("erabIds: ");
 			erabIds.appendAsString(sb, indentLevel + 1);
 		}
 		
diff --git a/src/main/java/org.onosproject.xran/codecs/pdu/CellConfigReport.java b/src/main/java/org.onosproject.xran/codecs/pdu/CellConfigReport.java
index c858d2e..c45760d 100644
--- a/src/main/java/org.onosproject.xran/codecs/pdu/CellConfigReport.java
+++ b/src/main/java/org.onosproject.xran/codecs/pdu/CellConfigReport.java
@@ -4,11 +4,13 @@
 
 package org.onosproject.xran.codecs.pdu;
 
-import org.openmuc.jasn1.ber.BerByteArrayOutputStream;
-import org.openmuc.jasn1.ber.BerLength;
-import org.openmuc.jasn1.ber.BerTag;
-import org.openmuc.jasn1.ber.types.BerBoolean;
-import org.openmuc.jasn1.ber.types.BerInteger;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
+import org.onosproject.xran.codecs.ber.types.BerBoolean;
+import org.onosproject.xran.codecs.ber.types.BerInteger;
 import org.onosproject.xran.codecs.api.*;
 
 import java.io.IOException;
@@ -27,6 +29,7 @@
 		private static final long serialVersionUID = 1L;
 
 		public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
+		@JsonIgnore
 		public byte[] code = null;
 		private List<CandScell> seqOf = null;
 
@@ -38,6 +41,7 @@
 			this.code = code;
 		}
 
+		@JsonValue
 		public List<CandScell> getCandScells() {
 			if (seqOf == null) {
 				seqOf = new ArrayList<CandScell>();
@@ -154,7 +158,7 @@
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
 
-	public byte[] code = null;
+	@JsonIgnore public byte[] code = null;
 	private ECGI ecgi = null;
 	private PhysCellId pci = null;
 	private CandScells candScells = null;
@@ -599,7 +603,7 @@
 			sb.append("\t");
 		}
 		if (ecgi != null) {
-			sb.append("\"ecgi\": ");
+			sb.append("ecgi: ");
 			ecgi.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -608,7 +612,7 @@
 			sb.append("\t");
 		}
 		if (pci != null) {
-			sb.append("\"pci\": ").append(pci);
+			sb.append("pci: ").append(pci);
 		}
 		
 		sb.append(",\n");
@@ -616,7 +620,7 @@
 			sb.append("\t");
 		}
 		if (candScells != null) {
-			sb.append("\"candScells\": ");
+			sb.append("candScells: ");
 			candScells.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -625,7 +629,7 @@
 			sb.append("\t");
 		}
 		if (earfcnDl != null) {
-			sb.append("\"earfcnDl\": ").append(earfcnDl);
+			sb.append("earfcnDl: ").append(earfcnDl);
 		}
 		
 		sb.append(",\n");
@@ -633,7 +637,7 @@
 			sb.append("\t");
 		}
 		if (earfcnUl != null) {
-			sb.append("\"earfcnUl\": ").append(earfcnUl);
+			sb.append("earfcnUl: ").append(earfcnUl);
 		}
 		
 		sb.append(",\n");
@@ -641,7 +645,7 @@
 			sb.append("\t");
 		}
 		if (rbsPerTtiDl != null) {
-			sb.append("\"rbsPerTtiDl\": ").append(rbsPerTtiDl);
+			sb.append("rbsPerTtiDl: ").append(rbsPerTtiDl);
 		}
 		
 		sb.append(",\n");
@@ -649,7 +653,7 @@
 			sb.append("\t");
 		}
 		if (rbsPerTtiUl != null) {
-			sb.append("\"rbsPerTtiUl\": ").append(rbsPerTtiUl);
+			sb.append("rbsPerTtiUl: ").append(rbsPerTtiUl);
 		}
 		
 		sb.append(",\n");
@@ -657,7 +661,7 @@
 			sb.append("\t");
 		}
 		if (numTxAntenna != null) {
-			sb.append("\"numTxAntenna\": ").append(numTxAntenna);
+			sb.append("numTxAntenna: ").append(numTxAntenna);
 		}
 		
 		sb.append(",\n");
@@ -665,7 +669,7 @@
 			sb.append("\t");
 		}
 		if (duplexMode != null) {
-			sb.append("\"duplexMode\": ").append(duplexMode);
+			sb.append("duplexMode: ").append(duplexMode);
 		}
 		
 		if (tddConfig != null) {
@@ -673,7 +677,7 @@
 			for (int i = 0; i < indentLevel + 1; i++) {
 				sb.append("\t");
 			}
-			sb.append("\"tddConfig\": ").append(tddConfig);
+			sb.append("tddConfig: ").append(tddConfig);
 		}
 		
 		if (tddSplSfConfig != null) {
@@ -681,7 +685,7 @@
 			for (int i = 0; i < indentLevel + 1; i++) {
 				sb.append("\t");
 			}
-			sb.append("\"tddSplSfConfig\": ").append(tddSplSfConfig);
+			sb.append("tddSplSfConfig: ").append(tddSplSfConfig);
 		}
 		
 		sb.append(",\n");
@@ -689,7 +693,7 @@
 			sb.append("\t");
 		}
 		if (maxNumConnectedUes != null) {
-			sb.append("\"maxNumConnectedUes\": ").append(maxNumConnectedUes);
+			sb.append("maxNumConnectedUes: ").append(maxNumConnectedUes);
 		}
 		
 		sb.append(",\n");
@@ -697,7 +701,7 @@
 			sb.append("\t");
 		}
 		if (maxNumConnectedBearers != null) {
-			sb.append("\"maxNumConnectedBearers\": ").append(maxNumConnectedBearers);
+			sb.append("maxNumConnectedBearers: ").append(maxNumConnectedBearers);
 		}
 		
 		sb.append(",\n");
@@ -705,7 +709,7 @@
 			sb.append("\t");
 		}
 		if (maxNumUesSchedPerTtiDl != null) {
-			sb.append("\"maxNumUesSchedPerTtiDl\": ").append(maxNumUesSchedPerTtiDl);
+			sb.append("maxNumUesSchedPerTtiDl: ").append(maxNumUesSchedPerTtiDl);
 		}
 
 		sb.append(",\n");
@@ -713,7 +717,7 @@
 			sb.append("\t");
 		}
 		if (maxNumUesSchedPerTtiUl != null) {
-			sb.append("\"maxNumUesSchedPerTtiUl\": ").append(maxNumUesSchedPerTtiUl);
+			sb.append("maxNumUesSchedPerTtiUl: ").append(maxNumUesSchedPerTtiUl);
 		}
 		
 		sb.append(",\n");
@@ -721,7 +725,7 @@
 			sb.append("\t");
 		}
 		if (dlfsSchedEnable != null) {
-			sb.append("\"dlfsSchedEnable\": ").append(dlfsSchedEnable);
+			sb.append("dlfsSchedEnable: ").append(dlfsSchedEnable);
 		}
 
 		sb.append("\n");
diff --git a/src/main/java/org.onosproject.xran/codecs/pdu/CellConfigRequest.java b/src/main/java/org.onosproject.xran/codecs/pdu/CellConfigRequest.java
index d2a8b69..4f5e20b 100644
--- a/src/main/java/org.onosproject.xran/codecs/pdu/CellConfigRequest.java
+++ b/src/main/java/org.onosproject.xran/codecs/pdu/CellConfigRequest.java
@@ -4,11 +4,12 @@
 
 package org.onosproject.xran.codecs.pdu;
 
-import org.openmuc.jasn1.ber.BerByteArrayOutputStream;
-import org.openmuc.jasn1.ber.BerLength;
-import org.openmuc.jasn1.ber.BerTag;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
 import org.onosproject.xran.codecs.api.ECGI;
-import org.openmuc.jasn1.ber.types.string.BerUTF8String;
+import org.onosproject.xran.codecs.ber.types.string.BerUTF8String;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -21,6 +22,7 @@
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
 
+	@JsonIgnore
 	public byte[] code = null;
 	private ECGI ecgi = null;
 	
@@ -123,7 +125,7 @@
 			sb.append("\t");
 		}
 		if (ecgi != null) {
-			sb.append("\"ecgi\": ");
+			sb.append("ecgi: ");
 			ecgi.appendAsString(sb, indentLevel + 1);
 		}
 		
diff --git a/src/main/java/org.onosproject.xran/codecs/pdu/HOComplete.java b/src/main/java/org.onosproject.xran/codecs/pdu/HOComplete.java
index 7a4290a..68ae5c1 100644
--- a/src/main/java/org.onosproject.xran/codecs/pdu/HOComplete.java
+++ b/src/main/java/org.onosproject.xran/codecs/pdu/HOComplete.java
@@ -4,11 +4,12 @@
 
 package org.onosproject.xran.codecs.pdu;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import org.onosproject.xran.codecs.api.CRNTI;
 import org.onosproject.xran.codecs.api.ECGI;
-import org.openmuc.jasn1.ber.BerByteArrayOutputStream;
-import org.openmuc.jasn1.ber.BerLength;
-import org.openmuc.jasn1.ber.BerTag;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -21,6 +22,7 @@
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
 
+	@JsonIgnore
 	public byte[] code = null;
 	private ECGI ecgiT = null;
 	private ECGI ecgiS = null;
@@ -169,7 +171,7 @@
 			sb.append("\t");
 		}
 		if (ecgiT != null) {
-			sb.append("\"ecgiT\": ");
+			sb.append("ecgiT: ");
 			ecgiT.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -178,7 +180,7 @@
 			sb.append("\t");
 		}
 		if (ecgiS != null) {
-			sb.append("\"ecgiS\": ");
+			sb.append("ecgiS: ");
 			ecgiS.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -187,7 +189,7 @@
 			sb.append("\t");
 		}
 		if (crntiNew != null) {
-			sb.append("\"crntiNew\": ").append(crntiNew);
+			sb.append("crntiNew: ").append(crntiNew);
 		}
 		
 		sb.append("\n");
diff --git a/src/main/java/org.onosproject.xran/codecs/pdu/HOFailure.java b/src/main/java/org.onosproject.xran/codecs/pdu/HOFailure.java
index d0d2c90..ac42dcd 100644
--- a/src/main/java/org.onosproject.xran/codecs/pdu/HOFailure.java
+++ b/src/main/java/org.onosproject.xran/codecs/pdu/HOFailure.java
@@ -4,12 +4,13 @@
 
 package org.onosproject.xran.codecs.pdu;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import org.onosproject.xran.codecs.api.CRNTI;
 import org.onosproject.xran.codecs.api.ECGI;
 import org.onosproject.xran.codecs.api.HOFailureCause;
-import org.openmuc.jasn1.ber.BerByteArrayOutputStream;
-import org.openmuc.jasn1.ber.BerLength;
-import org.openmuc.jasn1.ber.BerTag;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -21,6 +22,7 @@
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
 
+	@JsonIgnore
 	public byte[] code = null;
 	private CRNTI crnti = null;
 	private ECGI ecgi = null;
@@ -169,7 +171,7 @@
 			sb.append("\t");
 		}
 		if (crnti != null) {
-			sb.append("\"crnti\": ").append(crnti);
+			sb.append("crnti: ").append(crnti);
 		}
 		
 		sb.append(",\n");
@@ -177,7 +179,7 @@
 			sb.append("\t");
 		}
 		if (ecgi != null) {
-			sb.append("\"ecgi\": ");
+			sb.append("ecgi: ");
 			ecgi.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -186,7 +188,7 @@
 			sb.append("\t");
 		}
 		if (cause != null) {
-			sb.append("\"cause\": ").append(cause);
+			sb.append("cause: ").append(cause);
 		}
 		
 		sb.append("\n");
diff --git a/src/main/java/org.onosproject.xran/codecs/pdu/HORequest.java b/src/main/java/org.onosproject.xran/codecs/pdu/HORequest.java
index f6a3076..38218d7 100644
--- a/src/main/java/org.onosproject.xran/codecs/pdu/HORequest.java
+++ b/src/main/java/org.onosproject.xran/codecs/pdu/HORequest.java
@@ -4,12 +4,13 @@
 
 package org.onosproject.xran.codecs.pdu;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import org.onosproject.xran.codecs.api.CRNTI;
 import org.onosproject.xran.codecs.api.ECGI;
-import org.openmuc.jasn1.ber.BerByteArrayOutputStream;
-import org.openmuc.jasn1.ber.BerLength;
-import org.openmuc.jasn1.ber.BerTag;
-import org.openmuc.jasn1.ber.types.string.BerUTF8String;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
+import org.onosproject.xran.codecs.ber.types.string.BerUTF8String;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -22,6 +23,7 @@
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
 
+	@JsonIgnore
 	public byte[] code = null;
 	private CRNTI crnti = null;
 	private ECGI ecgiS = null;
@@ -170,7 +172,7 @@
 			sb.append("\t");
 		}
 		if (crnti != null) {
-			sb.append("\"crnti\": ").append(crnti);
+			sb.append("crnti: ").append(crnti);
 		}
 		
 		sb.append(",\n");
@@ -178,7 +180,7 @@
 			sb.append("\t");
 		}
 		if (ecgiS != null) {
-			sb.append("\"ecgiS\": ");
+			sb.append("ecgiS: ");
 			ecgiS.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -187,7 +189,7 @@
 			sb.append("\t");
 		}
 		if (ecgiT != null) {
-			sb.append("\"ecgiT\": ");
+			sb.append("ecgiT: ");
 			ecgiT.appendAsString(sb, indentLevel + 1);
 		}
 		
diff --git a/src/main/java/org.onosproject.xran/codecs/pdu/L2MeasConfig.java b/src/main/java/org.onosproject.xran/codecs/pdu/L2MeasConfig.java
index f0de6d1..4e1f958 100644
--- a/src/main/java/org.onosproject.xran/codecs/pdu/L2MeasConfig.java
+++ b/src/main/java/org.onosproject.xran/codecs/pdu/L2MeasConfig.java
@@ -4,12 +4,13 @@
 
 package org.onosproject.xran.codecs.pdu;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import org.onosproject.xran.codecs.api.ECGI;
-import org.openmuc.jasn1.ber.BerByteArrayOutputStream;
-import org.openmuc.jasn1.ber.BerLength;
-import org.openmuc.jasn1.ber.BerTag;
-import org.openmuc.jasn1.ber.types.BerInteger;
-import org.openmuc.jasn1.ber.types.string.BerUTF8String;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
+import org.onosproject.xran.codecs.ber.types.BerInteger;
+import org.onosproject.xran.codecs.ber.types.string.BerUTF8String;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -22,6 +23,7 @@
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
 
+	@JsonIgnore
 	public byte[] code = null;
 	private ECGI ecgi = null;
 	private BerInteger  reportIntervalMs = null;
@@ -147,7 +149,7 @@
 			sb.append("\t");
 		}
 		if (ecgi != null) {
-			sb.append("\"ecgi\": ");
+			sb.append("ecgi: ");
 			ecgi.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -156,7 +158,7 @@
 			sb.append("\t");
 		}
 		if (reportIntervalMs != null) {
-			sb.append("\"reportIntervalMs\": ").append(reportIntervalMs);
+			sb.append("reportIntervalMs: ").append(reportIntervalMs);
 		}
 		
 		sb.append("\n");
diff --git a/src/main/java/org.onosproject.xran/codecs/pdu/PDCPMeasReportPerUe.java b/src/main/java/org.onosproject.xran/codecs/pdu/PDCPMeasReportPerUe.java
index d272974..b2ed3a3 100644
--- a/src/main/java/org.onosproject.xran/codecs/pdu/PDCPMeasReportPerUe.java
+++ b/src/main/java/org.onosproject.xran/codecs/pdu/PDCPMeasReportPerUe.java
@@ -14,12 +14,14 @@
 import java.math.BigInteger;
 import java.io.Serializable;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonValue;
 import org.onosproject.xran.codecs.api.CRNTI;
 import org.onosproject.xran.codecs.api.ECGI;
 import org.onosproject.xran.codecs.api.QCI;
-import org.openmuc.jasn1.ber.*;
-import org.openmuc.jasn1.ber.types.*;
-import org.openmuc.jasn1.ber.types.string.*;
+import org.onosproject.xran.codecs.ber.*;
+import org.onosproject.xran.codecs.ber.types.*;
+import org.onosproject.xran.codecs.ber.types.string.*;
 
 
 
@@ -32,6 +34,7 @@
 		private static final long serialVersionUID = 1L;
 
 		public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
+		@JsonIgnore
 		public byte[] code = null;
 		private List<QCI> seqOf = null;
 
@@ -43,6 +46,7 @@
 			this.code = code;
 		}
 
+		@JsonValue
 		public List<QCI> getQCI() {
 			if (seqOf == null) {
 				seqOf = new ArrayList<QCI>();
@@ -161,7 +165,7 @@
 		private static final long serialVersionUID = 1L;
 
 		public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
-		public byte[] code = null;
+		@JsonIgnore public byte[] code = null;
 		private List<BerInteger> seqOf = null;
 
 		public DataVolDl() {
@@ -172,7 +176,7 @@
 			this.code = code;
 		}
 
-		public List<BerInteger> getBerInteger() {
+		@JsonValue public List<BerInteger> getBerInteger() {
 			if (seqOf == null) {
 				seqOf = new ArrayList<BerInteger>();
 			}
@@ -290,7 +294,7 @@
 		private static final long serialVersionUID = 1L;
 
 		public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
-		public byte[] code = null;
+		@JsonIgnore public byte[] code = null;
 		private List<BerInteger> seqOf = null;
 
 		public DataVolUl() {
@@ -301,7 +305,7 @@
 			this.code = code;
 		}
 
-		public List<BerInteger> getBerInteger() {
+		@JsonValue public List<BerInteger> getBerInteger() {
 			if (seqOf == null) {
 				seqOf = new ArrayList<BerInteger>();
 			}
@@ -419,7 +423,7 @@
 		private static final long serialVersionUID = 1L;
 
 		public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
-		public byte[] code = null;
+		@JsonIgnore public byte[] code = null;
 		private List<BerInteger> seqOf = null;
 
 		public PktDelayDl() {
@@ -430,7 +434,7 @@
 			this.code = code;
 		}
 
-		public List<BerInteger> getBerInteger() {
+		@JsonValue public List<BerInteger> getBerInteger() {
 			if (seqOf == null) {
 				seqOf = new ArrayList<BerInteger>();
 			}
@@ -548,7 +552,7 @@
 		private static final long serialVersionUID = 1L;
 
 		public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
-		public byte[] code = null;
+		@JsonIgnore public byte[] code = null;
 		private List<BerInteger> seqOf = null;
 
 		public PktDelayUl() {
@@ -559,7 +563,7 @@
 			this.code = code;
 		}
 
-		public List<BerInteger> getBerInteger() {
+		@JsonValue public List<BerInteger> getBerInteger() {
 			if (seqOf == null) {
 				seqOf = new ArrayList<BerInteger>();
 			}
@@ -677,7 +681,7 @@
 		private static final long serialVersionUID = 1L;
 
 		public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
-		public byte[] code = null;
+		@JsonIgnore public byte[] code = null;
 		private List<BerInteger> seqOf = null;
 
 		public PktDiscardRateDl() {
@@ -688,7 +692,7 @@
 			this.code = code;
 		}
 
-		public List<BerInteger> getBerInteger() {
+		@JsonValue public List<BerInteger> getBerInteger() {
 			if (seqOf == null) {
 				seqOf = new ArrayList<BerInteger>();
 			}
@@ -806,7 +810,7 @@
 		private static final long serialVersionUID = 1L;
 
 		public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
-		public byte[] code = null;
+		@JsonIgnore public byte[] code = null;
 		private List<BerInteger> seqOf = null;
 
 		public PktLossRateDl() {
@@ -817,7 +821,7 @@
 			this.code = code;
 		}
 
-		public List<BerInteger> getBerInteger() {
+		@JsonValue public List<BerInteger> getBerInteger() {
 			if (seqOf == null) {
 				seqOf = new ArrayList<BerInteger>();
 			}
@@ -935,7 +939,7 @@
 		private static final long serialVersionUID = 1L;
 
 		public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
-		public byte[] code = null;
+		@JsonIgnore public byte[] code = null;
 		private List<BerInteger> seqOf = null;
 
 		public PktLossRateUl() {
@@ -946,7 +950,7 @@
 			this.code = code;
 		}
 
-		public List<BerInteger> getBerInteger() {
+		@JsonValue public List<BerInteger> getBerInteger() {
 			if (seqOf == null) {
 				seqOf = new ArrayList<BerInteger>();
 			}
@@ -1064,7 +1068,7 @@
 		private static final long serialVersionUID = 1L;
 
 		public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
-		public byte[] code = null;
+		@JsonIgnore public byte[] code = null;
 		private List<BerInteger> seqOf = null;
 
 		public ThroughputDl() {
@@ -1075,7 +1079,7 @@
 			this.code = code;
 		}
 
-		public List<BerInteger> getBerInteger() {
+		@JsonValue public List<BerInteger> getBerInteger() {
 			if (seqOf == null) {
 				seqOf = new ArrayList<BerInteger>();
 			}
@@ -1193,7 +1197,7 @@
 		private static final long serialVersionUID = 1L;
 
 		public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
-		public byte[] code = null;
+		@JsonIgnore public byte[] code = null;
 		private List<BerInteger> seqOf = null;
 
 		public ThroughputUl() {
@@ -1204,6 +1208,7 @@
 			this.code = code;
 		}
 
+		@JsonValue
 		public List<BerInteger> getBerInteger() {
 			if (seqOf == null) {
 				seqOf = new ArrayList<BerInteger>();
@@ -1319,7 +1324,7 @@
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
 
-	public byte[] code = null;
+	@JsonIgnore public byte[] code = null;
 	private ECGI ecgi = null;
 	private CRNTI crnti = null;
 	private QciVals qciVals = null;
@@ -1674,7 +1679,7 @@
 			sb.append("\t");
 		}
 		if (ecgi != null) {
-			sb.append("\"ecgi\": ");
+			sb.append("ecgi: ");
 			ecgi.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -1683,7 +1688,7 @@
 			sb.append("\t");
 		}
 		if (crnti != null) {
-			sb.append("\"crnti\": ").append(crnti);
+			sb.append("crnti: ").append(crnti);
 		}
 		
 		sb.append(",\n");
@@ -1691,7 +1696,7 @@
 			sb.append("\t");
 		}
 		if (qciVals != null) {
-			sb.append("\"qciVals\": ");
+			sb.append("qciVals: ");
 			qciVals.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -1700,7 +1705,7 @@
 			sb.append("\t");
 		}
 		if (dataVolDl != null) {
-			sb.append("\"dataVolDl\": ");
+			sb.append("dataVolDl: ");
 			dataVolDl.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -1709,7 +1714,7 @@
 			sb.append("\t");
 		}
 		if (dataVolUl != null) {
-			sb.append("\"dataVolUl\": ");
+			sb.append("dataVolUl: ");
 			dataVolUl.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -1718,7 +1723,7 @@
 			sb.append("\t");
 		}
 		if (pktDelayDl != null) {
-			sb.append("\"pktDelayDl\": ");
+			sb.append("pktDelayDl: ");
 			pktDelayDl.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -1727,7 +1732,7 @@
 			sb.append("\t");
 		}
 		if (pktDelayUl != null) {
-			sb.append("\"pktDelayUl\": ");
+			sb.append("pktDelayUl: ");
 			pktDelayUl.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -1736,7 +1741,7 @@
 			sb.append("\t");
 		}
 		if (pktDiscardRateDl != null) {
-			sb.append("\"pktDiscardRateDl\": ");
+			sb.append("pktDiscardRateDl: ");
 			pktDiscardRateDl.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -1745,7 +1750,7 @@
 			sb.append("\t");
 		}
 		if (pktLossRateDl != null) {
-			sb.append("\"pktLossRateDl\": ");
+			sb.append("pktLossRateDl: ");
 			pktLossRateDl.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -1754,7 +1759,7 @@
 			sb.append("\t");
 		}
 		if (pktLossRateUl != null) {
-			sb.append("\"pktLossRateUl\": ");
+			sb.append("pktLossRateUl: ");
 			pktLossRateUl.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -1763,7 +1768,7 @@
 			sb.append("\t");
 		}
 		if (throughputDl != null) {
-			sb.append("\"throughputDl\": ");
+			sb.append("throughputDl: ");
 			throughputDl.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -1772,7 +1777,7 @@
 			sb.append("\t");
 		}
 		if (throughputUl != null) {
-			sb.append("\"throughputUl\": ");
+			sb.append("throughputUl: ");
 			throughputUl.appendAsString(sb, indentLevel + 1);
 		}
 		
diff --git a/src/main/java/org.onosproject.xran/codecs/pdu/RRMConfig.java b/src/main/java/org.onosproject.xran/codecs/pdu/RRMConfig.java
index 4c9bae7..c2164c3 100644
--- a/src/main/java/org.onosproject.xran/codecs/pdu/RRMConfig.java
+++ b/src/main/java/org.onosproject.xran/codecs/pdu/RRMConfig.java
@@ -4,15 +4,17 @@
 
 package org.onosproject.xran.codecs.pdu;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonValue;
 import org.onosproject.xran.codecs.api.CRNTI;
 import org.onosproject.xran.codecs.api.ECGI;
 import org.onosproject.xran.codecs.api.XICICPA;
-import org.openmuc.jasn1.ber.BerByteArrayOutputStream;
-import org.openmuc.jasn1.ber.BerLength;
-import org.openmuc.jasn1.ber.BerTag;
-import org.openmuc.jasn1.ber.types.BerBitString;
-import org.openmuc.jasn1.ber.types.BerInteger;
-import org.openmuc.jasn1.ber.types.string.BerUTF8String;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
+import org.onosproject.xran.codecs.ber.types.BerBitString;
+import org.onosproject.xran.codecs.ber.types.BerInteger;
+import org.onosproject.xran.codecs.ber.types.string.BerUTF8String;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -26,6 +28,7 @@
 
     public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
     private static final long serialVersionUID = 1L;
+    @JsonIgnore
     public byte[] code = null;
     private ECGI ecgi = null;
     private Crnti crnti = null;
@@ -355,7 +358,7 @@
             sb.append("\t");
         }
         if (ecgi != null) {
-            sb.append("\"ecgi\": ");
+            sb.append("ecgi: ");
             ecgi.appendAsString(sb, indentLevel + 1);
         }
 
@@ -364,7 +367,7 @@
             for (int i = 0; i < indentLevel + 1; i++) {
                 sb.append("\t");
             }
-            sb.append("\"crnti\": ");
+            sb.append("crnti: ");
             crnti.appendAsString(sb, indentLevel + 1);
         }
 
@@ -373,7 +376,7 @@
             for (int i = 0; i < indentLevel + 1; i++) {
                 sb.append("\t");
             }
-            sb.append("\"pa\": ");
+            sb.append("pa: ");
             pa.appendAsString(sb, indentLevel + 1);
         }
 
@@ -382,7 +385,7 @@
             for (int i = 0; i < indentLevel + 1; i++) {
                 sb.append("\t");
             }
-            sb.append("\"startPrbDl\": ");
+            sb.append("startPrbDl: ");
             startPrbDl.appendAsString(sb, indentLevel + 1);
         }
 
@@ -391,7 +394,7 @@
             for (int i = 0; i < indentLevel + 1; i++) {
                 sb.append("\t");
             }
-            sb.append("\"endPrbDl\": ");
+            sb.append("endPrbDl: ");
             endPrbDl.appendAsString(sb, indentLevel + 1);
         }
 
@@ -400,7 +403,7 @@
             for (int i = 0; i < indentLevel + 1; i++) {
                 sb.append("\t");
             }
-            sb.append("\"subframeBitmaskDl\": ");
+            sb.append("subframeBitmaskDl: ");
             subframeBitmaskDl.appendAsString(sb, indentLevel + 1);
         }
 
@@ -409,7 +412,7 @@
             for (int i = 0; i < indentLevel + 1; i++) {
                 sb.append("\t");
             }
-            sb.append("\"p0UePusch\": ");
+            sb.append("p0UePusch: ");
             p0UePusch.appendAsString(sb, indentLevel + 1);
         }
 
@@ -418,7 +421,7 @@
             for (int i = 0; i < indentLevel + 1; i++) {
                 sb.append("\t");
             }
-            sb.append("\"startPrbUl\": ");
+            sb.append("startPrbUl: ");
             startPrbUl.appendAsString(sb, indentLevel + 1);
         }
 
@@ -427,7 +430,7 @@
             for (int i = 0; i < indentLevel + 1; i++) {
                 sb.append("\t");
             }
-            sb.append("\"endPrbUl\": ");
+            sb.append("endPrbUl: ");
             endPrbUl.appendAsString(sb, indentLevel + 1);
         }
 
@@ -436,7 +439,7 @@
             for (int i = 0; i < indentLevel + 1; i++) {
                 sb.append("\t");
             }
-            sb.append("\"subframeBitmaskUl\": ");
+            sb.append("subframeBitmaskUl: ");
             subframeBitmaskUl.appendAsString(sb, indentLevel + 1);
         }
 
@@ -451,7 +454,7 @@
 
         public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
         private static final long serialVersionUID = 1L;
-        public byte[] code = null;
+        @JsonIgnore public byte[] code = null;
         private List<CRNTI> seqOf = null;
 
         public Crnti() {
@@ -462,6 +465,7 @@
             this.code = code;
         }
 
+        @JsonValue
         public List<CRNTI> getCRNTI() {
             if (seqOf == null) {
                 seqOf = new ArrayList<CRNTI>();
@@ -579,7 +583,7 @@
 
         public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
         private static final long serialVersionUID = 1L;
-        public byte[] code = null;
+        @JsonIgnore public byte[] code = null;
         private List<XICICPA> seqOf = null;
 
         public Pa() {
@@ -590,6 +594,7 @@
             this.code = code;
         }
 
+        @JsonValue
         public List<XICICPA> getXICICPA() {
             if (seqOf == null) {
                 seqOf = new ArrayList<XICICPA>();
@@ -703,7 +708,7 @@
 
         public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
         private static final long serialVersionUID = 1L;
-        public byte[] code = null;
+        @JsonIgnore public byte[] code = null;
         private List<BerInteger> seqOf = null;
 
         public StartPrbDl() {
@@ -722,7 +727,7 @@
             this.seqOf = seqOf;
         }
 
-        public List<BerInteger> getBerInteger() {
+        @JsonValue public List<BerInteger> getBerInteger() {
             if (seqOf == null) {
                 seqOf = new ArrayList<BerInteger>();
             }
@@ -838,7 +843,7 @@
 
         public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
         private static final long serialVersionUID = 1L;
-        public byte[] code = null;
+        @JsonIgnore public byte[] code = null;
         private List<BerInteger> seqOf = null;
 
         public EndPrbDl() {
@@ -849,7 +854,7 @@
             this.code = code;
         }
 
-        public List<BerInteger> getBerInteger() {
+        @JsonValue public List<BerInteger> getBerInteger() {
             if (seqOf == null) {
                 seqOf = new ArrayList<BerInteger>();
             }
@@ -973,7 +978,7 @@
 
         public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
         private static final long serialVersionUID = 1L;
-        public byte[] code = null;
+        @JsonIgnore public byte[] code = null;
         private List<BerBitString> seqOf = null;
 
         public SubframeBitmaskDl() {
@@ -984,6 +989,7 @@
             this.code = code;
         }
 
+        @JsonValue
         public List<BerBitString> getBerBitString() {
             if (seqOf == null) {
                 seqOf = new ArrayList<BerBitString>();
@@ -1077,13 +1083,13 @@
             } else {
                 Iterator<BerBitString> it = seqOf.iterator();
                 if (it.hasNext()) {
-                    sb.append("\"" + it.next() + "\"");
+                    sb.append("" + it.next() + "");
                     while (it.hasNext()) {
                         sb.append(",\n");
                         for (int i = 0; i < indentLevel + 1; i++) {
                             sb.append("\t");
                         }
-                        sb.append("\"" + it.next() + "\"");
+                        sb.append("" + it.next() + "");
                     }
                 }
             }
@@ -1101,7 +1107,7 @@
 
         public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
         private static final long serialVersionUID = 1L;
-        public byte[] code = null;
+        @JsonIgnore public byte[] code = null;
         private List<BerInteger> seqOf = null;
 
         public P0UePusch() {
@@ -1112,7 +1118,7 @@
             this.code = code;
         }
 
-        public List<BerInteger> getBerInteger() {
+        @JsonValue public List<BerInteger> getBerInteger() {
             if (seqOf == null) {
                 seqOf = new ArrayList<BerInteger>();
             }
@@ -1225,7 +1231,7 @@
 
         public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
         private static final long serialVersionUID = 1L;
-        public byte[] code = null;
+        @JsonIgnore public byte[] code = null;
         private List<BerInteger> seqOf = null;
 
         public StartPrbUl() {
@@ -1236,7 +1242,7 @@
             this.code = code;
         }
 
-        public List<BerInteger> getBerInteger() {
+        @JsonValue public List<BerInteger> getBerInteger() {
             if (seqOf == null) {
                 seqOf = new ArrayList<BerInteger>();
             }
@@ -1360,7 +1366,7 @@
 
         public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
         private static final long serialVersionUID = 1L;
-        public byte[] code = null;
+        @JsonIgnore public byte[] code = null;
         private List<BerInteger> seqOf = null;
 
         public EndPrbUl() {
@@ -1371,6 +1377,7 @@
             this.code = code;
         }
 
+        @JsonValue
         public List<BerInteger> getBerInteger() {
             if (seqOf == null) {
                 seqOf = new ArrayList<BerInteger>();
@@ -1495,7 +1502,7 @@
 
         public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
         private static final long serialVersionUID = 1L;
-        public byte[] code = null;
+        @JsonIgnore public byte[] code = null;
         private List<BerBitString> seqOf = null;
 
         public SubframeBitmaskUl() {
@@ -1506,6 +1513,7 @@
             this.code = code;
         }
 
+        @JsonValue
         public List<BerBitString> getBerBitString() {
             if (seqOf == null) {
                 seqOf = new ArrayList<BerBitString>();
diff --git a/src/main/java/org.onosproject.xran/codecs/pdu/RRMConfigStatus.java b/src/main/java/org.onosproject.xran/codecs/pdu/RRMConfigStatus.java
index ab88a6d..015e8fe 100644
--- a/src/main/java/org.onosproject.xran/codecs/pdu/RRMConfigStatus.java
+++ b/src/main/java/org.onosproject.xran/codecs/pdu/RRMConfigStatus.java
@@ -4,12 +4,14 @@
 
 package org.onosproject.xran.codecs.pdu;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonValue;
 import org.onosproject.xran.codecs.api.CRNTI;
 import org.onosproject.xran.codecs.api.ECGI;
-import org.openmuc.jasn1.ber.BerByteArrayOutputStream;
-import org.openmuc.jasn1.ber.BerLength;
-import org.openmuc.jasn1.ber.BerTag;
-import org.openmuc.jasn1.ber.types.BerEnum;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
+import org.onosproject.xran.codecs.ber.types.BerEnum;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -28,6 +30,7 @@
 		private static final long serialVersionUID = 1L;
 
 		public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
+		@JsonIgnore
 		public byte[] code = null;
 		private List<CRNTI> seqOf = null;
 
@@ -39,6 +42,7 @@
 			this.code = code;
 		}
 
+		@JsonValue
 		public List<CRNTI> getCRNTI() {
 			if (seqOf == null) {
 				seqOf = new ArrayList<CRNTI>();
@@ -154,7 +158,7 @@
 		private static final long serialVersionUID = 1L;
 
 		public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
-		public byte[] code = null;
+		@JsonIgnore public byte[] code = null;
 		private List<BerEnum> seqOf = null;
 
 		public Status() {
@@ -165,6 +169,7 @@
 			this.code = code;
 		}
 
+		@JsonValue
 		public List<BerEnum> getBerEnum() {
 			if (seqOf == null) {
 				seqOf = new ArrayList<BerEnum>();
@@ -277,7 +282,7 @@
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
 
-	public byte[] code = null;
+	@JsonIgnore public byte[] code = null;
 	private ECGI ecgi = null;
 	private Crnti crnti = null;
 	private Status status = null;
@@ -424,7 +429,7 @@
 			sb.append("\t");
 		}
 		if (ecgi != null) {
-			sb.append("\"ecgi\": ");
+			sb.append("ecgi: ");
 			ecgi.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -433,7 +438,7 @@
 			for (int i = 0; i < indentLevel + 1; i++) {
 				sb.append("\t");
 			}
-			sb.append("\"crnti\": ");
+			sb.append("crnti: ");
 			crnti.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -442,7 +447,7 @@
 			sb.append("\t");
 		}
 		if (status != null) {
-			sb.append("\"status\": ");
+			sb.append("status: ");
 			status.appendAsString(sb, indentLevel + 1);
 		}
 		
diff --git a/src/main/java/org.onosproject.xran/codecs/pdu/RXSigMeasConfig.java b/src/main/java/org.onosproject.xran/codecs/pdu/RXSigMeasConfig.java
index f8b5403..02b7cf3 100644
--- a/src/main/java/org.onosproject.xran/codecs/pdu/RXSigMeasConfig.java
+++ b/src/main/java/org.onosproject.xran/codecs/pdu/RXSigMeasConfig.java
@@ -4,11 +4,13 @@
 
 package org.onosproject.xran.codecs.pdu;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonValue;
 import org.onosproject.xran.codecs.api.*;
-import org.openmuc.jasn1.ber.BerByteArrayOutputStream;
-import org.openmuc.jasn1.ber.BerLength;
-import org.openmuc.jasn1.ber.BerTag;
-import org.openmuc.jasn1.ber.types.string.BerUTF8String;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
+import org.onosproject.xran.codecs.ber.types.string.BerUTF8String;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -27,7 +29,7 @@
 		private static final long serialVersionUID = 1L;
 
 		public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
-		public byte[] code = null;
+		@JsonIgnore public byte[] code = null;
 		private List<PCIARFCN> seqOf = null;
 
 		public MeasCells() {
@@ -38,6 +40,7 @@
 			this.code = code;
 		}
 
+		@JsonValue
 		public List<PCIARFCN> getPCIARFCN() {
 			if (seqOf == null) {
 				seqOf = new ArrayList<PCIARFCN>();
@@ -153,6 +156,7 @@
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
 
+	@JsonIgnore
 	public byte[] code = null;
 	private ECGI ecgi = null;
 	private CRNTI crnti = null;
@@ -347,7 +351,7 @@
 			sb.append("\t");
 		}
 		if (ecgi != null) {
-			sb.append("\"ecgi\": ");
+			sb.append("ecgi: ");
 			ecgi.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -356,7 +360,7 @@
 			sb.append("\t");
 		}
 		if (crnti != null) {
-			sb.append("\"crnti\": ").append(crnti);
+			sb.append("crnti: ").append(crnti);
 		}
 		
 		sb.append(",\n");
@@ -364,7 +368,7 @@
 			sb.append("\t");
 		}
 		if (reportQty != null) {
-			sb.append("\"reportQty\": ").append(reportQty);
+			sb.append("reportQty: ").append(reportQty);
 		}
 		
 		sb.append(",\n");
@@ -372,7 +376,7 @@
 			sb.append("\t");
 		}
 		if (measCells != null) {
-			sb.append("\"measCells\": ");
+			sb.append("measCells: ");
 			measCells.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -381,7 +385,7 @@
 			sb.append("\t");
 		}
 		if (reportInterval != null) {
-			sb.append("\"reportInterval\": ").append(reportInterval);
+			sb.append("reportInterval: ").append(reportInterval);
 		}
 		
 		sb.append("\n");
diff --git a/src/main/java/org.onosproject.xran/codecs/pdu/RXSigMeasReport.java b/src/main/java/org.onosproject.xran/codecs/pdu/RXSigMeasReport.java
index bee7bdd..e6d735e 100644
--- a/src/main/java/org.onosproject.xran/codecs/pdu/RXSigMeasReport.java
+++ b/src/main/java/org.onosproject.xran/codecs/pdu/RXSigMeasReport.java
@@ -4,12 +4,14 @@
 
 package org.onosproject.xran.codecs.pdu;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonValue;
 import org.onosproject.xran.codecs.api.CRNTI;
 import org.onosproject.xran.codecs.api.ECGI;
 import org.onosproject.xran.codecs.api.RXSigReport;
-import org.openmuc.jasn1.ber.BerByteArrayOutputStream;
-import org.openmuc.jasn1.ber.BerLength;
-import org.openmuc.jasn1.ber.BerTag;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -27,6 +29,7 @@
 		private static final long serialVersionUID = 1L;
 
 		public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
+		@JsonIgnore
 		public byte[] code = null;
 		private List<RXSigReport> seqOf = null;
 
@@ -38,6 +41,7 @@
 			this.code = code;
 		}
 
+		@JsonValue
 		public List<RXSigReport> getRXSigReport() {
 			if (seqOf == null) {
 				seqOf = new ArrayList<RXSigReport>();
@@ -153,7 +157,7 @@
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
 
-	public byte[] code = null;
+	@JsonIgnore public byte[] code = null;
 	private CRNTI crnti = null;
 	private ECGI ecgi = null;
 	private CellMeasReports cellMeasReports = null;
@@ -301,7 +305,7 @@
 			sb.append("\t");
 		}
 		if (crnti != null) {
-			sb.append("\"crnti\": ").append(crnti);
+			sb.append("crnti: ").append(crnti);
 		}
 		
 		sb.append(",\n");
@@ -309,7 +313,7 @@
 			sb.append("\t");
 		}
 		if (ecgi != null) {
-			sb.append("\"ecgi\": ");
+			sb.append("ecgi: ");
 			ecgi.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -318,7 +322,7 @@
 			sb.append("\t");
 		}
 		if (cellMeasReports != null) {
-			sb.append("\"cellMeasReports\": ");
+			sb.append("cellMeasReports: ");
 			cellMeasReports.appendAsString(sb, indentLevel + 1);
 		}
 		
diff --git a/src/main/java/org.onosproject.xran/codecs/pdu/RadioMeasReportPerCell.java b/src/main/java/org.onosproject.xran/codecs/pdu/RadioMeasReportPerCell.java
index ac138c6..bb1c59a 100644
--- a/src/main/java/org.onosproject.xran/codecs/pdu/RadioMeasReportPerCell.java
+++ b/src/main/java/org.onosproject.xran/codecs/pdu/RadioMeasReportPerCell.java
@@ -4,11 +4,13 @@
 
 package org.onosproject.xran.codecs.pdu;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonValue;
 import org.onosproject.xran.codecs.api.ECGI;
-import org.openmuc.jasn1.ber.BerByteArrayOutputStream;
-import org.openmuc.jasn1.ber.BerLength;
-import org.openmuc.jasn1.ber.BerTag;
-import org.openmuc.jasn1.ber.types.BerInteger;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
+import org.onosproject.xran.codecs.ber.types.BerInteger;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -27,6 +29,7 @@
 		private static final long serialVersionUID = 1L;
 
 		public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
+		@JsonIgnore
 		public byte[] code = null;
 		private List<BerInteger> seqOf = null;
 
@@ -38,7 +41,7 @@
 			this.code = code;
 		}
 
-		public List<BerInteger> getBerInteger() {
+		@JsonValue public List<BerInteger> getBerInteger() {
 			if (seqOf == null) {
 				seqOf = new ArrayList<BerInteger>();
 			}
@@ -157,7 +160,7 @@
 		private static final long serialVersionUID = 1L;
 
 		public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
-		public byte[] code = null;
+		@JsonIgnore public byte[] code = null;
 		private List<BerInteger> seqOf = null;
 
 		public PucchIntfPowerHist() {
@@ -168,6 +171,7 @@
 			this.code = code;
 		}
 
+		@JsonValue
 		public List<BerInteger> getBerInteger() {
 			if (seqOf == null) {
 				seqOf = new ArrayList<BerInteger>();
@@ -283,7 +287,7 @@
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
 
-	public byte[] code = null;
+	@JsonIgnore public byte[] code = null;
 	private ECGI ecgi = null;
 	private PuschIntfPowerHist puschIntfPowerHist = null;
 	private PucchIntfPowerHist pucchIntfPowerHist = null;
@@ -431,7 +435,7 @@
 			sb.append("\t");
 		}
 		if (ecgi != null) {
-			sb.append("\"ecgi\": ");
+			sb.append("ecgi: ");
 			ecgi.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -440,7 +444,7 @@
 			sb.append("\t");
 		}
 		if (puschIntfPowerHist != null) {
-			sb.append("\"puschIntfPowerHist\": ");
+			sb.append("puschIntfPowerHist: ");
 			puschIntfPowerHist.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -449,7 +453,7 @@
 			sb.append("\t");
 		}
 		if (pucchIntfPowerHist != null) {
-			sb.append("\"pucchIntfPowerHist\": ");
+			sb.append("pucchIntfPowerHist: ");
 			pucchIntfPowerHist.appendAsString(sb, indentLevel + 1);
 		}
 		
diff --git a/src/main/java/org.onosproject.xran/codecs/pdu/RadioMeasReportPerUE.java b/src/main/java/org.onosproject.xran/codecs/pdu/RadioMeasReportPerUE.java
index 15f1ea9..7b6b17c 100644
--- a/src/main/java/org.onosproject.xran/codecs/pdu/RadioMeasReportPerUE.java
+++ b/src/main/java/org.onosproject.xran/codecs/pdu/RadioMeasReportPerUE.java
@@ -4,12 +4,14 @@
 
 package org.onosproject.xran.codecs.pdu;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonValue;
 import org.onosproject.xran.codecs.api.CRNTI;
 import org.onosproject.xran.codecs.api.ECGI;
 import org.onosproject.xran.codecs.api.RadioRepPerServCell;
-import org.openmuc.jasn1.ber.BerByteArrayOutputStream;
-import org.openmuc.jasn1.ber.BerLength;
-import org.openmuc.jasn1.ber.BerTag;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -27,6 +29,7 @@
 		private static final long serialVersionUID = 1L;
 
 		public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
+		@JsonIgnore
 		public byte[] code = null;
 		private List<RadioRepPerServCell> seqOf = null;
 
@@ -38,6 +41,7 @@
 			this.code = code;
 		}
 
+		@JsonValue
 		public List<RadioRepPerServCell> getRadioRepPerServCell() {
 			if (seqOf == null) {
 				seqOf = new ArrayList<RadioRepPerServCell>();
@@ -153,7 +157,7 @@
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
 
-	public byte[] code = null;
+	@JsonIgnore public byte[] code = null;
 	private ECGI ecgi = null;
 	private CRNTI crnti = null;
 	private RadioReportServCells radioReportServCells = null;
@@ -301,7 +305,7 @@
 			sb.append("\t");
 		}
 		if (ecgi != null) {
-			sb.append("\"ecgi\": ");
+			sb.append("ecgi: ");
 			ecgi.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -310,7 +314,7 @@
 			sb.append("\t");
 		}
 		if (crnti != null) {
-			sb.append("\"crnti\": ").append(crnti);
+			sb.append("crnti: ").append(crnti);
 		}
 		
 		sb.append(",\n");
@@ -318,7 +322,7 @@
 			sb.append("\t");
 		}
 		if (radioReportServCells != null) {
-			sb.append("\"radioReportServCells\": ");
+			sb.append("radioReportServCells: ");
 			radioReportServCells.appendAsString(sb, indentLevel + 1);
 		}
 		
diff --git a/src/main/java/org.onosproject.xran/codecs/pdu/ScellAdd.java b/src/main/java/org.onosproject.xran/codecs/pdu/ScellAdd.java
index 3ee1f02..674b79d 100644
--- a/src/main/java/org.onosproject.xran/codecs/pdu/ScellAdd.java
+++ b/src/main/java/org.onosproject.xran/codecs/pdu/ScellAdd.java
@@ -4,16 +4,18 @@
 
 package org.onosproject.xran.codecs.pdu;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonValue;
 import org.onosproject.xran.codecs.api.CRNTI;
 import org.onosproject.xran.codecs.api.ECGI;
 import org.onosproject.xran.codecs.api.PropScell;
-import org.openmuc.jasn1.ber.BerByteArrayOutputStream;
-import org.openmuc.jasn1.ber.BerLength;
-import org.openmuc.jasn1.ber.BerTag;
-import org.openmuc.jasn1.ber.types.BerBoolean;
-import org.openmuc.jasn1.ber.types.BerEnum;
-import org.openmuc.jasn1.ber.types.BerInteger;
-import org.openmuc.jasn1.ber.types.string.BerUTF8String;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
+import org.onosproject.xran.codecs.ber.types.BerBoolean;
+import org.onosproject.xran.codecs.ber.types.BerEnum;
+import org.onosproject.xran.codecs.ber.types.BerInteger;
+import org.onosproject.xran.codecs.ber.types.string.BerUTF8String;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -28,6 +30,7 @@
 
     public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
     private static final long serialVersionUID = 1L;
+    @JsonIgnore
     public byte[] code = null;
     private CRNTI crnti = null;
     private ECGI ecgi = null;
@@ -205,7 +208,7 @@
             sb.append("\t");
         }
         if (crnti != null) {
-            sb.append("\"crnti\": ").append(crnti);
+            sb.append("crnti: ").append(crnti);
         }
 
         sb.append(",\n");
@@ -213,7 +216,7 @@
             sb.append("\t");
         }
         if (ecgi != null) {
-            sb.append("\"ecgi\": ");
+            sb.append("ecgi: ");
             ecgi.appendAsString(sb, indentLevel + 1);
         }
 
@@ -222,7 +225,7 @@
             sb.append("\t");
         }
         if (scellsProp != null) {
-            sb.append("\"scellsProp\": ");
+            sb.append("scellsProp: ");
             scellsProp.appendAsString(sb, indentLevel + 1);
         }
 
@@ -237,7 +240,7 @@
 
         public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
         private static final long serialVersionUID = 1L;
-        public byte[] code = null;
+        @JsonIgnore public byte[] code = null;
         private List<PropScell> seqOf = null;
 
         public ScellsProp() {
@@ -248,6 +251,7 @@
             this.code = code;
         }
 
+        @JsonValue
         public List<PropScell> getPropScell() {
             if (seqOf == null) {
                 seqOf = new ArrayList<PropScell>();
diff --git a/src/main/java/org.onosproject.xran/codecs/pdu/ScellAddStatus.java b/src/main/java/org.onosproject.xran/codecs/pdu/ScellAddStatus.java
index 99ddadd..1efc52f 100644
--- a/src/main/java/org.onosproject.xran/codecs/pdu/ScellAddStatus.java
+++ b/src/main/java/org.onosproject.xran/codecs/pdu/ScellAddStatus.java
@@ -4,13 +4,15 @@
 
 package org.onosproject.xran.codecs.pdu;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonValue;
 import org.onosproject.xran.codecs.api.CRNTI;
 import org.onosproject.xran.codecs.api.ECGI;
 import org.onosproject.xran.codecs.api.PCIARFCN;
-import org.openmuc.jasn1.ber.BerByteArrayOutputStream;
-import org.openmuc.jasn1.ber.BerLength;
-import org.openmuc.jasn1.ber.BerTag;
-import org.openmuc.jasn1.ber.types.BerEnum;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
+import org.onosproject.xran.codecs.ber.types.BerEnum;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -28,6 +30,7 @@
 		private static final long serialVersionUID = 1L;
 
 		public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
+		@JsonIgnore
 		public byte[] code = null;
 		private List<PCIARFCN> seqOf = null;
 
@@ -39,6 +42,7 @@
 			this.code = code;
 		}
 
+		@JsonValue
 		public List<PCIARFCN> getPCIARFCN() {
 			if (seqOf == null) {
 				seqOf = new ArrayList<PCIARFCN>();
@@ -154,7 +158,7 @@
 		private static final long serialVersionUID = 1L;
 
 		public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
-		public byte[] code = null;
+		@JsonIgnore public byte[] code = null;
 		private List<BerEnum> seqOf = null;
 
 		public Status() {
@@ -165,6 +169,7 @@
 			this.code = code;
 		}
 
+		@JsonValue
 		public List<BerEnum> getBerEnum() {
 			if (seqOf == null) {
 				seqOf = new ArrayList<BerEnum>();
@@ -277,7 +282,7 @@
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
 
-	public byte[] code = null;
+	@JsonIgnore public byte[] code = null;
 	private CRNTI crnti = null;
 	private ECGI ecgi = null;
 	private ScellsInd scellsInd = null;
@@ -448,7 +453,7 @@
 			sb.append("\t");
 		}
 		if (crnti != null) {
-			sb.append("\"crnti\": ").append(crnti);
+			sb.append("crnti: ").append(crnti);
 		}
 		
 		sb.append(",\n");
@@ -456,7 +461,7 @@
 			sb.append("\t");
 		}
 		if (ecgi != null) {
-			sb.append("\"ecgi\": ");
+			sb.append("ecgi: ");
 			ecgi.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -465,7 +470,7 @@
 			sb.append("\t");
 		}
 		if (scellsInd != null) {
-			sb.append("\"scellsInd\": ");
+			sb.append("scellsInd: ");
 			scellsInd.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -474,7 +479,7 @@
 			sb.append("\t");
 		}
 		if (status != null) {
-			sb.append("\"status\": ");
+			sb.append("status: ");
 			status.appendAsString(sb, indentLevel + 1);
 		}
 
diff --git a/src/main/java/org.onosproject.xran/codecs/pdu/ScellDelete.java b/src/main/java/org.onosproject.xran/codecs/pdu/ScellDelete.java
index 02dd7d2..6080f69 100644
--- a/src/main/java/org.onosproject.xran/codecs/pdu/ScellDelete.java
+++ b/src/main/java/org.onosproject.xran/codecs/pdu/ScellDelete.java
@@ -4,13 +4,15 @@
 
 package org.onosproject.xran.codecs.pdu;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonValue;
 import org.onosproject.xran.codecs.api.CRNTI;
 import org.onosproject.xran.codecs.api.ECGI;
 import org.onosproject.xran.codecs.api.PCIARFCN;
-import org.openmuc.jasn1.ber.BerByteArrayOutputStream;
-import org.openmuc.jasn1.ber.BerLength;
-import org.openmuc.jasn1.ber.BerTag;
-import org.openmuc.jasn1.ber.types.string.BerUTF8String;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
+import org.onosproject.xran.codecs.ber.types.string.BerUTF8String;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -24,6 +26,7 @@
 
     public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
     private static final long serialVersionUID = 1L;
+    @JsonIgnore
     public byte[] code = null;
     private CRNTI crnti = null;
     private ECGI ecgi = null;
@@ -199,7 +202,7 @@
             sb.append("\t");
         }
         if (crnti != null) {
-            sb.append("\"crnti\": ").append(crnti);
+            sb.append("crnti: ").append(crnti);
         }
 
         sb.append(",\n");
@@ -207,7 +210,7 @@
             sb.append("\t");
         }
         if (ecgi != null) {
-            sb.append("\"ecgi\": ");
+            sb.append("ecgi: ");
             ecgi.appendAsString(sb, indentLevel + 1);
         }
 
@@ -216,7 +219,7 @@
             sb.append("\t");
         }
         if (scellsInd != null) {
-            sb.append("\"scellsInd\": ");
+            sb.append("scellsInd: ");
             scellsInd.appendAsString(sb, indentLevel + 1);
         }
 
@@ -231,7 +234,7 @@
 
         public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
         private static final long serialVersionUID = 1L;
-        public byte[] code = null;
+        @JsonIgnore public byte[] code = null;
         private List<PCIARFCN> seqOf = null;
 
         public ScellsInd() {
@@ -242,6 +245,7 @@
             this.code = code;
         }
 
+        @JsonValue
         public List<PCIARFCN> getPCIARFCN() {
             if (seqOf == null) {
                 seqOf = new ArrayList<PCIARFCN>();
diff --git a/src/main/java/org.onosproject.xran/codecs/pdu/SchedMeasReportPerCell.java b/src/main/java/org.onosproject.xran/codecs/pdu/SchedMeasReportPerCell.java
index 1493c63..80821b8 100644
--- a/src/main/java/org.onosproject.xran/codecs/pdu/SchedMeasReportPerCell.java
+++ b/src/main/java/org.onosproject.xran/codecs/pdu/SchedMeasReportPerCell.java
@@ -2,12 +2,14 @@
  * This class file was automatically generated by jASN1 v1.8.0 (http://www.openmuc.org)
  */
 package org.onosproject.xran.codecs.pdu;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonValue;
 import org.onosproject.xran.codecs.api.ECGI;
 import org.onosproject.xran.codecs.api.PRBUsage;
 import org.onosproject.xran.codecs.api.QCI;
-import org.openmuc.jasn1.ber.BerByteArrayOutputStream;
-import org.openmuc.jasn1.ber.BerLength;
-import org.openmuc.jasn1.ber.BerTag;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -26,6 +28,7 @@
 		private static final long serialVersionUID = 1L;
 
 		public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
+		@JsonIgnore
 		public byte[] code = null;
 		private List<QCI> seqOf = null;
 
@@ -37,6 +40,7 @@
 			this.code = code;
 		}
 
+		@JsonValue
 		public List<QCI> getQCI() {
 			if (seqOf == null) {
 				seqOf = new ArrayList<QCI>();
@@ -152,7 +156,7 @@
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
 
-	public byte[] code = null;
+	@JsonIgnore public byte[] code = null;
 	private ECGI ecgi = null;
 	private QciVals qciVals = null;
 	private PRBUsage prbUsagePcell = null;
@@ -323,7 +327,7 @@
 			sb.append("\t");
 		}
 		if (ecgi != null) {
-			sb.append("\"ecgi\": ");
+			sb.append("ecgi: ");
 			ecgi.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -332,7 +336,7 @@
 			sb.append("\t");
 		}
 		if (qciVals != null) {
-			sb.append("\"qciVals\": ");
+			sb.append("qciVals: ");
 			qciVals.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -341,7 +345,7 @@
 			sb.append("\t");
 		}
 		if (prbUsagePcell != null) {
-			sb.append("\"prbUsagePcell\": ");
+			sb.append("prbUsagePcell: ");
 			prbUsagePcell.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -350,7 +354,7 @@
 			sb.append("\t");
 		}
 		if (prbUsageScell != null) {
-			sb.append("\"prbUsageScell\": ");
+			sb.append("prbUsageScell: ");
 			prbUsageScell.appendAsString(sb, indentLevel + 1);
 		}
 		
diff --git a/src/main/java/org.onosproject.xran/codecs/pdu/SchedMeasReportPerUE.java b/src/main/java/org.onosproject.xran/codecs/pdu/SchedMeasReportPerUE.java
index 3205e88..61616f4 100644
--- a/src/main/java/org.onosproject.xran/codecs/pdu/SchedMeasReportPerUE.java
+++ b/src/main/java/org.onosproject.xran/codecs/pdu/SchedMeasReportPerUE.java
@@ -3,12 +3,14 @@
  */
 package org.onosproject.xran.codecs.pdu;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonValue;
 import org.onosproject.xran.codecs.api.CRNTI;
 import org.onosproject.xran.codecs.api.ECGI;
 import org.onosproject.xran.codecs.api.SchedMeasRepPerServCell;
-import org.openmuc.jasn1.ber.BerByteArrayOutputStream;
-import org.openmuc.jasn1.ber.BerLength;
-import org.openmuc.jasn1.ber.BerTag;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -26,6 +28,7 @@
 		private static final long serialVersionUID = 1L;
 
 		public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
+		@JsonIgnore
 		public byte[] code = null;
 		private List<SchedMeasRepPerServCell> seqOf = null;
 
@@ -37,6 +40,7 @@
 			this.code = code;
 		}
 
+		@JsonValue
 		public List<SchedMeasRepPerServCell> getSchedMeasRepPerServCell() {
 			if (seqOf == null) {
 				seqOf = new ArrayList<SchedMeasRepPerServCell>();
@@ -152,7 +156,7 @@
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
 
-	public byte[] code = null;
+	@JsonIgnore public byte[] code = null;
 	private ECGI ecgi = null;
 	private CRNTI crnti = null;
 	private SchedReportServCells schedReportServCells = null;
@@ -300,7 +304,7 @@
 			sb.append("\t");
 		}
 		if (ecgi != null) {
-			sb.append("\"ecgi\": ");
+			sb.append("ecgi: ");
 			ecgi.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -309,7 +313,7 @@
 			sb.append("\t");
 		}
 		if (crnti != null) {
-			sb.append("\"crnti\": ").append(crnti);
+			sb.append("crnti: ").append(crnti);
 		}
 		
 		sb.append(",\n");
@@ -317,7 +321,7 @@
 			sb.append("\t");
 		}
 		if (schedReportServCells != null) {
-			sb.append("\"schedReportServCells\": ");
+			sb.append("schedReportServCells: ");
 			schedReportServCells.appendAsString(sb, indentLevel + 1);
 		}
 		
diff --git a/src/main/java/org.onosproject.xran/codecs/pdu/SeNBAdd.java b/src/main/java/org.onosproject.xran/codecs/pdu/SeNBAdd.java
index d86cf6d..5f1d1fa 100644
--- a/src/main/java/org.onosproject.xran/codecs/pdu/SeNBAdd.java
+++ b/src/main/java/org.onosproject.xran/codecs/pdu/SeNBAdd.java
@@ -3,11 +3,12 @@
  */
 package org.onosproject.xran.codecs.pdu;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import org.onosproject.xran.codecs.api.CRNTI;
 import org.onosproject.xran.codecs.api.ECGI;
-import org.openmuc.jasn1.ber.BerByteArrayOutputStream;
-import org.openmuc.jasn1.ber.BerLength;
-import org.openmuc.jasn1.ber.BerTag;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.Serializable;
@@ -19,6 +20,7 @@
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
 
+	@JsonIgnore
 	public byte[] code = null;
 	private CRNTI crnti = null;
 	private ECGI mEcgi = null;
@@ -167,7 +169,7 @@
 			sb.append("\t");
 		}
 		if (crnti != null) {
-			sb.append("\"crnti\": ").append(crnti);
+			sb.append("crnti: ").append(crnti);
 		}
 		
 		sb.append(",\n");
@@ -175,7 +177,7 @@
 			sb.append("\t");
 		}
 		if (mEcgi != null) {
-			sb.append("\"mEcgi\": ");
+			sb.append("mEcgi: ");
 			mEcgi.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -184,7 +186,7 @@
 			sb.append("\t");
 		}
 		if (sEcgi != null) {
-			sb.append("\"sEcgi\": ");
+			sb.append("sEcgi: ");
 			sEcgi.appendAsString(sb, indentLevel + 1);
 		}
 		
diff --git a/src/main/java/org.onosproject.xran/codecs/pdu/SeNBAddStatus.java b/src/main/java/org.onosproject.xran/codecs/pdu/SeNBAddStatus.java
index e09c110..1548c9f 100644
--- a/src/main/java/org.onosproject.xran/codecs/pdu/SeNBAddStatus.java
+++ b/src/main/java/org.onosproject.xran/codecs/pdu/SeNBAddStatus.java
@@ -3,12 +3,13 @@
  */
 package org.onosproject.xran.codecs.pdu;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import org.onosproject.xran.codecs.api.CRNTI;
 import org.onosproject.xran.codecs.api.ECGI;
-import org.openmuc.jasn1.ber.BerByteArrayOutputStream;
-import org.openmuc.jasn1.ber.BerLength;
-import org.openmuc.jasn1.ber.BerTag;
-import org.openmuc.jasn1.ber.types.BerEnum;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
+import org.onosproject.xran.codecs.ber.types.BerEnum;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -21,6 +22,7 @@
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
 
+	@JsonIgnore
 	public byte[] code = null;
 	private CRNTI crnti = null;
 	private ECGI ecgi = null;
@@ -169,7 +171,7 @@
 			sb.append("\t");
 		}
 		if (crnti != null) {
-			sb.append("\"crnti\": ").append(crnti);
+			sb.append("crnti: ").append(crnti);
 		}
 		
 		sb.append(",\n");
@@ -177,7 +179,7 @@
 			sb.append("\t");
 		}
 		if (ecgi != null) {
-			sb.append("\"ecgi\": ");
+			sb.append("ecgi: ");
 			ecgi.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -186,7 +188,7 @@
 			sb.append("\t");
 		}
 		if (status != null) {
-			sb.append("\"status\": ").append(status);
+			sb.append("status: ").append(status);
 		}
 		
 		sb.append("\n");
diff --git a/src/main/java/org.onosproject.xran/codecs/pdu/SeNBDelete.java b/src/main/java/org.onosproject.xran/codecs/pdu/SeNBDelete.java
index 8441c3f..14b9dc5 100644
--- a/src/main/java/org.onosproject.xran/codecs/pdu/SeNBDelete.java
+++ b/src/main/java/org.onosproject.xran/codecs/pdu/SeNBDelete.java
@@ -3,11 +3,12 @@
  */
 package org.onosproject.xran.codecs.pdu;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import org.onosproject.xran.codecs.api.CRNTI;
 import org.onosproject.xran.codecs.api.ECGI;
-import org.openmuc.jasn1.ber.BerByteArrayOutputStream;
-import org.openmuc.jasn1.ber.BerLength;
-import org.openmuc.jasn1.ber.BerTag;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -20,6 +21,7 @@
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
 
+	@JsonIgnore
 	public byte[] code = null;
 	private CRNTI crnti = null;
 	private ECGI mEcgi = null;
@@ -168,7 +170,7 @@
 			sb.append("\t");
 		}
 		if (crnti != null) {
-			sb.append("\"crnti\": ").append(crnti);
+			sb.append("crnti: ").append(crnti);
 		}
 		
 		sb.append(",\n");
@@ -176,7 +178,7 @@
 			sb.append("\t");
 		}
 		if (mEcgi != null) {
-			sb.append("\"mEcgi\": ");
+			sb.append("mEcgi: ");
 			mEcgi.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -185,7 +187,7 @@
 			sb.append("\t");
 		}
 		if (sEcgi != null) {
-			sb.append("\"sEcgi\": ");
+			sb.append("sEcgi: ");
 			sEcgi.appendAsString(sb, indentLevel + 1);
 		}
 		
diff --git a/src/main/java/org.onosproject.xran/codecs/pdu/TrafficSplitConfig.java b/src/main/java/org.onosproject.xran/codecs/pdu/TrafficSplitConfig.java
index 408b722..cd68d7f 100644
--- a/src/main/java/org.onosproject.xran/codecs/pdu/TrafficSplitConfig.java
+++ b/src/main/java/org.onosproject.xran/codecs/pdu/TrafficSplitConfig.java
@@ -3,12 +3,14 @@
  */
 package org.onosproject.xran.codecs.pdu;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonValue;
 import org.onosproject.xran.codecs.api.CRNTI;
 import org.onosproject.xran.codecs.api.ECGI;
 import org.onosproject.xran.codecs.api.TrafficSplitPercentage;
-import org.openmuc.jasn1.ber.BerByteArrayOutputStream;
-import org.openmuc.jasn1.ber.BerLength;
-import org.openmuc.jasn1.ber.BerTag;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -26,6 +28,7 @@
 		private static final long serialVersionUID = 1L;
 
 		public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
+		@JsonIgnore
 		public byte[] code = null;
 		private List<TrafficSplitPercentage> seqOf = null;
 
@@ -37,6 +40,7 @@
 			this.code = code;
 		}
 
+		@JsonValue
 		public List<TrafficSplitPercentage> getTrafficSplitPercentage() {
 			if (seqOf == null) {
 				seqOf = new ArrayList<TrafficSplitPercentage>();
@@ -149,7 +153,7 @@
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
 
-	public byte[] code = null;
+	@JsonIgnore public byte[] code = null;
 	private CRNTI crnti = null;
 	private ECGI ecgi = null;
 	private TrafficSplitPercent trafficSplitPercent = null;
@@ -297,7 +301,7 @@
 			sb.append("\t");
 		}
 		if (crnti != null) {
-			sb.append("\"crnti\": ").append(crnti);
+			sb.append("crnti: ").append(crnti);
 		}
 		
 		sb.append(",\n");
@@ -305,7 +309,7 @@
 			sb.append("\t");
 		}
 		if (ecgi != null) {
-			sb.append("\"ecgi\": ");
+			sb.append("ecgi: ");
 			ecgi.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -314,7 +318,7 @@
 			sb.append("\t");
 		}
 		if (trafficSplitPercent != null) {
-			sb.append("\"trafficSplitPercent\": ");
+			sb.append("trafficSplitPercent: ");
 			trafficSplitPercent.appendAsString(sb, indentLevel + 1);
 		}
 		
diff --git a/src/main/java/org.onosproject.xran/codecs/pdu/UEAdmissionRequest.java b/src/main/java/org.onosproject.xran/codecs/pdu/UEAdmissionRequest.java
index 3eb4b9e..fd5148e 100644
--- a/src/main/java/org.onosproject.xran/codecs/pdu/UEAdmissionRequest.java
+++ b/src/main/java/org.onosproject.xran/codecs/pdu/UEAdmissionRequest.java
@@ -4,9 +4,10 @@
 
 package org.onosproject.xran.codecs.pdu;
 
-import org.openmuc.jasn1.ber.BerByteArrayOutputStream;
-import org.openmuc.jasn1.ber.BerLength;
-import org.openmuc.jasn1.ber.BerTag;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
 import org.onosproject.xran.codecs.api.AdmEstCause;
 import org.onosproject.xran.codecs.api.CRNTI;
 import org.onosproject.xran.codecs.api.ECGI;
@@ -21,6 +22,7 @@
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
 
+	@JsonIgnore
 	public byte[] code = null;
 	private CRNTI crnti = null;
 	private ECGI ecgi = null;
@@ -169,7 +171,7 @@
 			sb.append("\t");
 		}
 		if (crnti != null) {
-			sb.append("\"crnti\": ").append(crnti);
+			sb.append("crnti: ").append(crnti);
 		}
 		
 		sb.append(",\n");
@@ -177,7 +179,7 @@
 			sb.append("\t");
 		}
 		if (ecgi != null) {
-			sb.append("\"ecgi\": ");
+			sb.append("ecgi: ");
 			ecgi.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -186,7 +188,7 @@
 			sb.append("\t");
 		}
 		if (admEstCause != null) {
-			sb.append("\"admEstCause\": ").append(admEstCause);
+			sb.append("admEstCause: ").append(admEstCause);
 		}
 		
 		sb.append("\n");
diff --git a/src/main/java/org.onosproject.xran/codecs/pdu/UEAdmissionResponse.java b/src/main/java/org.onosproject.xran/codecs/pdu/UEAdmissionResponse.java
index 5d323b7..8600ba3 100644
--- a/src/main/java/org.onosproject.xran/codecs/pdu/UEAdmissionResponse.java
+++ b/src/main/java/org.onosproject.xran/codecs/pdu/UEAdmissionResponse.java
@@ -4,13 +4,14 @@
 
 package org.onosproject.xran.codecs.pdu;
 
-import org.openmuc.jasn1.ber.BerByteArrayOutputStream;
-import org.openmuc.jasn1.ber.BerLength;
-import org.openmuc.jasn1.ber.BerTag;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
 import org.onosproject.xran.codecs.api.AdmEstResponse;
 import org.onosproject.xran.codecs.api.CRNTI;
 import org.onosproject.xran.codecs.api.ECGI;
-import org.openmuc.jasn1.ber.types.string.BerUTF8String;
+import org.onosproject.xran.codecs.ber.types.string.BerUTF8String;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -23,6 +24,7 @@
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
 
+	@JsonIgnore
 	public byte[] code = null;
 	private CRNTI crnti = null;
 	private ECGI ecgi = null;
@@ -171,7 +173,7 @@
 			sb.append("\t");
 		}
 		if (crnti != null) {
-			sb.append("\"crnti\": ").append(crnti);
+			sb.append("crnti: ").append(crnti);
 		}
 		
 		sb.append(",\n");
@@ -179,7 +181,7 @@
 			sb.append("\t");
 		}
 		if (ecgi != null) {
-			sb.append("\"ecgi\": ");
+			sb.append("ecgi: ");
 			ecgi.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -188,7 +190,7 @@
 			sb.append("\t");
 		}
 		if (admEstResponse != null) {
-			sb.append("\"admEstResponse\": ").append(admEstResponse);
+			sb.append("admEstResponse: ").append(admEstResponse);
 		}
 		
 		sb.append("\n");
diff --git a/src/main/java/org.onosproject.xran/codecs/pdu/UEAdmissionStatus.java b/src/main/java/org.onosproject.xran/codecs/pdu/UEAdmissionStatus.java
index edfd056..5a06a8a 100644
--- a/src/main/java/org.onosproject.xran/codecs/pdu/UEAdmissionStatus.java
+++ b/src/main/java/org.onosproject.xran/codecs/pdu/UEAdmissionStatus.java
@@ -4,9 +4,10 @@
 
 package org.onosproject.xran.codecs.pdu;
 
-import org.openmuc.jasn1.ber.BerByteArrayOutputStream;
-import org.openmuc.jasn1.ber.BerLength;
-import org.openmuc.jasn1.ber.BerTag;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
 import org.onosproject.xran.codecs.api.AdmEstStatus;
 import org.onosproject.xran.codecs.api.CRNTI;
 import org.onosproject.xran.codecs.api.ECGI;
@@ -21,6 +22,7 @@
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
 
+	@JsonIgnore
 	public byte[] code = null;
 	private CRNTI crnti = null;
 	private ECGI ecgi = null;
@@ -169,7 +171,7 @@
 			sb.append("\t");
 		}
 		if (crnti != null) {
-			sb.append("\"crnti\": ").append(crnti);
+			sb.append("crnti: ").append(crnti);
 		}
 		
 		sb.append(",\n");
@@ -177,7 +179,7 @@
 			sb.append("\t");
 		}
 		if (ecgi != null) {
-			sb.append("\"ecgi\": ");
+			sb.append("ecgi: ");
 			ecgi.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -186,7 +188,7 @@
 			sb.append("\t");
 		}
 		if (admEstStatus != null) {
-			sb.append("\"admEstStatus\": ").append(admEstStatus);
+			sb.append("admEstStatus: ").append(admEstStatus);
 		}
 		
 		sb.append("\n");
diff --git a/src/main/java/org.onosproject.xran/codecs/pdu/UECapabilityEnquiry.java b/src/main/java/org.onosproject.xran/codecs/pdu/UECapabilityEnquiry.java
index db212e5..01fa001 100644
--- a/src/main/java/org.onosproject.xran/codecs/pdu/UECapabilityEnquiry.java
+++ b/src/main/java/org.onosproject.xran/codecs/pdu/UECapabilityEnquiry.java
@@ -4,12 +4,13 @@
 
 package org.onosproject.xran.codecs.pdu;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import org.onosproject.xran.codecs.api.CRNTI;
 import org.onosproject.xran.codecs.api.ECGI;
-import org.openmuc.jasn1.ber.BerByteArrayOutputStream;
-import org.openmuc.jasn1.ber.BerLength;
-import org.openmuc.jasn1.ber.BerTag;
-import org.openmuc.jasn1.ber.types.string.BerUTF8String;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
+import org.onosproject.xran.codecs.ber.types.string.BerUTF8String;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -23,6 +24,7 @@
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
 
+	@JsonIgnore
 	public byte[] code = null;
 	private CRNTI crnti = null;
 	private ECGI ecgi = null;
@@ -148,7 +150,7 @@
 			sb.append("\t");
 		}
 		if (crnti != null) {
-			sb.append("\"crnti\": ").append(crnti);
+			sb.append("crnti: ").append(crnti);
 		}
 		
 		sb.append(",\n");
@@ -156,7 +158,7 @@
 			sb.append("\t");
 		}
 		if (ecgi != null) {
-			sb.append("\"ecgi\": ");
+			sb.append("ecgi: ");
 			ecgi.appendAsString(sb, indentLevel + 1);
 		}
 		
diff --git a/src/main/java/org.onosproject.xran/codecs/pdu/UECapabilityInfo.java b/src/main/java/org.onosproject.xran/codecs/pdu/UECapabilityInfo.java
index a2c017e..732b717 100644
--- a/src/main/java/org.onosproject.xran/codecs/pdu/UECapabilityInfo.java
+++ b/src/main/java/org.onosproject.xran/codecs/pdu/UECapabilityInfo.java
@@ -3,13 +3,14 @@
  */
 package org.onosproject.xran.codecs.pdu;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import org.onosproject.xran.codecs.api.CACap;
 import org.onosproject.xran.codecs.api.CRNTI;
 import org.onosproject.xran.codecs.api.DCCap;
 import org.onosproject.xran.codecs.api.ECGI;
-import org.openmuc.jasn1.ber.BerByteArrayOutputStream;
-import org.openmuc.jasn1.ber.BerLength;
-import org.openmuc.jasn1.ber.BerTag;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -22,6 +23,7 @@
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
 
+	@JsonIgnore
 	public byte[] code = null;
 	private CRNTI crnti = null;
 	private ECGI ecgi = null;
@@ -200,7 +202,7 @@
 			sb.append("\t");
 		}
 		if (crnti != null) {
-			sb.append("\"crnti\": ").append(crnti);
+			sb.append("crnti: ").append(crnti);
 		}
 		
 		sb.append(",\n");
@@ -208,7 +210,7 @@
 			sb.append("\t");
 		}
 		if (ecgi != null) {
-			sb.append("\"ecgi\": ");
+			sb.append("ecgi: ");
 			ecgi.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -217,7 +219,7 @@
 			for (int i = 0; i < indentLevel + 1; i++) {
 				sb.append("\t");
 			}
-			sb.append("\"caCap\": ");
+			sb.append("caCap: ");
 			caCap.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -226,7 +228,7 @@
 			for (int i = 0; i < indentLevel + 1; i++) {
 				sb.append("\t");
 			}
-			sb.append("\"dcCap\": ");
+			sb.append("dcCap: ");
 			dcCap.appendAsString(sb, indentLevel + 1);
 		}
 		
diff --git a/src/main/java/org.onosproject.xran/codecs/pdu/UEContextUpdate.java b/src/main/java/org.onosproject.xran/codecs/pdu/UEContextUpdate.java
index d9d6066..287316a 100644
--- a/src/main/java/org.onosproject.xran/codecs/pdu/UEContextUpdate.java
+++ b/src/main/java/org.onosproject.xran/codecs/pdu/UEContextUpdate.java
@@ -4,13 +4,14 @@
 
 package org.onosproject.xran.codecs.pdu;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import org.onosproject.xran.codecs.api.CRNTI;
 import org.onosproject.xran.codecs.api.ECGI;
 import org.onosproject.xran.codecs.api.ENBUES1APID;
 import org.onosproject.xran.codecs.api.MMEUES1APID;
-import org.openmuc.jasn1.ber.BerByteArrayOutputStream;
-import org.openmuc.jasn1.ber.BerLength;
-import org.openmuc.jasn1.ber.BerTag;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -22,6 +23,7 @@
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
 
+	@JsonIgnore
 	public byte[] code = null;
 	private CRNTI crnti = null;
 	private ECGI ecgi = null;
@@ -193,7 +195,7 @@
 			sb.append("\t");
 		}
 		if (crnti != null) {
-			sb.append("\"crnti\": ").append(crnti);
+			sb.append("crnti: ").append(crnti);
 		}
 		
 		sb.append(",\n");
@@ -201,7 +203,7 @@
 			sb.append("\t");
 		}
 		if (ecgi != null) {
-			sb.append("\"ecgi\": ");
+			sb.append("ecgi: ");
 			ecgi.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -210,7 +212,7 @@
 			sb.append("\t");
 		}
 		if (mMEUES1APID != null) {
-			sb.append("\"mMEUES1APID\": ").append(mMEUES1APID);
+			sb.append("mMEUES1APID: ").append(mMEUES1APID);
 		}
 		
 		sb.append(",\n");
@@ -218,7 +220,7 @@
 			sb.append("\t");
 		}
 		if (eNBUES1APID != null) {
-			sb.append("\"eNBUES1APID\": ").append(eNBUES1APID);
+			sb.append("eNBUES1APID: ").append(eNBUES1APID);
 		}
 		
 		sb.append("\n");
diff --git a/src/main/java/org.onosproject.xran/codecs/pdu/UEReconfigInd.java b/src/main/java/org.onosproject.xran/codecs/pdu/UEReconfigInd.java
index 4a5fd3d..6aa03ed 100644
--- a/src/main/java/org.onosproject.xran/codecs/pdu/UEReconfigInd.java
+++ b/src/main/java/org.onosproject.xran/codecs/pdu/UEReconfigInd.java
@@ -4,9 +4,10 @@
 
 package org.onosproject.xran.codecs.pdu;
 
-import org.openmuc.jasn1.ber.BerByteArrayOutputStream;
-import org.openmuc.jasn1.ber.BerLength;
-import org.openmuc.jasn1.ber.BerTag;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
 import org.onosproject.xran.codecs.api.CRNTI;
 import org.onosproject.xran.codecs.api.ECGI;
 import org.onosproject.xran.codecs.api.ReconfIndReason;
@@ -21,6 +22,7 @@
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
 
+	@JsonIgnore
 	public byte[] code = null;
 	private CRNTI crntiOld = null;
 	private ECGI ecgi = null;
@@ -192,7 +194,7 @@
 			sb.append("\t");
 		}
 		if (crntiOld != null) {
-			sb.append("\"crntiOld\": ").append(crntiOld);
+			sb.append("crntiOld: ").append(crntiOld);
 		}
 		
 		sb.append(",\n");
@@ -200,7 +202,7 @@
 			sb.append("\t");
 		}
 		if (ecgi != null) {
-			sb.append("\"ecgi\": ");
+			sb.append("ecgi: ");
 			ecgi.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -209,7 +211,7 @@
 			sb.append("\t");
 		}
 		if (crntiNew != null) {
-			sb.append("\"crntiNew\": ").append(crntiNew);
+			sb.append("crntiNew: ").append(crntiNew);
 		}
 		
 		sb.append(",\n");
@@ -217,7 +219,7 @@
 			sb.append("\t");
 		}
 		if (reconfigCause != null) {
-			sb.append("\"reconfigCause\": ").append(reconfigCause);
+			sb.append("reconfigCause: ").append(reconfigCause);
 		}
 		
 		sb.append("\n");
diff --git a/src/main/java/org.onosproject.xran/codecs/pdu/UEReleaseInd.java b/src/main/java/org.onosproject.xran/codecs/pdu/UEReleaseInd.java
index 9b601ad..fef213f 100644
--- a/src/main/java/org.onosproject.xran/codecs/pdu/UEReleaseInd.java
+++ b/src/main/java/org.onosproject.xran/codecs/pdu/UEReleaseInd.java
@@ -3,9 +3,10 @@
  */
 package org.onosproject.xran.codecs.pdu;
 
-import org.openmuc.jasn1.ber.BerByteArrayOutputStream;
-import org.openmuc.jasn1.ber.BerLength;
-import org.openmuc.jasn1.ber.BerTag;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
 import org.onosproject.xran.codecs.api.CRNTI;
 import org.onosproject.xran.codecs.api.ECGI;
 import org.onosproject.xran.codecs.api.RelCause;
@@ -20,6 +21,7 @@
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
 
+	@JsonIgnore
 	public byte[] code = null;
 	private CRNTI crnti = null;
 	private ECGI ecgi = null;
@@ -168,7 +170,7 @@
 			sb.append("\t");
 		}
 		if (crnti != null) {
-			sb.append("\"crnti\": ").append(crnti);
+			sb.append("crnti: ").append(crnti);
 		}
 		
 		sb.append(",\n");
@@ -176,7 +178,7 @@
 			sb.append("\t");
 		}
 		if (ecgi != null) {
-			sb.append("\"ecgi\": ");
+			sb.append("ecgi: ");
 			ecgi.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -185,7 +187,7 @@
 			sb.append("\t");
 		}
 		if (releaseCause != null) {
-			sb.append("\"releaseCause\": ").append(releaseCause);
+			sb.append("releaseCause: ").append(releaseCause);
 		}
 		
 		sb.append("\n");
diff --git a/src/main/java/org.onosproject.xran/codecs/pdu/XICICConfig.java b/src/main/java/org.onosproject.xran/codecs/pdu/XICICConfig.java
index 2d1bc70..7d841c9 100644
--- a/src/main/java/org.onosproject.xran/codecs/pdu/XICICConfig.java
+++ b/src/main/java/org.onosproject.xran/codecs/pdu/XICICConfig.java
@@ -3,16 +3,17 @@
  */
 package org.onosproject.xran.codecs.pdu;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import org.onosproject.xran.codecs.api.CRNTI;
 import org.onosproject.xran.codecs.api.ECGI;
 import org.onosproject.xran.codecs.api.PCIARFCN;
 import org.onosproject.xran.codecs.api.XICICPA;
-import org.openmuc.jasn1.ber.BerByteArrayOutputStream;
-import org.openmuc.jasn1.ber.BerLength;
-import org.openmuc.jasn1.ber.BerTag;
-import org.openmuc.jasn1.ber.types.BerBitString;
-import org.openmuc.jasn1.ber.types.BerInteger;
-import org.openmuc.jasn1.ber.types.string.BerUTF8String;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
+import org.onosproject.xran.codecs.ber.types.BerBitString;
+import org.onosproject.xran.codecs.ber.types.BerInteger;
+import org.onosproject.xran.codecs.ber.types.string.BerUTF8String;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -25,6 +26,7 @@
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
 
+	@JsonIgnore
 	public byte[] code = null;
 	private ECGI ecgi = null;
 	private PCIARFCN pciArfcn = null;
@@ -374,7 +376,7 @@
 			sb.append("\t");
 		}
 		if (ecgi != null) {
-			sb.append("\"ecgi: \"");
+			sb.append("ecgi: ");
 			ecgi.appendAsString(sb, indentLevel + 1);
 		}
 
@@ -383,7 +385,7 @@
 			for (int i = 0; i < indentLevel + 1; i++) {
 				sb.append("\t");
 			}
-			sb.append("\"pciArfcn: \"");
+			sb.append("pciArfcn: ");
 			pciArfcn.appendAsString(sb, indentLevel + 1);
 		}
 
@@ -392,7 +394,7 @@
 			sb.append("\t");
 		}
 		if (crnti != null) {
-			sb.append("\"crnti: \"").append(crnti);
+			sb.append("crnti: ").append(crnti);
 		}
 
 		if (pa != null) {
@@ -400,7 +402,7 @@
 			for (int i = 0; i < indentLevel + 1; i++) {
 				sb.append("\t");
 			}
-			sb.append("\"pa: \"").append(pa);
+			sb.append("pa: ").append(pa);
 		}
 
 		if (startPrbDl != null) {
@@ -408,7 +410,7 @@
 			for (int i = 0; i < indentLevel + 1; i++) {
 				sb.append("\t");
 			}
-			sb.append("\"startPrbDl: \"").append(startPrbDl);
+			sb.append("startPrbDl: ").append(startPrbDl);
 		}
 
 		if (endPrbDl != null) {
@@ -416,7 +418,7 @@
 			for (int i = 0; i < indentLevel + 1; i++) {
 				sb.append("\t");
 			}
-			sb.append("\"endPrbDl: \"").append(endPrbDl);
+			sb.append("endPrbDl: ").append(endPrbDl);
 		}
 
 		if (subframeBitmaskDl != null) {
@@ -424,7 +426,7 @@
 			for (int i = 0; i < indentLevel + 1; i++) {
 				sb.append("\t");
 			}
-			sb.append("\"subframeBitmaskDl: \"").append(subframeBitmaskDl);
+			sb.append("subframeBitmaskDl: ").append(subframeBitmaskDl);
 		}
 
 		if (p0UePusch != null) {
@@ -432,7 +434,7 @@
 			for (int i = 0; i < indentLevel + 1; i++) {
 				sb.append("\t");
 			}
-			sb.append("\"p0UePusch: \"").append(p0UePusch);
+			sb.append("p0UePusch: ").append(p0UePusch);
 		}
 
 		if (startPrbUl != null) {
@@ -440,7 +442,7 @@
 			for (int i = 0; i < indentLevel + 1; i++) {
 				sb.append("\t");
 			}
-			sb.append("\"startPrbUl: \"").append(startPrbUl);
+			sb.append("startPrbUl: ").append(startPrbUl);
 		}
 
 		if (endPrbUl != null) {
@@ -448,7 +450,7 @@
 			for (int i = 0; i < indentLevel + 1; i++) {
 				sb.append("\t");
 			}
-			sb.append("\"endPrbUl: \"").append(endPrbUl);
+			sb.append("endPrbUl: ").append(endPrbUl);
 		}
 
 		if (subframeBitmaskUl != null) {
@@ -456,7 +458,7 @@
 			for (int i = 0; i < indentLevel + 1; i++) {
 				sb.append("\t");
 			}
-			sb.append("\"subframeBitmaskUl: \"").append(subframeBitmaskUl);
+			sb.append("subframeBitmaskUl: ").append(subframeBitmaskUl);
 		}
 
 		sb.append("\n");
diff --git a/src/main/java/org.onosproject.xran/codecs/pdu/XrancApiID.java b/src/main/java/org.onosproject.xran/codecs/pdu/XrancApiID.java
index 341b70f..fa902f8 100644
--- a/src/main/java/org.onosproject.xran/codecs/pdu/XrancApiID.java
+++ b/src/main/java/org.onosproject.xran/codecs/pdu/XrancApiID.java
@@ -4,7 +4,7 @@
 
 package org.onosproject.xran.codecs.pdu;
 
-import org.openmuc.jasn1.ber.types.BerEnum;
+import org.onosproject.xran.codecs.ber.types.BerEnum;
 
 import java.math.BigInteger;
 
diff --git a/src/main/java/org.onosproject.xran/codecs/pdu/XrancPdu.java b/src/main/java/org.onosproject.xran/codecs/pdu/XrancPdu.java
index d365a39..d983713 100644
--- a/src/main/java/org.onosproject.xran/codecs/pdu/XrancPdu.java
+++ b/src/main/java/org.onosproject.xran/codecs/pdu/XrancPdu.java
@@ -4,9 +4,10 @@
 
 package org.onosproject.xran.codecs.pdu;
 
-import org.openmuc.jasn1.ber.BerByteArrayOutputStream;
-import org.openmuc.jasn1.ber.BerLength;
-import org.openmuc.jasn1.ber.BerTag;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -18,6 +19,7 @@
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
 
+	@JsonIgnore
 	public byte[] code = null;
 	private XrancPduHdr hdr = null;
 	private XrancPduBody body = null;
@@ -148,7 +150,7 @@
 			sb.append("\t");
 		}
 		if (hdr != null) {
-			sb.append("\"hdr\": ");
+			sb.append("hdr: ");
 			hdr.appendAsString(sb, indentLevel + 1);
 		}
 		
@@ -157,7 +159,7 @@
 			sb.append("\t");
 		}
 		if (body != null) {
-			sb.append("\"body\": ");
+			sb.append("body: ");
 			body.appendAsString(sb, indentLevel + 1);
 		}
 		
diff --git a/src/main/java/org.onosproject.xran/codecs/pdu/XrancPduBody.java b/src/main/java/org.onosproject.xran/codecs/pdu/XrancPduBody.java
index 2770211..29bef78 100644
--- a/src/main/java/org.onosproject.xran/codecs/pdu/XrancPduBody.java
+++ b/src/main/java/org.onosproject.xran/codecs/pdu/XrancPduBody.java
@@ -4,8 +4,9 @@
 
 package org.onosproject.xran.codecs.pdu;
 
-import org.openmuc.jasn1.ber.BerByteArrayOutputStream;
-import org.openmuc.jasn1.ber.BerTag;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerTag;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -15,6 +16,7 @@
 
 	private static final long serialVersionUID = 1L;
 
+	@JsonIgnore
 	public byte[] code = null;
 	private CellConfigRequest cellConfigRequest = null;
 	private CellConfigReport cellConfigReport = null;
@@ -882,211 +884,211 @@
 	public void appendAsString(StringBuilder sb, int indentLevel) {
 
 		if (cellConfigRequest != null) {
-			sb.append("\"cellConfigRequest\": ");
+			sb.append("cellConfigRequest: ");
 			cellConfigRequest.appendAsString(sb, indentLevel + 1);
 			return;
 		}
 
 		if (cellConfigReport != null) {
-			sb.append("\"cellConfigReport\": ");
+			sb.append("cellConfigReport: ");
 			cellConfigReport.appendAsString(sb, indentLevel + 1);
 			return;
 		}
 
 		if (uEAdmissionRequest != null) {
-			sb.append("\"uEAdmissionRequest\": ");
+			sb.append("uEAdmissionRequest: ");
 			uEAdmissionRequest.appendAsString(sb, indentLevel + 1);
 			return;
 		}
 
 		if (uEAdmissionResponse != null) {
-			sb.append("\"uEAdmissionResponse\": ");
+			sb.append("uEAdmissionResponse: ");
 			uEAdmissionResponse.appendAsString(sb, indentLevel + 1);
 			return;
 		}
 
 		if (uEContextUpdate != null) {
-			sb.append("\"uEContextUpdate\": ");
+			sb.append("uEContextUpdate: ");
 			uEContextUpdate.appendAsString(sb, indentLevel + 1);
 			return;
 		}
 
 		if (uEAdmissionStatus != null) {
-			sb.append("\"uEAdmissionStatus\": ");
+			sb.append("uEAdmissionStatus: ");
 			uEAdmissionStatus.appendAsString(sb, indentLevel + 1);
 			return;
 		}
 
 		if (uEReconfigInd != null) {
-			sb.append("\"uEReconfigInd\": ");
+			sb.append("uEReconfigInd: ");
 			uEReconfigInd.appendAsString(sb, indentLevel + 1);
 			return;
 		}
 
 		if (uEReleaseInd != null) {
-			sb.append("\"uEReleaseInd\": ");
+			sb.append("uEReleaseInd: ");
 			uEReleaseInd.appendAsString(sb, indentLevel + 1);
 			return;
 		}
 
 		if (bearerAdmissionRequest != null) {
-			sb.append("\"bearerAdmissionRequest\": ");
+			sb.append("bearerAdmissionRequest: ");
 			bearerAdmissionRequest.appendAsString(sb, indentLevel + 1);
 			return;
 		}
 
 		if (bearerAdmissionResponse != null) {
-			sb.append("\"bearerAdmissionResponse\": ");
+			sb.append("bearerAdmissionResponse: ");
 			bearerAdmissionResponse.appendAsString(sb, indentLevel + 1);
 			return;
 		}
 
 		if (bearerAdmissionStatus != null) {
-			sb.append("\"bearerAdmissionStatus\": ");
+			sb.append("bearerAdmissionStatus: ");
 			bearerAdmissionStatus.appendAsString(sb, indentLevel + 1);
 			return;
 		}
 
 		if (bearerReleaseInd != null) {
-			sb.append("\"bearerReleaseInd\": ");
+			sb.append("bearerReleaseInd: ");
 			bearerReleaseInd.appendAsString(sb, indentLevel + 1);
 			return;
 		}
 
 		if (uECapabilityEnquiry != null) {
-			sb.append("\"uECapabilityEnquiry\": ");
+			sb.append("uECapabilityEnquiry: ");
 			uECapabilityEnquiry.appendAsString(sb, indentLevel + 1);
 			return;
 		}
 
 		if (uECapabilityInfo != null) {
-			sb.append("\"uECapabilityInfo\": ");
+			sb.append("uECapabilityInfo: ");
 			uECapabilityInfo.appendAsString(sb, indentLevel + 1);
 			return;
 		}
 
 		if (hORequest != null) {
-			sb.append("\"hORequest\": ");
+			sb.append("hORequest: ");
 			hORequest.appendAsString(sb, indentLevel + 1);
 			return;
 		}
 
 		if (hOFailure != null) {
-			sb.append("\"hOFailure\": ");
+			sb.append("hOFailure: ");
 			hOFailure.appendAsString(sb, indentLevel + 1);
 			return;
 		}
 
 		if (hOComplete != null) {
-			sb.append("\"hOComplete\": ");
+			sb.append("hOComplete: ");
 			hOComplete.appendAsString(sb, indentLevel + 1);
 			return;
 		}
 
 		if (rXSigMeasConfig != null) {
-			sb.append("\"rXSigMeasConfig\": ");
+			sb.append("rXSigMeasConfig: ");
 			rXSigMeasConfig.appendAsString(sb, indentLevel + 1);
 			return;
 		}
 
 		if (rXSigMeasReport != null) {
-			sb.append("\"rXSigMeasReport\": ");
+			sb.append("rXSigMeasReport: ");
 			rXSigMeasReport.appendAsString(sb, indentLevel + 1);
 			return;
 		}
 
 		if (l2MeasConfig != null) {
-			sb.append("\"l2MeasConfig\": ");
+			sb.append("l2MeasConfig: ");
 			l2MeasConfig.appendAsString(sb, indentLevel + 1);
 			return;
 		}
 
 		if (radioMeasReportPerUE != null) {
-			sb.append("\"radioMeasReportPerUE\": ");
+			sb.append("radioMeasReportPerUE: ");
 			radioMeasReportPerUE.appendAsString(sb, indentLevel + 1);
 			return;
 		}
 
 		if (radioMeasReportPerCell != null) {
-			sb.append("\"radioMeasReportPerCell\": ");
+			sb.append("radioMeasReportPerCell: ");
 			radioMeasReportPerCell.appendAsString(sb, indentLevel + 1);
 			return;
 		}
 
 		if (schedMeasReportPerUE != null) {
-			sb.append("\"schedMeasReportPerUE\": ");
+			sb.append("schedMeasReportPerUE: ");
 			schedMeasReportPerUE.appendAsString(sb, indentLevel + 1);
 			return;
 		}
 
 		if (schedMeasReportPerCell != null) {
-			sb.append("\"schedMeasReportPerCell\": ");
+			sb.append("schedMeasReportPerCell: ");
 			schedMeasReportPerCell.appendAsString(sb, indentLevel + 1);
 			return;
 		}
 
 		if (pDCPMeasReportPerUe != null) {
-			sb.append("\"pDCPMeasReportPerUe\": ");
+			sb.append("pDCPMeasReportPerUe: ");
 			pDCPMeasReportPerUe.appendAsString(sb, indentLevel + 1);
 			return;
 		}
 
 		if (xICICConfig != null) {
-			sb.append("\"xICICConfig\": ");
+			sb.append("xICICConfig: ");
 			xICICConfig.appendAsString(sb, indentLevel + 1);
 			return;
 		}
 
 		if (rRMConfig != null) {
-			sb.append("\"rRMConfig\": ");
+			sb.append("rRMConfig: ");
 			rRMConfig.appendAsString(sb, indentLevel + 1);
 			return;
 		}
 
 		if (rRMConfigStatus != null) {
-			sb.append("\"rRMConfigStatus\": ");
+			sb.append("rRMConfigStatus: ");
 			rRMConfigStatus.appendAsString(sb, indentLevel + 1);
 			return;
 		}
 
 		if (scellAdd != null) {
-			sb.append("\"scellAdd\": ");
+			sb.append("scellAdd: ");
 			scellAdd.appendAsString(sb, indentLevel + 1);
 			return;
 		}
 
 		if (scellAddStatus != null) {
-			sb.append("\"scellAddStatus\": ");
+			sb.append("scellAddStatus: ");
 			scellAddStatus.appendAsString(sb, indentLevel + 1);
 			return;
 		}
 
 		if (scellDelete != null) {
-			sb.append("\"scellDelete\": ");
+			sb.append("scellDelete: ");
 			scellDelete.appendAsString(sb, indentLevel + 1);
 			return;
 		}
 
 		if (seNBAdd != null) {
-			sb.append("\"seNBAdd\": ");
+			sb.append("seNBAdd: ");
 			seNBAdd.appendAsString(sb, indentLevel + 1);
 			return;
 		}
 
 		if (seNBAddStatus != null) {
-			sb.append("\"seNBAddStatus\": ");
+			sb.append("seNBAddStatus: ");
 			seNBAddStatus.appendAsString(sb, indentLevel + 1);
 			return;
 		}
 
 		if (seNBDelete != null) {
-			sb.append("\"seNBDelete\": ");
+			sb.append("seNBDelete: ");
 			seNBDelete.appendAsString(sb, indentLevel + 1);
 			return;
 		}
 
 		if (trafficSplitConfig != null) {
-			sb.append("\"trafficSplitConfig\": ");
+			sb.append("trafficSplitConfig: ");
 			trafficSplitConfig.appendAsString(sb, indentLevel + 1);
 			return;
 		}
diff --git a/src/main/java/org.onosproject.xran/codecs/pdu/XrancPduHdr.java b/src/main/java/org.onosproject.xran/codecs/pdu/XrancPduHdr.java
index 63480d4..124e692 100644
--- a/src/main/java/org.onosproject.xran/codecs/pdu/XrancPduHdr.java
+++ b/src/main/java/org.onosproject.xran/codecs/pdu/XrancPduHdr.java
@@ -4,10 +4,11 @@
 
 package org.onosproject.xran.codecs.pdu;
 
-import org.openmuc.jasn1.ber.BerByteArrayOutputStream;
-import org.openmuc.jasn1.ber.BerLength;
-import org.openmuc.jasn1.ber.BerTag;
-import org.openmuc.jasn1.ber.types.string.BerUTF8String;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerLength;
+import org.onosproject.xran.codecs.ber.BerTag;
+import org.onosproject.xran.codecs.ber.types.string.BerUTF8String;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -19,6 +20,7 @@
 
 	public static final BerTag tag = new BerTag(BerTag.UNIVERSAL_CLASS, BerTag.CONSTRUCTED, 16);
 
+	@JsonIgnore
 	public byte[] code = null;
 	private BerUTF8String ver = null;
 	private XrancApiID apiId = null;
@@ -144,7 +146,7 @@
 			sb.append("\t");
 		}
 		if (ver != null) {
-			sb.append("\"ver\": ").append(ver);
+			sb.append("ver: ").append(ver);
 		}
 		
 		sb.append(",\n");
@@ -152,7 +154,7 @@
 			sb.append("\t");
 		}
 		if (apiId != null) {
-			sb.append("\"apiId\": ").append(apiId);
+			sb.append("apiId: ").append(apiId);
 		}
 		
 		sb.append("\n");
diff --git a/src/main/java/org.onosproject.xran/codecs/util/HexConverter.java b/src/main/java/org.onosproject.xran/codecs/util/HexConverter.java
new file mode 100644
index 0000000..2ffddb7
--- /dev/null
+++ b/src/main/java/org.onosproject.xran/codecs/util/HexConverter.java
@@ -0,0 +1,155 @@
+package org.onosproject.xran.codecs.util;
+
+public class HexConverter {
+
+    public static String toHexString(byte b) {
+        StringBuilder builder = new StringBuilder();
+        appendHexString(b, builder);
+        return builder.toString();
+    }
+
+    public static String toHexString(byte[] bytes) {
+        return toHexString(bytes, 0, bytes.length);
+    }
+
+    public static String toHexString(byte[] bytes, int offset, int length) {
+        StringBuilder builder = new StringBuilder();
+
+        int l = 1;
+        for (int i = offset; i < (offset + length); i++) {
+            if ((l != 1) && ((l - 1) % 8 == 0)) {
+                builder.append(' ');
+            }
+            if ((l != 1) && ((l - 1) % 16 == 0)) {
+                builder.append('\n');
+            }
+            l++;
+            appendHexString(bytes[i], builder);
+            if (i != offset + length - 1) {
+                builder.append(' ');
+            }
+        }
+
+        return builder.toString();
+    }
+
+    /**
+     * Returns the integer value as hex string filled with leading zeros. If you do not want leading zeros use
+     * Integer.toHexString(int i) instead.
+     * 
+     * @param i
+     *            the integer value to be converted
+     * @return the hex string
+     */
+    public static String toShortHexString(int i) {
+        byte[] bytes = new byte[] { (byte) (i >> 24), (byte) (i >> 16), (byte) (i >> 8), (byte) (i) };
+        return toShortHexString(bytes);
+    }
+
+    /**
+     * Returns the long value as hex string filled with leading zeros. If you do not want leading zeros use
+     * Long.toHexString(long i) instead.
+     * 
+     * @param l
+     *            the long value to be converted
+     * @return the hex string
+     */
+    public static String toShortHexString(long l) {
+        byte[] bytes = new byte[] { (byte) (l >> 56), (byte) (l >> 48), (byte) (l >> 40), (byte) (l >> 32),
+                (byte) (l >> 24), (byte) (l >> 16), (byte) (l >> 8), (byte) (l) };
+        return toShortHexString(bytes);
+    }
+
+    /**
+     * Returns the byte as a hex string. If b is less than 16 the hex string returned contains a leading zero.
+     * 
+     * @param b
+     *            the byte to be converted
+     * @return the byte as a hex string.
+     */
+    public static String toShortHexString(byte b) {
+        return toShortHexString(new byte[] { b });
+    }
+
+    private final static char[] hexArray = "0123456789ABCDEF".toCharArray();
+
+    public static String toShortHexString(byte[] bytes) {
+        return toShortHexString(bytes, 0, bytes.length);
+    }
+
+    public static String toShortHexString(byte[] bytes, int offset, int length) {
+        char[] hexChars = new char[length * 2];
+        for (int j = offset; j < (offset + length); j++) {
+            int v = bytes[j] & 0xff;
+            hexChars[j * 2] = hexArray[v >>> 4];
+            hexChars[j * 2 + 1] = hexArray[v & 0x0f];
+        }
+        return new String(hexChars);
+    }
+
+    public static byte[] fromShortHexString(String shortHexString) throws NumberFormatException {
+
+        validate(shortHexString);
+
+        int length = shortHexString.length();
+
+        byte[] data = new byte[length / 2];
+        for (int i = 0; i < length; i += 2) {
+            int firstCharacter = Character.digit(shortHexString.charAt(i), 16);
+            int secondCharacter = Character.digit(shortHexString.charAt(i + 1), 16);
+
+            if (firstCharacter == -1 || secondCharacter == -1) {
+                throw new NumberFormatException("string is not a legal hex string.");
+            }
+
+            data[i / 2] = (byte) ((firstCharacter << 4) + secondCharacter);
+        }
+        return data;
+    }
+
+    public static void appendShortHexString(byte b, StringBuilder builder) {
+        builder.append(toShortHexString(b));
+    }
+
+    public static void appendShortHexString(StringBuilder builder, byte[] bytes, int offset, int length) {
+        builder.append(toShortHexString(bytes, offset, length));
+    }
+
+    public static void appendHexString(byte b, StringBuilder builder) {
+        builder.append("0x");
+        appendShortHexString(b, builder);
+    }
+
+    public static void appendHexString(StringBuilder builder, byte[] byteArray, int offset, int length) {
+        int l = 1;
+        for (int i = offset; i < (offset + length); i++) {
+            if ((l != 1) && ((l - 1) % 8 == 0)) {
+                builder.append(' ');
+            }
+            if ((l != 1) && ((l - 1) % 16 == 0)) {
+                builder.append('\n');
+            }
+            l++;
+            appendHexString(byteArray[i], builder);
+            if (i != offset + length - 1) {
+                builder.append(' ');
+            }
+        }
+    }
+
+    private static void validate(String s) {
+        if (s == null) {
+            throw new IllegalArgumentException("string s may not be null");
+        }
+
+        if ((s.length() == 0) || ((s.length() % 2) != 0)) {
+            throw new NumberFormatException("string is not a legal hex string.");
+        }
+    }
+
+    /**
+     * Don't let anyone instantiate this class.
+     */
+    private HexConverter() {
+    }
+}
diff --git a/src/main/java/org.onosproject.xran/controller/XranChannelHandler.java b/src/main/java/org.onosproject.xran/controller/XranChannelHandler.java
index 15c1e0b..2a82205 100644
--- a/src/main/java/org.onosproject.xran/controller/XranChannelHandler.java
+++ b/src/main/java/org.onosproject.xran/controller/XranChannelHandler.java
@@ -25,7 +25,7 @@
 import org.apache.commons.lang.exception.ExceptionUtils;
 import org.onosproject.net.DeviceId;
 import org.onosproject.xran.codecs.pdu.XrancPdu;
-import org.openmuc.jasn1.ber.BerByteArrayOutputStream;
+import org.onosproject.xran.codecs.ber.BerByteArrayOutputStream;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/src/main/java/org.onosproject.xran/controller/XranControllerImpl.java b/src/main/java/org.onosproject.xran/controller/XranControllerImpl.java
index 185ad8e..5f3bf5b 100644
--- a/src/main/java/org.onosproject.xran/controller/XranControllerImpl.java
+++ b/src/main/java/org.onosproject.xran/controller/XranControllerImpl.java
@@ -44,7 +44,7 @@
 import org.onosproject.xran.wrapper.CellMap;
 import org.onosproject.xran.wrapper.LinkMap;
 import org.onosproject.xran.wrapper.UeMap;
-import org.openmuc.jasn1.ber.types.BerInteger;
+import org.onosproject.xran.codecs.ber.types.BerInteger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -412,7 +412,7 @@
                                                         ChannelHandlerContext ctx = cellMap.getCtx(primary.getEcgi());
                                                         RXSigMeasConfig.MeasCells measCells = new RXSigMeasConfig.MeasCells();
                                                         xranStore.getCellNodes().forEach(cell -> {
-                                                            CellConfigReport cellReport = cell.getConf();
+                                                            CellConfigReport cellReport = ((RnibCell) cell).getConf();
                                                             if (cellReport != null) {
                                                                 PCIARFCN pciarfcn = new PCIARFCN();
                                                                 pciarfcn.setPci(cellReport.getPci());
@@ -821,8 +821,8 @@
                         if (cell != null) {
                             RnibLink link = linkMap.get(cell.getEcgi(), schedMeasReportPerUE.getCrnti());
                             if (link != null) {
-                                link.getQuality().setMcs_dl(servCell.getMcsDl());
-                                link.getQuality().setMcs_ul(servCell.getMcsUl());
+                                link.getQuality().setMcsDl(servCell.getMcsDl());
+                                link.getQuality().setMcsUl(servCell.getMcsUl());
 
                                 link.getResourceUsage().setDl(servCell.getPrbUsage().getPrbUsageDl());
                                 link.getResourceUsage().setUl(servCell.getPrbUsage().getPrbUsageUl());
@@ -946,7 +946,7 @@
                     break;
                 }
                 default: {
-                    log.warn("Wrong API ID");
+                    log.warn("Wrong API ID: {}", recv_pdu);
                     break;
                 }
             }
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
diff --git a/src/main/java/org.onosproject.xran/identifiers/LinkId.java b/src/main/java/org.onosproject.xran/identifiers/LinkId.java
index b6fd611..8b7dabb 100644
--- a/src/main/java/org.onosproject.xran/identifiers/LinkId.java
+++ b/src/main/java/org.onosproject.xran/identifiers/LinkId.java
@@ -16,13 +16,24 @@
 
 package org.onosproject.xran.identifiers;
 
+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.onosproject.xran.codecs.api.ECGI;
 import org.onosproject.xran.codecs.api.MMEUES1APID;
 import org.onosproject.xran.entities.RnibCell;
 import org.onosproject.xran.entities.RnibUe;
 
+@JsonPropertyOrder({
+        "ECGI",
+        "MMEUES1APID"
+})
+@JsonIgnoreProperties(ignoreUnknown = true)
 public class LinkId {
+    @JsonIgnore
     private RnibCell cell;
+    @JsonIgnore
     private RnibUe ue;
 
     private LinkId(RnibCell cell, RnibUe ue) {
@@ -43,34 +54,42 @@
         return new LinkId(cell, ue);
     }
 
+    @JsonProperty("ECGI")
     public ECGI getEcgi() {
         return cell.getEcgi();
     }
 
+    @JsonProperty("ECGI")
     public void setEcgi(ECGI sourceId) {
         cell.setEcgi(sourceId);
     }
 
+    @JsonProperty("MMEUES1APID")
     public MMEUES1APID getMmeues1apid() {
         return ue.getMmeS1apId();
     }
 
+    @JsonProperty("MMEUES1APID")
     public void setMmeues1apid(MMEUES1APID destinationId) {
         ue.setMmeS1apId(destinationId);
     }
 
+    @JsonIgnore
     public RnibCell getCell() {
         return cell;
     }
 
+    @JsonIgnore
     public void setCell(RnibCell cell) {
         this.cell = cell;
     }
 
+    @JsonIgnore
     public RnibUe getUe() {
         return ue;
     }
 
+    @JsonIgnore
     public void setUe(RnibUe ue) {
         this.ue = ue;
     }
diff --git a/src/main/java/org.onosproject.xran/impl/DefaultXranStore.java b/src/main/java/org.onosproject.xran/impl/DefaultXranStore.java
index d7b9904..279f46d 100644
--- a/src/main/java/org.onosproject.xran/impl/DefaultXranStore.java
+++ b/src/main/java/org.onosproject.xran/impl/DefaultXranStore.java
@@ -182,15 +182,15 @@
     }
 
     @Override
-    public List<RnibCell> getCellNodes() {
-        List<RnibCell> list = Lists.newArrayList();
+    public List<Object> getCellNodes() {
+        List<Object> list = Lists.newArrayList();
         list.addAll(cellMap.values());
         return list;
     }
 
     @Override
-    public List<RnibUe> getUeNodes() {
-        List<RnibUe> list = Lists.newArrayList();
+    public List<Object> getUeNodes() {
+        List<Object> list = Lists.newArrayList();
         list.addAll(ueMap.values());
         return list;
     }
diff --git a/src/main/java/org.onosproject.xran/impl/XranConfig.java b/src/main/java/org.onosproject.xran/impl/XranConfig.java
index 5f59d4d..03cbe13 100644
--- a/src/main/java/org.onosproject.xran/impl/XranConfig.java
+++ b/src/main/java/org.onosproject.xran/impl/XranConfig.java
@@ -24,7 +24,7 @@
 import org.onosproject.xran.codecs.api.ECGI;
 import org.onosproject.xran.codecs.api.EUTRANCellIdentifier;
 import org.onosproject.xran.codecs.api.PLMNIdentity;
-import org.openmuc.jasn1.util.HexConverter;
+import org.onosproject.xran.codecs.util.HexConverter;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/src/main/java/org.onosproject.xran/rest/CellWebResource.java b/src/main/java/org.onosproject.xran/rest/CellWebResource.java
index 25825a9..ac2806d 100644
--- a/src/main/java/org.onosproject.xran/rest/CellWebResource.java
+++ b/src/main/java/org.onosproject.xran/rest/CellWebResource.java
@@ -15,6 +15,7 @@
  */
 package org.onosproject.xran.rest;
 
+import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import org.apache.commons.lang.exception.ExceptionUtils;
@@ -23,6 +24,7 @@
 import org.onosproject.xran.annotations.Patch;
 import org.onosproject.xran.controller.XranController;
 import org.onosproject.xran.entities.RnibCell;
+import org.onosproject.xran.rest.ResponseHelper.statusCode;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -33,7 +35,6 @@
 import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
-import java.io.IOException;
 import java.io.InputStream;
 import java.util.concurrent.SynchronousQueue;
 import java.util.concurrent.TimeUnit;
@@ -47,6 +48,9 @@
     private static final Logger log =
             LoggerFactory.getLogger(CellWebResource.class);
 
+    public CellWebResource() {
+    }
+
     /**
      * test.
      *
@@ -61,20 +65,34 @@
 
         if (cell != null) {
             try {
-                ObjectNode rootNode = mapper().createObjectNode();
+                JsonNode jsonNode = mapper().valueToTree(cell);
 
-                JsonNode jsonNode = mapper().readTree(cell.toString());
-                rootNode.put("cell", jsonNode);
-            } catch (IOException e) {
-                log.error(ExceptionUtils.getFullStackTrace(e));
+                return ResponseHelper.getResponse(
+                        mapper(),
+                        statusCode.OK,
+                        jsonNode
+                );
+
+            } catch (Exception e) {
+                String fullStackTrace = ExceptionUtils.getFullStackTrace(e);
+                log.error(fullStackTrace);
                 e.printStackTrace();
-                return Response.serverError()
-                        .entity(ExceptionUtils.getFullStackTrace(e))
-                        .build();
+
+                return ResponseHelper.getResponse(
+                        mapper(),
+                        statusCode.INTERNAL_SERVER_ERROR,
+                        "Exception",
+                        fullStackTrace
+                );
             }
         }
 
-        return Response.serverError().entity("cell not found").build();
+        return ResponseHelper.getResponse(
+                mapper(),
+                statusCode.NOT_FOUND,
+                "Not Found",
+                "Cell with " + eciHex + " was not found"
+        );
     }
 
     /**
@@ -87,6 +105,7 @@
     @Patch
     @Path("{cellid}")
     @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
     public Response patchCell(@PathParam("cellid") String eciHex, InputStream stream) {
         RnibCell cell = get(XranStore.class).getCell(eciHex);
 
@@ -104,27 +123,41 @@
                     String poll = queue[0].poll(5, TimeUnit.SECONDS);
 
                     if (poll != null) {
-                        return Response.ok()
-                                .entity(poll)
-                                .build();
+                        return ResponseHelper.getResponse(
+                                mapper(),
+                                statusCode.OK,
+                                "Handoff Response",
+                                poll
+                        );
                     } else {
-                        return Response.serverError()
-                                .entity("did not receive response in time")
-                                .build();
+                        return ResponseHelper.getResponse(
+                                mapper(),
+                                statusCode.REQUEST_TIMEOUT,
+                                "Handoff Timeout",
+                                "eNodeB did not send a HOComplete/HOFailure on time"
+                        );
                     }
                 }
             } catch (Exception e) {
-                log.error(ExceptionUtils.getFullStackTrace(e));
+                String fullStackTrace = ExceptionUtils.getFullStackTrace(e);
+                log.error(fullStackTrace);
                 e.printStackTrace();
-                return Response.serverError()
-                        .entity(ExceptionUtils.getFullStackTrace(e))
-                        .build();
+
+                return ResponseHelper.getResponse(
+                        mapper(),
+                        statusCode.INTERNAL_SERVER_ERROR,
+                        "Exception",
+                        fullStackTrace
+                );
             }
         }
 
-        return Response.serverError()
-                .entity("cell not found")
-                .build();
+        return ResponseHelper.getResponse(
+                mapper(),
+                statusCode.NOT_FOUND,
+                "Not Found",
+                "Cell " + eciHex + " was not found"
+        );
     }
 
 }
diff --git a/src/main/java/org.onosproject.xran/rest/LinkWebResource.java b/src/main/java/org.onosproject.xran/rest/LinkWebResource.java
index 8a85941..4d8dc11 100644
--- a/src/main/java/org.onosproject.xran/rest/LinkWebResource.java
+++ b/src/main/java/org.onosproject.xran/rest/LinkWebResource.java
@@ -15,6 +15,7 @@
  */
 package org.onosproject.xran.rest;
 
+import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.google.common.collect.Lists;
@@ -26,14 +27,20 @@
 import org.onosproject.xran.entities.RnibCell;
 import org.onosproject.xran.entities.RnibLink;
 import org.onosproject.xran.entities.RnibUe;
-import org.openmuc.jasn1.ber.types.BerInteger;
+import org.onosproject.xran.codecs.ber.types.BerInteger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import javax.ws.rs.*;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DefaultValue;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
-import java.io.IOException;
 import java.io.InputStream;
 import java.util.List;
 import java.util.Optional;
@@ -49,6 +56,10 @@
     private static final Logger log =
             LoggerFactory.getLogger(LinkWebResource.class);
 
+    public LinkWebResource() {
+
+    }
+
     /**
      * test.
      *
@@ -74,18 +85,35 @@
             list.addAll(get(XranStore.class).getLinks());
         }
 
-        try {
-            ObjectNode rootNode = mapper().createObjectNode();
-            JsonNode jsonNode = mapper().readTree(list.toString());
-            rootNode.put("links", jsonNode);
-            return Response.ok(rootNode.toString()).build();
-        } catch (IOException e) {
-            log.error(ExceptionUtils.getFullStackTrace(e));
-            e.printStackTrace();
-            return Response.serverError()
-                    .entity(ExceptionUtils.getFullStackTrace(e))
-                    .build();
+        if (list.size() > 0) {
+            try {
+                JsonNode jsonNode = mapper().valueToTree(list);
+
+                return ResponseHelper.getResponse(
+                        mapper(),
+                        ResponseHelper.statusCode.OK,
+                        jsonNode
+                );
+            } catch (Exception e) {
+                String fullStackTrace = ExceptionUtils.getFullStackTrace(e);
+                log.error(fullStackTrace);
+                e.printStackTrace();
+
+                return ResponseHelper.getResponse(
+                        mapper(),
+                        ResponseHelper.statusCode.INTERNAL_SERVER_ERROR,
+                        "Exception",
+                        fullStackTrace
+                );
+            }
         }
+
+        return ResponseHelper.getResponse(
+                mapper(),
+                ResponseHelper.statusCode.NOT_FOUND,
+                "Not Found",
+                "Specified links not found"
+        );
     }
 
     /**
@@ -99,6 +127,7 @@
     @Patch
     @Path("{src},{dst}")
     @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
     public Response patchLinks(@PathParam("src") String src, @PathParam("dst") long dst, InputStream stream) {
         RnibLink link = get(XranStore.class).getLinkBetweenCellIdUeId(src, dst);
         if (link != null) {
@@ -122,12 +151,25 @@
                 }
 
             } catch (Exception e) {
-                log.error(ExceptionUtils.getFullStackTrace(e));
+                String fullStackTrace = ExceptionUtils.getFullStackTrace(e);
+                log.error(fullStackTrace);
                 e.printStackTrace();
-                return Response.serverError().entity(ExceptionUtils.getFullStackTrace(e)).build();
+
+                return ResponseHelper.getResponse(
+                        mapper(),
+                        ResponseHelper.statusCode.INTERNAL_SERVER_ERROR,
+                        "Exception",
+                        fullStackTrace
+                );
             }
         }
-        return Response.serverError().entity("link not found use POST request").build();
+
+        return ResponseHelper.getResponse(
+                mapper(),
+                ResponseHelper.statusCode.NOT_FOUND,
+                "Not Found",
+                "Link not found use POST request"
+        );
     }
 
     /**
@@ -141,26 +183,36 @@
     @POST
     @Path("{src},{dst}")
     @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
     public Response postLinks(@PathParam("src") String src, @PathParam("dst") long dst, InputStream stream) {
         RnibCell cell = get(XranStore.class).getCell(src);
         RnibUe ue = get(XranStore.class).getUe(dst);
 
         if (cell == null) {
-            return Response.serverError()
-                    .entity("cell not found")
-                    .build();
+            return ResponseHelper.getResponse(
+                    mapper(),
+                    ResponseHelper.statusCode.NOT_FOUND,
+                    "Not Found",
+                    "Cell " + src + " was not found"
+            );
         }
 
         if (ue == null) {
-            return Response.serverError()
-                    .entity("ue not found")
-                    .build();
+            return ResponseHelper.getResponse(
+                    mapper(),
+                    ResponseHelper.statusCode.NOT_FOUND,
+                    "Not Found",
+                    "Ue with " + dst + " was not found"
+            );
         }
 
         if (get(XranStore.class).getLink(cell.getEcgi(), ue.getMmeS1apId()) != null) {
-            return Response.serverError()
-                    .entity("link exists use PATCH request")
-                    .build();
+            return ResponseHelper.getResponse(
+                    mapper(),
+                    ResponseHelper.statusCode.BAD_REQUEST,
+                    "Bad Request",
+                    "Link already exists use PATCH to modify"
+            );
         }
 
         try {
@@ -186,16 +238,24 @@
             }
 
         } catch (Exception e) {
-            log.error(ExceptionUtils.getFullStackTrace(e));
+            String fullStackTrace = ExceptionUtils.getFullStackTrace(e);
+            log.error(fullStackTrace);
             e.printStackTrace();
-            return Response.serverError()
-                    .entity(ExceptionUtils.getFullStackTrace(e))
-                    .build();
+
+            return ResponseHelper.getResponse(
+                    mapper(),
+                    ResponseHelper.statusCode.INTERNAL_SERVER_ERROR,
+                    "Exception",
+                    fullStackTrace
+            );
         }
 
-        return Response.serverError()
-                .entity("unreachable code")
-                .build();
+        return ResponseHelper.getResponse(
+                mapper(),
+                ResponseHelper.statusCode.NOT_IMPLEMENTED,
+                "Not Implemented",
+                "This request is not implemented"
+        );
     }
 
     private Response handleTypeChange(RnibLink link, RnibLink.Type newType) throws InterruptedException {
@@ -204,9 +264,12 @@
         if (newType.equals(RnibLink.Type.SERVING_PRIMARY)) {
             switch (link.getType()) {
                 case SERVING_PRIMARY: {
-                    return Response.serverError()
-                            .entity("link already a primary")
-                            .build();
+                    return ResponseHelper.getResponse(
+                            mapper(),
+                            ResponseHelper.statusCode.BAD_REQUEST,
+                            "Bad Request",
+                            "Link is already a primary link"
+                    );
                 }
                 case SERVING_SECONDARY_CA:
                 case SERVING_SECONDARY_DC:
@@ -221,73 +284,109 @@
                         String poll = queue[0].poll(5, TimeUnit.SECONDS);
 
                         if (poll != null) {
-                            return Response.ok()
-                                    .entity(poll)
-                                    .build();
+                            return ResponseHelper.getResponse(
+                                    mapper(),
+                                    ResponseHelper.statusCode.OK,
+                                    "Handoff Response",
+                                    poll
+                            );
                         } else {
-                            return Response.serverError()
-                                    .entity("did not receive response in time")
-                                    .build();
+                            return ResponseHelper.getResponse(
+                                    mapper(),
+                                    ResponseHelper.statusCode.REQUEST_TIMEOUT,
+                                    "Handoff Timeout",
+                                    "eNodeB did not send a HOComplete/HOFailure on time"
+                            );
                         }
                     } else {
                         link.setType(RnibLink.Type.SERVING_PRIMARY);
-                        return Response.ok()
-                                .entity("there was not another primary link")
-                                .build();
+                        return ResponseHelper.getResponse(
+                                mapper(),
+                                ResponseHelper.statusCode.OK,
+                                "OK",
+                                "Link set to primary"
+                        );
                     }
                 }
             }
         } else if (newType.equals(RnibLink.Type.NON_SERVING)) {
             switch (link.getType()) {
                 case NON_SERVING:
-                    return Response.ok()
-                            .entity("It's already a non serving link!" + link)
-                            .build();
+                    return ResponseHelper.getResponse(
+                            mapper(),
+                            ResponseHelper.statusCode.BAD_REQUEST,
+                            "Bad Request",
+                            "Link is already a primary link"
+                    );
                 case SERVING_PRIMARY:
-                    return Response.serverError()
-                            .entity("Cannot change a Primary link.")
-                            .build();
+                    return ResponseHelper.getResponse(
+                            mapper(),
+                            ResponseHelper.statusCode.BAD_REQUEST,
+                            "Bad Request",
+                            "Cannot modify a primary link"
+                    );
                 case SERVING_SECONDARY_CA:
                 case SERVING_SECONDARY_DC:
                     if (get(XranController.class).sendScellDelete(link)) {
-                        return Response.ok()
-                                .entity("Successfully changed link type to " + link.getType())
-                                .build();
+                        return ResponseHelper.getResponse(
+                                mapper(),
+                                ResponseHelper.statusCode.OK,
+                                "OK",
+                                "Link set to non-serving"
+                        );
                     } else {
-                        return Response.serverError()
-                                .entity("Could not change link type.")
-                                .build();
+                        return ResponseHelper.getResponse(
+                                mapper(),
+                                ResponseHelper.statusCode.NOT_FOUND,
+                                "Not Found",
+                                "Could not find cell config report to construct Scell Delete"
+                        );
                     }
             }
         } else if (newType.equals(RnibLink.Type.SERVING_SECONDARY_CA)) {
             switch (link.getType()) {
                 case SERVING_PRIMARY:
-                    return Response.serverError()
-                            .entity("Cannot change a Primary link.")
-                            .build();
+                    return ResponseHelper.getResponse(
+                            mapper(),
+                            ResponseHelper.statusCode.BAD_REQUEST,
+                            "Bad Request",
+                            "Cannot modify a primary link"
+                    );
                 case SERVING_SECONDARY_DC:
                 case NON_SERVING:
                     queue[0] = get(XranController.class).sendScellAdd(link);
                     String poll = queue[0].poll(5, TimeUnit.SECONDS);
                     if (poll != null) {
-                        return Response.ok()
-                                .entity("Successfully changed link type to " + link.getType())
-                                .build();
+                        return ResponseHelper.getResponse(
+                                mapper(),
+                                ResponseHelper.statusCode.OK,
+                                "ScellAdd Response",
+                                poll
+                        );
                     } else {
-                        return Response.serverError()
-                                .entity("did not receive response in time")
-                                .build();
+                        return ResponseHelper.getResponse(
+                                mapper(),
+                                ResponseHelper.statusCode.REQUEST_TIMEOUT,
+                                "ScellAdd Timeout",
+                                "eNodeB did not send a ScellAddStatus on time"
+                        );
                     }
                 case SERVING_SECONDARY_CA:
-                    return Response.ok()
-                            .entity("It's already a service secondary ca link!")
-                            .build();
+                    return ResponseHelper.getResponse(
+                            mapper(),
+                            ResponseHelper.statusCode.BAD_REQUEST,
+                            "Bad Request",
+                            "Link is already a secondary CA link"
+                    );
             }
         }
 
-        return Response.serverError()
-                .entity("Unknown type")
-                .build();
+        return ResponseHelper.getResponse(
+                mapper(),
+                ResponseHelper.statusCode.NOT_IMPLEMENTED,
+                "Not Implemented",
+                "This request is not implemented"
+        );
     }
 
     private Response handleTrafficChange(RnibLink link, JsonNode trafficpercent) {
@@ -301,7 +400,12 @@
             link.getTrafficPercent().setTrafficPercentUl(new BerInteger(jsonNode.asInt()));
         }
 
-        return Response.ok("trafficpercent changed successfully").build();
+        return ResponseHelper.getResponse(
+                mapper(),
+                ResponseHelper.statusCode.OK,
+                "OK",
+                "Traffic Percent changed"
+        );
     }
 
     private Response handleRRMChange(RnibLink link, JsonNode rrmConf) throws InterruptedException {
@@ -312,13 +416,19 @@
         String poll = queue[0].poll(5, TimeUnit.SECONDS);
 
         if (poll != null) {
-            return Response.ok()
-                    .entity(poll)
-                    .build();
+            return ResponseHelper.getResponse(
+                    mapper(),
+                    ResponseHelper.statusCode.OK,
+                    "RRMConfig Response",
+                    poll
+            );
         } else {
-            return Response.serverError()
-                    .entity("did not receive response in time")
-                    .build();
+            return ResponseHelper.getResponse(
+                    mapper(),
+                    ResponseHelper.statusCode.REQUEST_TIMEOUT,
+                    "RRMConfig Timeout",
+                    "eNodeB did not send a RRMConfingStatus on time"
+            );
         }
     }
 }
diff --git a/src/main/java/org.onosproject.xran/rest/NodeWebResource.java b/src/main/java/org.onosproject.xran/rest/NodeWebResource.java
index 7b54177..2b9124c 100644
--- a/src/main/java/org.onosproject.xran/rest/NodeWebResource.java
+++ b/src/main/java/org.onosproject.xran/rest/NodeWebResource.java
@@ -15,8 +15,9 @@
  */
 package org.onosproject.xran.rest;
 
+import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.google.common.collect.Lists;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.exception.ExceptionUtils;
 import org.onosproject.rest.AbstractWebResource;
@@ -34,7 +35,6 @@
 import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
-import java.io.IOException;
 import java.util.List;
 
 /**
@@ -46,6 +46,10 @@
     private static final Logger log =
             LoggerFactory.getLogger(NodeWebResource.class);
 
+    public NodeWebResource() {
+
+    }
+
     /**
      * test.
      *
@@ -55,40 +59,52 @@
     @GET
     @Produces(MediaType.APPLICATION_JSON)
     public Response getNodes(@DefaultValue("") @QueryParam("type") String type) {
-        ObjectNode rootNode = mapper().createObjectNode();
-
+        JsonNode jsonNode;
         try {
+            List<Object> nodes;
             if (StringUtils.isBlank(type)) {
-                List<Object> nodes = get(XranStore.class).getNodes();
-
-                JsonNode jsonNode = mapper().readTree(nodes.get(0).toString());
-                JsonNode jsonNode2 = mapper().readTree(nodes.get(1).toString());
-
-                ObjectNode arrayNode = rootNode.putObject("nodes");
-                arrayNode.put("cells", jsonNode);
-                arrayNode.put("ues", jsonNode2);
+                nodes = get(XranStore.class).getNodes();
             } else if (type.equals("cell")) {
-                List<RnibCell> cellNodes = get(XranStore.class).getCellNodes();
-                JsonNode jsonNode = mapper().readTree(cellNodes.toString());
-
-                ObjectNode arrayNode = rootNode.putObject("nodes");
-                arrayNode.put("cells", jsonNode);
+                nodes = get(XranStore.class).getCellNodes();
             } else if (type.equals("ue")) {
-                List<RnibUe> ueNodes = get(XranStore.class).getUeNodes();
-                JsonNode jsonNode = mapper().readTree(ueNodes.toString());
-
-                ObjectNode arrayNode = rootNode.putObject("nodes");
-                arrayNode.put("ues", jsonNode);
+                nodes = get(XranStore.class).getUeNodes();
+            } else {
+                return ResponseHelper.getResponse(
+                        mapper(),
+                        ResponseHelper.statusCode.NOT_FOUND,
+                        "Not Found",
+                        "Type of node was not found"
+                );
             }
-        } catch (IOException e) {
-            log.error(ExceptionUtils.getFullStackTrace(e));
+
+            if (nodes.size() == 0) {
+                return ResponseHelper.getResponse(
+                        mapper(),
+                        ResponseHelper.statusCode.NOT_FOUND,
+                        "Not Found",
+                        "No nodes found"
+                );
+            }
+
+            jsonNode = mapper().valueToTree(nodes);
+        } catch (Exception e) {
+            String fullStackTrace = ExceptionUtils.getFullStackTrace(e);
+            log.error(fullStackTrace);
             e.printStackTrace();
-            return Response.serverError()
-                    .entity(ExceptionUtils.getFullStackTrace(e))
-                    .build();
+
+            return ResponseHelper.getResponse(
+                    mapper(),
+                    ResponseHelper.statusCode.INTERNAL_SERVER_ERROR,
+                    "Exception",
+                    fullStackTrace
+            );
         }
 
-        return ok(rootNode.toString()).build();
+        return ResponseHelper.getResponse(
+                mapper(),
+                ResponseHelper.statusCode.OK,
+                jsonNode
+        );
     }
 
     /**
@@ -105,20 +121,33 @@
 
         if (node != null) {
             try {
-                ObjectNode rootNode = mapper().createObjectNode();
-                JsonNode jsonNode = mapper().readTree(node.toString());
-                rootNode.put("node", jsonNode);
-                return ok(rootNode.toString()).build();
-            } catch (IOException e) {
-                log.error(ExceptionUtils.getFullStackTrace(e));
+                JsonNode jsonNode = mapper().valueToTree(node);
+
+                return ResponseHelper.getResponse(
+                        mapper(),
+                        ResponseHelper.statusCode.OK,
+                        jsonNode
+                );
+            } catch (Exception e) {
+                String fullStackTrace = ExceptionUtils.getFullStackTrace(e);
+                log.error(fullStackTrace);
                 e.printStackTrace();
-                return Response.serverError()
-                        .entity(ExceptionUtils.getFullStackTrace(e))
-                        .build();
+
+                return ResponseHelper.getResponse(
+                        mapper(),
+                        ResponseHelper.statusCode.INTERNAL_SERVER_ERROR,
+                        "Exception",
+                        fullStackTrace
+                );
             }
         }
 
-        return Response.serverError().entity("node not found").build();
+        return ResponseHelper.getResponse(
+                mapper(),
+                ResponseHelper.statusCode.NOT_FOUND,
+                "Not Found",
+                "Node " + nodeid + " was not found"
+        );
     }
 
 }
diff --git a/src/main/java/org.onosproject.xran/rest/ResponseHelper.java b/src/main/java/org.onosproject.xran/rest/ResponseHelper.java
new file mode 100644
index 0000000..826adc1
--- /dev/null
+++ b/src/main/java/org.onosproject.xran/rest/ResponseHelper.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2015-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.xran.rest;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
+import javax.ws.rs.core.Response;
+
+public class ResponseHelper {
+
+    public static Response getResponse(ObjectMapper mapper, statusCode status, String title, String detail) {
+        ObjectNode rootNode = mapper.createObjectNode();
+
+        switch (status) {
+            case OK:
+            case BAD_REQUEST:
+            case NOT_IMPLEMENTED:
+            case REQUEST_TIMEOUT:
+            case INTERNAL_SERVER_ERROR:
+            case NOT_FOUND: {
+                ArrayNode errors = rootNode.putArray("errors");
+                ObjectNode addObject = errors.addObject();
+                addObject.put("status", status.status);
+                addObject.put("title", title);
+                addObject.put("detail", detail);
+                return Response.status(status.status)
+                        .entity(rootNode.toString())
+                        .build();
+            }
+            default:
+                return Response.noContent().build();
+        }
+    }
+
+    public static Response getResponse(ObjectMapper mapper, statusCode status, JsonNode node) {
+        ObjectNode rootNode = mapper.createObjectNode();
+
+        switch (status) {
+            case OK:
+            case BAD_REQUEST:
+            case NOT_IMPLEMENTED:
+            case REQUEST_TIMEOUT:
+            case INTERNAL_SERVER_ERROR:
+            case NOT_FOUND: {
+                ArrayNode data = rootNode.putArray("data");
+                data.add(node);
+                return Response.status(status.status)
+                        .entity(rootNode.toString())
+                        .build();
+            }
+            default:
+                return Response.noContent().build();
+        }
+    }
+
+    public enum statusCode {
+        OK(200),
+        BAD_REQUEST(400),
+        NOT_FOUND(404),
+        REQUEST_TIMEOUT(408),
+        INTERNAL_SERVER_ERROR(500),
+        NOT_IMPLEMENTED(501);
+
+        public int status;
+
+        statusCode(int status) {
+            this.status = status;
+        }
+    }
+}
diff --git a/src/main/java/org.onosproject.xran/rest/SliceWebResource.java b/src/main/java/org.onosproject.xran/rest/SliceWebResource.java
index e895d55..58b4bef 100644
--- a/src/main/java/org.onosproject.xran/rest/SliceWebResource.java
+++ b/src/main/java/org.onosproject.xran/rest/SliceWebResource.java
@@ -15,8 +15,8 @@
  */
 package org.onosproject.xran.rest;
 
+import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
 import org.apache.commons.lang.exception.ExceptionUtils;
 import org.onosproject.rest.AbstractWebResource;
 import org.onosproject.xran.XranStore;
@@ -44,6 +44,10 @@
     private static final Logger log =
             LoggerFactory.getLogger(SliceWebResource.class);
 
+    public SliceWebResource() {
+
+    }
+
     /**
      * test.
      *
@@ -58,20 +62,33 @@
 
         if (slice != null) {
             try {
-                ObjectNode rootNode = mapper().createObjectNode();
-                JsonNode jsonNode = mapper().readTree(slice.toString());
-                rootNode.put("slice", jsonNode);
-                return ok(rootNode.toString()).build();
-            } catch (IOException e) {
-                log.error(ExceptionUtils.getFullStackTrace(e));
+                JsonNode jsonNode = mapper().valueToTree(slice);
+
+                return ResponseHelper.getResponse(
+                        mapper(),
+                        ResponseHelper.statusCode.OK,
+                        jsonNode
+                );
+            } catch (Exception e) {
+                String fullStackTrace = ExceptionUtils.getFullStackTrace(e);
+                log.error(fullStackTrace);
                 e.printStackTrace();
-                return Response.serverError()
-                        .entity(ExceptionUtils.getFullStackTrace(e))
-                        .build();
+
+                return ResponseHelper.getResponse(
+                        mapper(),
+                        ResponseHelper.statusCode.INTERNAL_SERVER_ERROR,
+                        "Exception",
+                        fullStackTrace
+                );
             }
         }
 
-        return Response.serverError().entity("slice not found").build();
+        return ResponseHelper.getResponse(
+                mapper(),
+                ResponseHelper.statusCode.NOT_FOUND,
+                "Not Found",
+                "Slice " + sliceid + " not found"
+        );
     }
 
     /**
@@ -82,19 +99,30 @@
      */
     @POST
     @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
     public Response postSlice(InputStream stream) {
         try {
-            boolean b;
-            ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
+//            ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
+//            get(XranStore.class).createSlice(jsonTree);
 
-            b = get(XranStore.class).createSlice(jsonTree);
-            return ok(b).build();
+            // FIXME: change when implemented
+            return ResponseHelper.getResponse(
+                    mapper(),
+                    ResponseHelper.statusCode.NOT_IMPLEMENTED,
+                    "Not Implemented",
+                    "POST Slice not implemented"
+            );
         } catch (Exception e) {
-            log.error(ExceptionUtils.getFullStackTrace(e));
+            String fullStackTrace = ExceptionUtils.getFullStackTrace(e);
+            log.error(fullStackTrace);
             e.printStackTrace();
-            return Response.serverError()
-                    .entity(ExceptionUtils.getFullStackTrace(e))
-                    .build();
+
+            return ResponseHelper.getResponse(
+                    mapper(),
+                    ResponseHelper.statusCode.INTERNAL_SERVER_ERROR,
+                    "Exception",
+                    fullStackTrace
+            );
         }
     }