diff --git a/model/src/main/java/org/onosproject/yang/model/ListKey.java b/model/src/main/java/org/onosproject/yang/model/ListKey.java
index 297a660..9f643a4 100644
--- a/model/src/main/java/org/onosproject/yang/model/ListKey.java
+++ b/model/src/main/java/org/onosproject/yang/model/ListKey.java
@@ -30,6 +30,7 @@
  */
 public final class ListKey extends NodeKey<ListKey> implements Comparable<ListKey> {
 
+    // effectively final, but not possible due to clone()
     private List<KeyLeaf> keyLeafs;
 
     /**
@@ -39,7 +40,7 @@
      */
     private ListKey(ListKeyBuilder builder) {
         super(builder);
-        keyLeafs = builder.keyLeafs;
+        keyLeafs = ImmutableList.copyOf(builder.keyLeafs);
     }
 
     /**
@@ -50,7 +51,7 @@
      * @return List of key leaf nodes
      */
     public List<KeyLeaf> keyLeafs() {
-        return ImmutableList.copyOf(keyLeafs);
+        return keyLeafs;
     }
 
     /**
@@ -60,19 +61,21 @@
      * @throws CloneNotSupportedException if the object's class does not
      *                                    support the {@code Cloneable} interface
      */
+    @Override
     public ListKey clone() throws CloneNotSupportedException {
         ListKey clonedListKey = (ListKey) super.clone();
-        List<KeyLeaf> clonedKeyLeafs = new LinkedList<>();
+        ImmutableList.Builder<KeyLeaf> clonedKeyLeafs = ImmutableList.builder();
         for (KeyLeaf leaf : keyLeafs) {
             clonedKeyLeafs.add(leaf.clone());
         }
-        clonedListKey.keyLeafs = clonedKeyLeafs;
+        clonedListKey.keyLeafs = clonedKeyLeafs.build();
         return clonedListKey;
     }
 
+    @Override
     public int compareTo(ListKey o) {
         //TODO: implement me
-        return 0;
+        throw new UnsupportedOperationException();
     }
 
     @Override
@@ -129,7 +132,7 @@
          * Adds the key leaf for the list resource.
          *
          * @param name      key leaf name
-         * @param nameSpace key laef namespace
+         * @param nameSpace key leaf namespace
          * @param val       value of key
          */
         public void addKeyLeaf(String name, String nameSpace, Object val) {
@@ -142,6 +145,7 @@
          *
          * @return list key
          */
+        @Override
         public ListKey build() {
             return new ListKey(this);
         }
diff --git a/runtime/src/test/java/org/onosproject/yang/runtime/impl/serializerhelper/AddToDataNodeList1Test.java b/runtime/src/test/java/org/onosproject/yang/runtime/impl/serializerhelper/AddToDataNodeList1Test.java
index 94d0a4b..9872c8d 100644
--- a/runtime/src/test/java/org/onosproject/yang/runtime/impl/serializerhelper/AddToDataNodeList1Test.java
+++ b/runtime/src/test/java/org/onosproject/yang/runtime/impl/serializerhelper/AddToDataNodeList1Test.java
@@ -130,14 +130,14 @@
         dBlr = exitDataNode(dBlr);
 
         //Tree validation
-        nA = new String[]{"/", "l1", "k1", "k2", "k3", "c1", "leaf_c1"};
-        nsA = new String[]{null, LNS, LNS, LNS, LNS, LNS, LNS};
-        valA = new String[]{"1", "2", "3", "0"};
+        nA = new String[]{"/", "l1", "k1", "k2", "c1", "leaf_c1"};
+        nsA = new String[]{null, LNS, LNS, LNS, LNS, LNS};
+        valA = new String[]{"1", "2", null, "0"};
         validateResourceId(nA, nsA, valA, id);
 
-        nA = new String[]{"/", "l1", "k1", "k2", "k3", "c1"};
-        nsA = new String[]{null, LNS, LNS, LNS, LNS, LNS};
-        valA = new String[]{"1", "2", "3"};
+        nA = new String[]{"/", "l1", "k1", "k2", "c1"};
+        nsA = new String[]{null, LNS, LNS, LNS, LNS};
+        valA = new String[]{"1", "2", null};
         validateResourceId(nA, nsA, valA, id1);
 
         nA = new String[]{"/", "l1", "k1", "k2", "k3"};
diff --git a/runtime/src/test/java/org/onosproject/yang/runtime/impl/serializerhelper/AddToDataNodeListTest.java b/runtime/src/test/java/org/onosproject/yang/runtime/impl/serializerhelper/AddToDataNodeListTest.java
index 4102e74..db25f51 100644
--- a/runtime/src/test/java/org/onosproject/yang/runtime/impl/serializerhelper/AddToDataNodeListTest.java
+++ b/runtime/src/test/java/org/onosproject/yang/runtime/impl/serializerhelper/AddToDataNodeListTest.java
@@ -167,14 +167,14 @@
         dBlr = exitDataNode(dBlr);
 
         //Tree validation
-        nA = new String[]{"/", "l1", "k1", "k2", "k3", "c1", "leaf_c1"};
-        nsA = new String[]{null, LNS, LNS, LNS, LNS, LNS, LNS};
-        valA = new String[]{"1", "2", "3", "0"};
+        nA = new String[]{"/", "l1", "k1", "k2", "c1", "leaf_c1"};
+        nsA = new String[]{null, LNS, LNS, LNS, LNS, LNS};
+        valA = new String[]{"1", "2", null, "0"};
         validateResourceId(nA, nsA, valA, id);
 
-        nA = new String[]{"/", "l1", "k1", "k2", "k3", "c1"};
-        nsA = new String[]{null, LNS, LNS, LNS, LNS, LNS};
-        valA = new String[]{"1", "2", "3"};
+        nA = new String[]{"/", "l1", "k1", "k2", "c1"};
+        nsA = new String[]{null, LNS, LNS, LNS, LNS};
+        valA = new String[]{"1", "2", null};
         validateResourceId(nA, nsA, valA, id1);
 
         nA = new String[]{"/", "l1", "k1", "k2", "k3"};
