diff --git a/runtime/src/main/java/org/onosproject/yang/runtime/SerializerHelper.java b/runtime/src/main/java/org/onosproject/yang/runtime/SerializerHelper.java
index 2a48d90..bc45189 100644
--- a/runtime/src/main/java/org/onosproject/yang/runtime/SerializerHelper.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/SerializerHelper.java
@@ -361,20 +361,30 @@
                             throw new IllegalArgumentException(E_RESID);
                         }
                         schema = (LeafSchemaContext) childSchema;
+
+                        lType = schema.getLeafType(value);
+                        if (!lType.equals(LeafType.IDENTITYREF) && valNamespace != null) {
+                            value = valNamespace + ":" + value;
+                            valNamespace = null;
+                        }
+
                         valObject = getLeaf(value, schema);
                         valNamespace = getValidValNamespace(value, schema,
                                                             valNamespace);
-                        lType = schema.getLeafType(value);
                         builder = LeafNode.builder(name, namespace)
                                 .type(nodeType).value(valObject)
                                 .valueNamespace(valNamespace).leafType(lType);
                         break;
                     case MULTI_INSTANCE_LEAF_VALUE_NODE:
                         schema = (LeafSchemaContext) childSchema;
+                        lType = schema.getLeafType(value);
+                        if (!lType.equals(LeafType.IDENTITYREF) && valNamespace != null) {
+                            value = valNamespace + ":" + value;
+                            valNamespace = null;
+                        }
                         valObject = getLeafList(value, schema);
                         valNamespace = getValidValNamespace(value, schema,
                                                             valNamespace);
-                        lType = schema.getLeafType(value);
                         builder = LeafNode.builder(name, namespace)
                                 .type(nodeType).value(valObject)
                                 .valueNamespace(valNamespace).leafType(lType);
@@ -393,10 +403,14 @@
                 switch (nodeType) {
                     case SINGLE_INSTANCE_LEAF_VALUE_NODE:
                         schema = (LeafSchemaContext) childSchema;
+                        lType = schema.getLeafType(value);
+                        if (!lType.equals(LeafType.IDENTITYREF) && valNamespace != null) {
+                            value = valNamespace + ":" + value;
+                            valNamespace = null;
+                        }
                         valObject = getLeaf(value, schema);
                         valNamespace = getValidValNamespace(value, schema,
                                                             valNamespace);
-                        lType = schema.getLeafType(value);
                         if (((YangLeaf) childSchema).isKeyLeaf()) {
                             builder = builder.addKeyLeaf(
                                     name, namespace, valObject);
@@ -407,10 +421,14 @@
                         break;
                     case MULTI_INSTANCE_LEAF_VALUE_NODE:
                         schema = (LeafSchemaContext) childSchema;
+                        lType = schema.getLeafType(value);
+                        if (!lType.equals(LeafType.IDENTITYREF) && valNamespace != null) {
+                            value = valNamespace + ":" + value;
+                            valNamespace = null;
+                        }
                         valObject = getLeafList(value, schema);
                         valNamespace = getValidValNamespace(value, schema,
                                                             valNamespace);
-                        lType = schema.getLeafType(value);
                         builder = builder.createChildBuilder(
                                 name, namespace, valObject, valNamespace)
                                 .type(nodeType).leafType(lType);
diff --git a/serializers/json/src/test/java/org/onosproject/yang/serializers/json/JsonSerializerTest.java b/serializers/json/src/test/java/org/onosproject/yang/serializers/json/JsonSerializerTest.java
index 2c43192..1667674 100644
--- a/serializers/json/src/test/java/org/onosproject/yang/serializers/json/JsonSerializerTest.java
+++ b/serializers/json/src/test/java/org/onosproject/yang/serializers/json/JsonSerializerTest.java
@@ -117,6 +117,42 @@
     }
 
     @Test
+    public void colonTest() throws IOException {
+        String path = "src/test/resources/colontest.json";
+        // decode
+        DefaultCompositeStream external =
+            new DefaultCompositeStream("demo1:device", parseInput(path));
+        CompositeData compositeData = jsonSerializer.decode(external, context);
+        ResourceData resourceData = compositeData.resourceData();
+        ResourceId rid = resourceData.resourceId();
+        DataNode rootNode = resourceData.dataNodes().get(0);
+
+        // encode
+        RuntimeContext.Builder runtimeContextBuilder = DefaultRuntimeContext.builder();
+        runtimeContextBuilder.setDataFormat("JSON");
+        DefaultResourceData.Builder resourceDataBuilder = DefaultResourceData.builder();
+        resourceDataBuilder.addDataNode(rootNode);
+        resourceDataBuilder.resourceId(rid);
+
+        ResourceData resourceDataOutput = resourceDataBuilder.build();
+        DefaultCompositeData.Builder compositeDataBuilder = DefaultCompositeData.builder();
+        compositeDataBuilder.resourceData(resourceDataOutput);
+        CompositeData compositeData1 = compositeDataBuilder.build();
+        // CompositeData --- YangRuntimeService ---> CompositeStream.
+        CompositeStream compositeStreamOutPut = jsonSerializer.encode(compositeData1,
+            context);
+        InputStream inputStreamOutput = compositeStreamOutPut.resourceData();
+        ObjectNode rootNodeOutput;
+        ObjectMapper mapper = new ObjectMapper();
+        try {
+            rootNodeOutput = (ObjectNode) mapper.readTree(inputStreamOutput);
+            assertEquals(true, rootNodeOutput != null);
+        } catch (IOException e) {
+            throw e;
+        }
+    }
+
+    @Test
     public void jsonListTest() throws IOException {
         String path = "src/test/resources/testinput1.json";
         // decode
diff --git a/serializers/json/src/test/resources/colontest.json b/serializers/json/src/test/resources/colontest.json
new file mode 100644
index 0000000..10d715f
--- /dev/null
+++ b/serializers/json/src/test/resources/colontest.json
@@ -0,0 +1,3 @@
+{
+    "req-start-date-time":"2018-09-15T15:53:00+05:30"
+}
diff --git a/serializers/json/src/test/resources/demo1.yang b/serializers/json/src/test/resources/demo1.yang
index edf17eb..1dd1ea2 100644
--- a/serializers/json/src/test/resources/demo1.yang
+++ b/serializers/json/src/test/resources/demo1.yang
@@ -4,6 +4,9 @@
     prefix "demo1";
     revision "2013-07-15";
     container device {
+
+        uses start-end-date-time;
+
         list device {
             key deviceid;
             leaf deviceid {
@@ -79,6 +82,24 @@
         }
     }
 
+    grouping start-end-date-time
+        {
+            leaf req-start-date-time
+            {
+                type string {
+                         pattern '\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[\+\-]\d{2}:\d{2})';
+                               }
+            }
+            leaf req-end-date-time
+            {
+                type string {
+                         pattern '\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?'
+                               + '(Z|[\+\-]\d{2}:\d{2})';
+                               }
+            }
+            description "";
+        }
+
     list list1 {
         key leaf1;
         leaf leaf1 {
