diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/defaultcodecs/xml/DefaultXmlCodec.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/defaultcodecs/xml/DefaultXmlCodec.java
index 915863e..dd78ab5 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/defaultcodecs/xml/DefaultXmlCodec.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/defaultcodecs/xml/DefaultXmlCodec.java
@@ -84,6 +84,10 @@
             rootElement.add(Namespace.get(rootNode.getNamespace()));
         }
 
+        if (rootElement.getName().equals("config")) {
+            rootElement.add(new Namespace("nc", "urn:ietf:params:xml:ns:netconf:base:1.0"));
+        }
+
         // Adding the attribute if exist
         Map<String, String> tagAttrMap = extBuilder.getRootTagAttributeMap();
         if (tagAttrMap != null && !tagAttrMap.isEmpty()) {
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/defaultcodecs/xml/XmlCodecHandler.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/defaultcodecs/xml/XmlCodecHandler.java
index b7685a8..097e71f 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/defaultcodecs/xml/XmlCodecHandler.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/defaultcodecs/xml/XmlCodecHandler.java
@@ -81,7 +81,7 @@
         YdtContextOperationType opType = ((YdtExtendedContext) ydtContext)
                 .getYdtContextOperationType();
         if (opType != null && opType != NONE) {
-            newElement.addAttribute(OPERATION,
+            newElement.addAttribute("nc:" + OPERATION,
                                     opType.toString().toLowerCase());
         }
 
diff --git a/apps/yms/ut/src/test/java/org/onosproject/yms/app/ych/DefaultYangCodecHandlerTest.java b/apps/yms/ut/src/test/java/org/onosproject/yms/app/ych/DefaultYangCodecHandlerTest.java
index 7cb5a9c..500f180 100644
--- a/apps/yms/ut/src/test/java/org/onosproject/yms/app/ych/DefaultYangCodecHandlerTest.java
+++ b/apps/yms/ut/src/test/java/org/onosproject/yms/app/ych/DefaultYangCodecHandlerTest.java
@@ -45,6 +45,10 @@
 import org.onosproject.yang.gen.v1.ych.combined.rev20160524.combined.attributes.bgpparameters.optionalcapabilities.cparameters.DefaultAs4BytesCapability;
 import org.onosproject.yang.gen.v1.ych.empty.container.rev20160524.EmptyContainerOpParam;
 import org.onosproject.yang.gen.v1.ych.empty.container.rev20160524.emptycontainer.EmptyContainer;
+import org.onosproject.yang.gen.v1.ych.purchasing.supervisor.rev20160524.YchPurchasingsupervisorOpParam;
+import org.onosproject.yang.gen.v1.ych.purchasing.supervisor.rev20160524.ychpurchasingsupervisor.DefaultYchPurchasingSupervisor;
+import org.onosproject.yang.gen.v1.ych.purchasing.supervisor.rev20160524.ychpurchasingsupervisor.YchPurchasingSupervisor;
+import org.onosproject.yang.gen.v1.ych.purchasing.supervisor.rev20160524.YchPurchasingsupervisor.OnosYangOpType;
 import org.onosproject.yang.gen.v1.ydt.customs.supervisor.rev20160524.CustomssupervisorOpParam;
 import org.onosproject.yang.gen.v1.ydt.material.supervisor.rev20160524.MaterialsupervisorOpParam;
 import org.onosproject.yang.gen.v1.ydt.material.supervisor.rev20160524.materialsupervisor.DefaultSupervisor;
@@ -102,7 +106,8 @@
      * @return the xml string for merchandisersupervisor module
      */
     private static String merchandXml() {
-        return "<config xmlns=\"ydt.root\">" +
+        return "<config xmlns=\"ydt.root\" " +
+                "xmlns:nc=\"urn:ietf:params:xml:ns:netconf:base:1.0\">" +
                 "<supervisor xmlns=\"ydt.Merchandiser-supervisor\">" +
                 "Merchandisersupervisor</supervisor>" +
                 "</config>";
@@ -114,7 +119,8 @@
      * @return the xml string for tradingsupervisor module
      */
     private static String tradingXml() {
-        return "<config xmlns=\"ydt.root\">" +
+        return "<config xmlns=\"ydt.root\" " +
+                "xmlns:nc=\"urn:ietf:params:xml:ns:netconf:base:1.0\">" +
                 "<supervisor xmlns=\"ydt.trading-supervisor\">" +
                 "Tradingsupervisor</supervisor>" +
                 "</config>";
@@ -226,18 +232,18 @@
     /**
      * Returns the xml string for ych-purchasingsupervisor module.
      *
-     * @return the xml string for ych-purchasingsupervisor module
+     * @return the XML string for ych-purchasingsupervisor module
      */
     private static String purchaseXml() {
-        return "<filter xmlns=\"ydt.filter-type\" type=\"subtree\">" +
-                "<ych-purchasingsupervisor xmlns=\"ych.purchasing-supervisor\">" +
-                "<ych-purchasing-supervisor operation=\"create\">" +
+        return "<config xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\" " +
+                "xmlns:nc=\"urn:ietf:params:xml:ns:netconf:base:1.0\">" +
+                "<ych-purchasing-supervisor xmlns=\"ych.purchasing-supervisor\" " +
+                "nc:operation=\"create\">" +
                 "<ych-purchasing-specialist>purchasingSpecialist" +
                 "</ych-purchasing-specialist>" +
                 "<ych-purchasing-support>support</ych-purchasing-support>" +
                 "</ych-purchasing-supervisor>" +
-                "</ych-purchasingsupervisor>" +
-                "</filter>";
+                "</config>";
     }
 
     /**
@@ -791,42 +797,38 @@
         assertEquals(AM_XML + "combined: list info", listTestXml(), xml);
     }
 
-    //TODO negative scenario will be handled later
-//    /**
-//     * Unit test case in which verifying xml string for module object with
-//     * container.
-//     */
-//    @Test
-//    public void proceessCodecHandlerForContainer() {
-//        testYangSchemaNodeProvider.processSchemaRegistry(null);
-//        DefaultYangSchemaRegistry schemaRegistry =
-//                testYangSchemaNodeProvider.getDefaultYangSchemaRegistry();
-//        List<Object> yangModuleList = new ArrayList<>();
-//
-//        // Creating the object
-//        YchPurchasingSupervisor supervisor =
-//                new DefaultYchPurchasingSupervisor
-//                        .YchPurchasingSupervisorBuilder()
-//                        .ychPurchasingSpecialist("purchasingSpecialist")
-//                        .ychPurchasingSupport("support")
-//                        .yangYchPurchasingSupervisorOpType(CREATE).build();
-//        Object object = YchPurchasingsupervisorOpParam.builder()
-//                .ychPurchasingSupervisor(supervisor).build();
-//        yangModuleList.add(object);
-//
-//        // Get the xml string and compare
-//        Map<String, String> tagAttr = new HashMap<String, String>();
-//        tagAttr.put("type", "subtree");
-//
-//        YangCodecRegistry.initializeDefaultCodec();
-//        DefaultYangCodecHandler codecHandler =
-//                new DefaultYangCodecHandler(schemaRegistry);
-//        String xml = codecHandler.encodeOperation("filter", "ydt.filter-type",
-//                                                  tagAttr, yangModuleList,
-//                                                  XML, null);
-//        assertEquals(AM_XML + "puchas-super: container info", purchaseXml(),
-//                     xml);
-//    }
+//    TODO negative scenario will be handled later
+    /**
+     * Unit test case in which verifying xml string for module object with
+     * container.
+     */
+    @Test
+    public void proceessCodecHandlerForContainer() {
+        testYangSchemaNodeProvider.processSchemaRegistry(null);
+        DefaultYangSchemaRegistry schemaRegistry =
+                testYangSchemaNodeProvider.getDefaultYangSchemaRegistry();
+        List<Object> yangModuleList = new ArrayList<>();
+
+        // Creating the object
+        YchPurchasingSupervisor supervisor =
+                new DefaultYchPurchasingSupervisor
+                        .YchPurchasingSupervisorBuilder()
+                        .ychPurchasingSpecialist("purchasingSpecialist")
+                        .ychPurchasingSupport("support")
+                        .yangYchPurchasingSupervisorOpType(OnosYangOpType.CREATE).build();
+        Object object = YchPurchasingsupervisorOpParam.builder()
+                .ychPurchasingSupervisor(supervisor).build();
+        yangModuleList.add(object);
+
+        YangCodecRegistry.initializeDefaultCodec();
+        DefaultYangCodecHandler codecHandler =
+                new DefaultYangCodecHandler(schemaRegistry);
+        String xml = codecHandler.encodeOperation("config", "urn:ietf:params:xml:ns:netconf:base:1.0",
+                                                  null, yangModuleList,
+                                                  XML, null);
+        assertEquals(AM_XML + "puchas-super: container info", purchaseXml(),
+                     xml);
+    }
 
 //    /**
 //     * Unit test case in which verifying xml string for module object with
diff --git a/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/NetconfSessionImpl.java b/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/NetconfSessionImpl.java
index 29a5dfc..59cc125 100644
--- a/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/NetconfSessionImpl.java
+++ b/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/NetconfSessionImpl.java
@@ -71,7 +71,7 @@
     private static final String EDIT_CONFIG_CLOSE = "</edit-config>";
     private static final String TARGET_OPEN = "<target>";
     private static final String TARGET_CLOSE = "</target>";
-    private static final String CONFIG_OPEN = "<config>";
+    private static final String CONFIG_OPEN = "<config xmlns:nc=\"urn:ietf:params:xml:ns:netconf:base:1.0\">";
     private static final String CONFIG_CLOSE = "</config>";
     private static final String XML_HEADER =
             "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
