diff --git a/apps/configsync-netconf/src/main/java/org/onosproject/d/config/sync/impl/netconf/NetconfDeviceConfigSynchronizerProvider.java b/apps/configsync-netconf/src/main/java/org/onosproject/d/config/sync/impl/netconf/NetconfDeviceConfigSynchronizerProvider.java
index 876cceb..148cc8f 100644
--- a/apps/configsync-netconf/src/main/java/org/onosproject/d/config/sync/impl/netconf/NetconfDeviceConfigSynchronizerProvider.java
+++ b/apps/configsync-netconf/src/main/java/org/onosproject/d/config/sync/impl/netconf/NetconfDeviceConfigSynchronizerProvider.java
@@ -23,8 +23,6 @@
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.atomic.AtomicInteger;
-
 import org.onlab.util.XmlString;
 import org.onosproject.d.config.ResourceIds;
 import org.onosproject.d.config.sync.DeviceConfigSynchronizationProvider;
@@ -47,6 +45,7 @@
 import org.onosproject.yang.model.ResourceId;
 import org.onosproject.yang.runtime.AnnotatedNodeInfo;
 import org.onosproject.yang.runtime.Annotation;
+import org.onosproject.yang.runtime.CompositeData;
 import org.onosproject.yang.runtime.CompositeStream;
 import org.onosproject.yang.runtime.DefaultAnnotatedNodeInfo;
 import org.onosproject.yang.runtime.DefaultAnnotation;
@@ -93,9 +92,6 @@
 
     private NetconfContext context;
 
-    // FIXME remove and let netconf southbound deal with message-id generation
-    private final AtomicInteger messageId = new AtomicInteger(1);
-
     protected NetconfDeviceConfigSynchronizerProvider(ProviderId id,
                                                       NetconfContext context) {
         super(id);
@@ -115,8 +111,8 @@
         StringBuilder rpc = new StringBuilder();
 
         // - Add NETCONF envelope
-        rpc.append("<rpc xmlns=\"").append(NETCONF_1_0_BASE_NAMESPACE).append("\" ")
-            .append("message-id=\"").append(messageId.getAndIncrement()).append("\">");
+        rpc.append("<rpc xmlns=\"").append(NETCONF_1_0_BASE_NAMESPACE).append('"')
+            .append(">");
 
         rpc.append("<edit-config>");
         rpc.append("<target>");
@@ -134,6 +130,7 @@
 
         // Convert change(s) into a DataNode tree
         for (Change change : request.changes()) {
+            log.trace("change={}", change);
 
             // TODO switch statement can probably be removed
             switch (change.op()) {
@@ -157,7 +154,9 @@
                                            .setDataFormat(DATAFORMAT_XML)
                                            .addAnnotation(XMLNS_XC_ANNOTATION)
                                            .build();
-                CompositeStream xml = context.yangRuntime().encode(compositeData.build(),
+                CompositeData cdata = compositeData.build();
+                log.trace("CompositeData:{}", cdata);
+                CompositeStream xml = context.yangRuntime().encode(cdata,
                                                                    yrtContext);
                 try {
                     CharStreams.copy(new InputStreamReader(xml.resourceData(), UTF_8), rpc);
@@ -191,11 +190,12 @@
         try {
             // FIXME Netconf async API is currently screwed up, need to fix
             // NetconfSession, etc.
-            CompletableFuture<String> response = session.request(rpc.toString());
-            log.info("TRACE: request:\n{}", XmlString.prettifyXml(rpc));
+            CompletableFuture<String> response = session.rpc(rpc.toString());
+            log.trace("raw request:\n{}", rpc);
+            log.trace("prettified request:\n{}", XmlString.prettifyXml(rpc));
             return response.handle((resp, err) -> {
                 if (err == null) {
-                    log.info("TRACE: reply:\n{}", XmlString.prettifyXml(resp));
+                    log.trace("reply:\n{}", XmlString.prettifyXml(resp));
                     // FIXME check response properly
                     return SetResponse.ok(request);
                 } else {
