diff --git a/src/asfvolt16_driver.c b/src/asfvolt16_driver.c
index 662c94c..14cd505 100755
--- a/src/asfvolt16_driver.c
+++ b/src/asfvolt16_driver.c
@@ -31,6 +31,13 @@
 #include "bal_packet_hdlr.h"
 #include "bal_indications_hdlr.h"
 
+#if 0
+#include "bal_api_end.h"  /* Use when BAL -Wsign-compare is cleaned up */
+#else
+extern bcmos_errno bcmbal_apiend_init_all(int argc, char *argv[], void *, int);
+extern bcmos_errno bcmbal_apiend_finish(void);
+#endif
+
 bcmbal_access_term_id access_term_id = DEFAULT_ATERM_ID;
 
 /********************************************************************\
@@ -43,7 +50,7 @@
     bcmos_errno err = BCM_ERR_OK;
     bcmbal_cb_cfg cb_cfg = {};
     uint16_t ind_subgroup;
-    ASFVOLT_LOG(ASFVOLT_DEBUG, "Subscription for other messages\n");
+    ASFVOLT_LOG(ASFVOLT_DEBUG, "Subscription for other messages");
 
     cb_cfg.module = BCMOS_MODULE_ID_NONE;
 
@@ -193,13 +200,13 @@
     char *ip_and_port = NULL;
     if (NULL == bal_init)
     {
-       ASFVOLT_LOG(ASFVOLT_ERROR, "Recvied NULL balInit Structure from VOLTHA \n");
+       ASFVOLT_LOG(ASFVOLT_ERROR, "Received NULL balInit Structure from VOLTHA");
        return BAL_ERRNO__BAL_ERR_PERM;
     }
     else
     {
        ip_and_port = bal_init->voltha_adapter_ip_port;
-       ASFVOLT_LOG(ASFVOLT_DEBUG,"\nRecevied Adapter IP and Port from VOLTHA is %s\n",ip_and_port);
+       ASFVOLT_LOG(ASFVOLT_DEBUG,"Received Adapter IP and Port from VOLTHA is %s",ip_and_port);
     }
     char *argv[6];
     /* Initialize BAL */
@@ -224,7 +231,7 @@
     {
         /* Let logger task have enough time to drain its message queue. */
         usleep(1000000);
-        ASFVOLT_LOG(ASFVOLT_ERROR, "failed to Initialize the BAL\n");
+        ASFVOLT_LOG(ASFVOLT_ERROR, "failed to Initialize the BAL");
         return err;
     }
 #endif
@@ -247,7 +254,7 @@
 
     if (err)
     {
-      ASFVOLT_LOG(ASFVOLT_ERROR, "failed to register call back functions to BAL\n");
+      ASFVOLT_LOG(ASFVOLT_ERROR, "failed to register call back functions to BAL");
     }
 
     return err;
@@ -327,7 +334,7 @@
        }
        default:
        {
-          ASFVOLT_LOG(ASFVOLT_ERROR, "Invalid objet type for configuration\n");
+          ASFVOLT_LOG(ASFVOLT_ERROR, "Invalid object type for configuration");
           err = BAL_ERRNO__BAL_ERR_INVALID_OP;
           break;
        }
@@ -350,7 +357,7 @@
 
     if(!key->hdr->has_obj_type)
     {
-       ASFVOLT_LOG(ASFVOLT_ERROR, "object type is not present for clear\n");
+       ASFVOLT_LOG(ASFVOLT_ERROR, "object type is not present for clear");
        return BAL_ERRNO__BAL_ERR_INVALID_OP;
     }
 
@@ -396,7 +403,7 @@
        }*/
        default:
        {
-          ASFVOLT_LOG(ASFVOLT_ERROR, "Invalid objet type to handle clear\n");
+          ASFVOLT_LOG(ASFVOLT_ERROR, "Invalid object type to handle clear");
           err = BAL_ERRNO__BAL_ERR_INVALID_OP;
           break;
        }
@@ -420,7 +427,7 @@
 
     if(!key->hdr->has_obj_type)
     {
-       ASFVOLT_LOG(ASFVOLT_ERROR, "object type is not present for get\n");
+       ASFVOLT_LOG(ASFVOLT_ERROR, "object type is not present for get");
        return BAL_ERRNO__BAL_ERR_INVALID_OP;
     }
 
@@ -467,7 +474,7 @@
        }
        default:
        {
-          ASFVOLT_LOG(ASFVOLT_ERROR, "Invalid objet type to handle Get\n");
+          ASFVOLT_LOG(ASFVOLT_ERROR, "Invalid object type to handle Get");
           err = BAL_ERRNO__BAL_ERR_INVALID_OP;
           break;
        }
diff --git a/src/asfvolt16_driver.h b/src/asfvolt16_driver.h
index ab24309..76c99e3 100755
--- a/src/asfvolt16_driver.h
+++ b/src/asfvolt16_driver.h
@@ -26,11 +26,13 @@
 #include "bal_errno.grpc-c.h"
 #include "bal.grpc-c.h"
 
-#include <stdio.h>
+#include <syslog.h>
 
-#define ASFVOLT_ERROR 1
-#define ASFVOLT_INFO  2
-#define ASFVOLT_DEBUG 3
+#define ASFVOLT_ERROR (LOG_ERR)
+#define ASFVOLT_INFO  (LOG_INFO)
+#define ASFVOLT_DEBUG (LOG_DEBUG)
+#define ASFVOLT_SYSLOG_NAME "volthad"  /* syslog service name */
+
 #define ASFVOLT_MAX_PKT_SIZE 500
 #define ASFVOLT_MAX_DEVICE_ID_SIZE 50
 #define MAX_CHAR_LENGTH  20
@@ -41,19 +43,38 @@
 
 typedef struct BalCoreIpInfo
 {
-   char bal_core_arg1[4]; 
-   char bal_core_ip_port[24]; 
-   char bal_core_arg2[4]; 
-   char bal_shared_lib_ip_port[24]; 
+   char bal_core_arg1[4];
+   char bal_core_ip_port[24];
+   char bal_core_arg2[4];
+   char bal_shared_lib_ip_port[24];
 }balCoreIpInfo;
 
+#if 0 /* change to 1 to enable function/line to stdout w/syslog message*/
+#include <stdio.h>
+
+#define ASFVOLT_SYSLOG_MODE (LOG_CONS | LOG_PID | LOG_NDELAY)
+#define DEBUG_LOG(format, args...) \
+    printf(ASFVOLT_SYSLOG_NAME ": %s:%d: ", __FILE__, __LINE__); \
+    printf(format, ## args); \
+    putchar('\n');
+#else
+#define ASFVOLT_SYSLOG_MODE (           LOG_PID | LOG_NDELAY)
+#define DEBUG_LOG(format, args...)
+#endif
+
 #define ASFVOLT_LOG(log_type, format, args...) \
    if(log_type) \
    {\
-      printf("File(%s): Line(%d): ", __FUNCTION__, __LINE__);\
-      printf(format, ## args);\
+      syslog(log_type, "%s:%d: " format, __FILE__, __LINE__, ##args);\
+      DEBUG_LOG(format, ## args);\
    }
 
+#define ASFVOLT_LOG_LOC(log_type, file, line, format, args...) \
+   if(log_type) \
+   {\
+      syslog(log_type, "%s:%d: " format, file, line, ##args);\
+      DEBUG_LOG(format, ## args);\
+   }
 
 #define ASFVOLT_CFG_PROP_SET(cfg, obj, param, pram_prst, param_val) \
    if(pram_prst)\
@@ -61,11 +82,16 @@
        BCMBAL_CFG_PROP_SET(&cfg, obj, param, param_val);\
    }
 
+#define ASFVOLT_HEX2LOG(prio, pFormat, pData, len) \
+   asfvolt_hexlog2(prio, __FILE__, __LINE__, pFormat, pData, len)
+
+
 /***************************************************************
 *                                                              *
 *              Function Declarations                           *
 *                                                              *
 ****************************************************************/
+extern void asfvolt_hexlog2(int prio, const char *_file_loc, int _file_line, const char *pFormat, void* pData, size_t len);
 extern uint32_t asfvolt16_bal_init(BalInit *bal_init, balCoreIpInfo *coreInfo);
 extern uint32_t asfvolt16_bal_finish(void);
 extern uint32_t bal_register_indication_cbs(void);
diff --git a/src/bal_access_terminal_hdlr.c b/src/bal_access_terminal_hdlr.c
index c05e5cf..cebd418 100755
--- a/src/bal_access_terminal_hdlr.c
+++ b/src/bal_access_terminal_hdlr.c
@@ -36,7 +36,7 @@
 
     key.access_term_id = access_term_cfg->key->access_term_id;
 
-    ASFVOLT_LOG(ASFVOLT_DEBUG, "Configuration of OLT starts\n");
+    ASFVOLT_LOG(ASFVOLT_DEBUG, "Configuration of OLT starts");
 
     /* init the API struct */
     BCMBAL_CFG_INIT(&acc_term_obj, access_terminal, key);
@@ -48,11 +48,11 @@
 
     if(BCM_ERR_OK != err)
     {
-        ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to configure the access-terminal(OLT) to ADMIN-UP\n");
+        ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to configure the access-terminal(OLT) to ADMIN-UP");
         return BAL_ERRNO__BAL_ERR_INTERNAL;
     }
 
-    ASFVOLT_LOG(ASFVOLT_INFO, "Access Terminal UP configuration sent to OLT\n");
+    ASFVOLT_LOG(ASFVOLT_INFO, "Access Terminal UP configuration sent to OLT");
     return BAL_ERRNO__BAL_ERR_OK;
 }
 
@@ -65,10 +65,10 @@
 bcmos_errno bal_access_term_indication_cb(bcmbal_obj *obj)
 {
     /*bcmos_errno result = BCM_ERR_OK;*/
-    ASFVOLT_LOG(ASFVOLT_INFO, "Processing API \'%s\' IND callback (status is %s)\n",
+    ASFVOLT_LOG(ASFVOLT_INFO, "Processing API \'%s\' IND callback (status is %s)",
 		    bcmbal_objtype_str(obj->obj_type),
 		    bcmos_strerror(obj->status));
-    
+
     return BAL_ERRNO__BAL_ERR_OK;
 }
 
@@ -83,7 +83,7 @@
     bcmbal_access_terminal_cfg cfg_clear;         /**< declare main API struct */
     bcmbal_access_terminal_key key = { };   /**< declare key */
 
-    ASFVOLT_LOG(ASFVOLT_INFO, "processing the clear request on access terminal\n");
+    ASFVOLT_LOG(ASFVOLT_INFO, "processing the clear request on access terminal");
 
     key.access_term_id = access_term_key->access_term_id;
 
@@ -96,11 +96,11 @@
 
     if( err != BCM_ERR_OK)
     {
-       ASFVOLT_LOG(ASFVOLT_INFO, "Failed to clear the access terminal\n");
+       ASFVOLT_LOG(ASFVOLT_INFO, "Failed to clear the access terminal");
        return BAL_ERRNO__BAL_ERR_INTERNAL;
     }
 
-    ASFVOLT_LOG(ASFVOLT_INFO, "Successfully cleared the access terminal\n");
+    ASFVOLT_LOG(ASFVOLT_INFO, "Successfully cleared the access terminal");
     return BAL_ERRNO__BAL_ERR_OK;
 }
 
@@ -116,7 +116,7 @@
     bcmbal_access_terminal_cfg cfg;         /**< declare main API struct */
     bcmbal_access_terminal_key key = { };   /**< declare key */
 
-    ASFVOLT_LOG(ASFVOLT_INFO, "processing the get request on access terminal\n");
+    ASFVOLT_LOG(ASFVOLT_INFO, "processing the get request on access terminal");
     /* init the API struct */
     BCMBAL_CFG_INIT(&cfg, access_terminal, key);
 
@@ -126,12 +126,12 @@
     err = bcmbal_cfg_get(DEFAULT_ATERM_ID, &cfg.hdr);
     if (err != BCM_ERR_OK)
     {
-       ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to get access terminal configuration\n");
+       ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to get access terminal configuration");
        return BAL_ERRNO__BAL_ERR_INTERNAL;
     }
 
-    ASFVOLT_LOG(ASFVOLT_INFO, 
-                  "To-Do. Send access terminal details to Adapter\n");
-   
+    ASFVOLT_LOG(ASFVOLT_INFO,
+                  "To-Do. Send access terminal details to Adapter");
+
     return BAL_ERRNO__BAL_ERR_OK;
 }
diff --git a/src/bal_flow_hdlr.c b/src/bal_flow_hdlr.c
index 5a330b1..adaba1a 100755
--- a/src/bal_flow_hdlr.c
+++ b/src/bal_flow_hdlr.c
@@ -28,31 +28,31 @@
  * Description : copy queue information from proto structure to     *
  *               BAL structure                                      *
  ********************************************************************/
-static uint32_t bal_fill_queue_cfg(BalTmQueueRef       *tmp_que, 
+static uint32_t bal_fill_queue_cfg(BalTmQueueRef       *tmp_que,
                                    bcmbal_tm_queue_ref *que_val)
 {
    if(tmp_que->has_sched_id)
    {
-      que_val->sched_id = tmp_que->sched_id; 
-      ASFVOLT_LOG(ASFVOLT_DEBUG, "que_val->sched_id = %d\n", que_val->sched_id);
+      que_val->sched_id = tmp_que->sched_id;
+      ASFVOLT_LOG(ASFVOLT_DEBUG, "que_val->sched_id = %d", que_val->sched_id);
    }
 
    if(tmp_que->has_queue_id)
    {
       que_val->queue_id = tmp_que->queue_id;
-      ASFVOLT_LOG(ASFVOLT_DEBUG, "que_val->queue_id = %d\n", que_val->queue_id);
+      ASFVOLT_LOG(ASFVOLT_DEBUG, "que_val->queue_id = %d", que_val->queue_id);
    }
 
    return BAL_ERRNO__BAL_ERR_OK;
 }
-   
+
 
 /********************************************************************\
  * Function    : bal_fill_action_cfg                                *
  * Description : copy action information from proto structure to    *
  *               BAL structure                                      *
  ********************************************************************/
-static uint32_t bal_fill_action_cfg(BalAction     *tmp_action, 
+static uint32_t bal_fill_action_cfg(BalAction     *tmp_action,
                                     bcmbal_action *action_val)
 {
 
@@ -62,49 +62,49 @@
       if (action_val->presence_mask & BCMBAL_ACTION_ID_CMDS_BITMASK)
       {
          action_val->cmds_bitmask = tmp_action->cmds_bitmask;
-         ASFVOLT_LOG(ASFVOLT_DEBUG, "action_val->cmds_bitmask = %x\n", action_val->cmds_bitmask);
+         ASFVOLT_LOG(ASFVOLT_DEBUG, "action_val->cmds_bitmask = %x", action_val->cmds_bitmask);
       }
 
       if (action_val->presence_mask & BCMBAL_ACTION_ID_O_VID)
       {
          action_val->o_vid = tmp_action->o_vid;
-         ASFVOLT_LOG(ASFVOLT_DEBUG, "action_val->o_vid = %d\n",  action_val->o_vid);
+         ASFVOLT_LOG(ASFVOLT_DEBUG, "action_val->o_vid = %d",  action_val->o_vid);
       }
 
       if (action_val->presence_mask & BCMBAL_ACTION_ID_O_PBITS)
       {
          action_val->o_pbits = tmp_action->o_pbits;
-         ASFVOLT_LOG(ASFVOLT_DEBUG, "action_val->o_pbits = %d\n",  action_val->o_pbits);
+         ASFVOLT_LOG(ASFVOLT_DEBUG, "action_val->o_pbits = %d",  action_val->o_pbits);
       }
 
       if (action_val->presence_mask & BCMBAL_ACTION_ID_O_TPID)
       {
          action_val->o_tpid = tmp_action->o_tpid;
-         ASFVOLT_LOG(ASFVOLT_DEBUG, "action_val->o_tpid = %d\n",  action_val->o_tpid);
+         ASFVOLT_LOG(ASFVOLT_DEBUG, "action_val->o_tpid = %d",  action_val->o_tpid);
       }
 
       if (action_val->presence_mask & BCMBAL_ACTION_ID_I_VID)
       {
          action_val->i_vid = tmp_action->i_vid;
-         ASFVOLT_LOG(ASFVOLT_DEBUG, "action_val->i_vid = %d\n",  action_val->i_vid);
+         ASFVOLT_LOG(ASFVOLT_DEBUG, "action_val->i_vid = %d",  action_val->i_vid);
       }
 
       if (action_val->presence_mask & BCMBAL_ACTION_ID_I_PBITS)
       {
          action_val->i_pbits = tmp_action->i_pbits;
-         ASFVOLT_LOG(ASFVOLT_DEBUG, "action_val->i_pbits = %d\n",  action_val->i_pbits);
+         ASFVOLT_LOG(ASFVOLT_DEBUG, "action_val->i_pbits = %d",  action_val->i_pbits);
       }
 
       if (action_val->presence_mask & BCMBAL_ACTION_ID_I_TPID)
       {
          action_val->i_tpid = tmp_action->i_tpid;
-         ASFVOLT_LOG(ASFVOLT_DEBUG, "action_val->i_tpid = %d\n",  action_val->i_tpid);
+         ASFVOLT_LOG(ASFVOLT_DEBUG, "action_val->i_tpid = %d",  action_val->i_tpid);
       }
-      ASFVOLT_LOG(ASFVOLT_DEBUG, "action_val->presence_mask = %x\n",  action_val->presence_mask);
+      ASFVOLT_LOG(ASFVOLT_DEBUG, "action_val->presence_mask = %x",  action_val->presence_mask);
    }
    else
    {
-      ASFVOLT_LOG(ASFVOLT_ERROR, "Action is not present in the flow\n");
+      ASFVOLT_LOG(ASFVOLT_ERROR, "Action is not present in the flow");
       return BAL_ERRNO__BAL_ERR_PARM;
    }
 
@@ -117,7 +117,7 @@
  * Description : copy classifier information from proto structure to*
  *               BAL structure
  ********************************************************************/
-uint32_t bal_fill_classifier_cfg(BalClassifier     *tmp_classifier, 
+uint32_t bal_fill_classifier_cfg(BalClassifier     *tmp_classifier,
                                         bcmbal_classifier *classifier_val)
 {
 
@@ -127,57 +127,57 @@
       if (classifier_val->presence_mask  & BCMBAL_CLASSIFIER_ID_O_TPID)
       {
          classifier_val->o_tpid = tmp_classifier->o_tpid;
-         ASFVOLT_LOG(ASFVOLT_DEBUG, "classifier_val->o_tpid = %d\n",  classifier_val->o_tpid);
+         ASFVOLT_LOG(ASFVOLT_DEBUG, "classifier_val->o_tpid = %d",  classifier_val->o_tpid);
       }
 
       if (classifier_val->presence_mask & BCMBAL_CLASSIFIER_ID_O_VID)
       {
          classifier_val->o_vid = tmp_classifier->o_vid;
-         ASFVOLT_LOG(ASFVOLT_DEBUG, "classifier_val->o_vid = %d\n",  classifier_val->o_vid);
+         ASFVOLT_LOG(ASFVOLT_DEBUG, "classifier_val->o_vid = %d",  classifier_val->o_vid);
       }
 
       if (classifier_val->presence_mask & BCMBAL_CLASSIFIER_ID_I_TPID)
       {
          classifier_val->i_tpid = tmp_classifier->i_tpid;
-         ASFVOLT_LOG(ASFVOLT_DEBUG, "classifier_val->i_tpid = %d\n",  classifier_val->i_tpid);
+         ASFVOLT_LOG(ASFVOLT_DEBUG, "classifier_val->i_tpid = %d",  classifier_val->i_tpid);
       }
 
       if (classifier_val->presence_mask & BCMBAL_CLASSIFIER_ID_I_VID)
       {
          classifier_val->i_vid = tmp_classifier->i_vid;
-         ASFVOLT_LOG(ASFVOLT_DEBUG, "classifier_val->i_vid = %d\n",  classifier_val->i_vid);
+         ASFVOLT_LOG(ASFVOLT_DEBUG, "classifier_val->i_vid = %d",  classifier_val->i_vid);
       }
 
       if (classifier_val->presence_mask & BCMBAL_CLASSIFIER_ID_O_PBITS)
       {
          classifier_val->o_pbits = tmp_classifier->o_pbits;
-         ASFVOLT_LOG(ASFVOLT_DEBUG, "classifier_val->o_pbits = %d\n",  classifier_val->o_pbits);
+         ASFVOLT_LOG(ASFVOLT_DEBUG, "classifier_val->o_pbits = %d",  classifier_val->o_pbits);
       }
 
       if (classifier_val->presence_mask & BCMBAL_CLASSIFIER_ID_I_PBITS)
       {
          classifier_val->i_pbits = tmp_classifier->i_pbits;
-         ASFVOLT_LOG(ASFVOLT_DEBUG, "classifier_val->i_pbits = %d\n",  classifier_val->i_pbits);
+         ASFVOLT_LOG(ASFVOLT_DEBUG, "classifier_val->i_pbits = %d",  classifier_val->i_pbits);
       }
 
       if (classifier_val->presence_mask & BCMBAL_CLASSIFIER_ID_ETHER_TYPE)
       {
          classifier_val->ether_type = tmp_classifier->ether_type;
-         ASFVOLT_LOG(ASFVOLT_DEBUG, "classifier_val->ether_type = %x\n",  classifier_val->ether_type);
+         ASFVOLT_LOG(ASFVOLT_DEBUG, "classifier_val->ether_type = %x",  classifier_val->ether_type);
       }
 
       if (classifier_val->presence_mask & BCMBAL_CLASSIFIER_ID_DST_MAC)
       {
          if(tmp_classifier->dst_mac.len > BCMOS_ETH_ALEN)
          {
-            memcpy(classifier_val->dst_mac.u8, 
+            memcpy(classifier_val->dst_mac.u8,
                    tmp_classifier->dst_mac.data, tmp_classifier->dst_mac.len);
-            /*ASFVOLT_LOG(ASFVOLT_DEBUG, "classifier_val->dst_mac= %d\n",  classifier_val->dst_mac);*/
+            /*ASFVOLT_LOG(ASFVOLT_DEBUG, "classifier_val->dst_mac= %d",  classifier_val->dst_mac);*/
          }
          else
          {
             ASFVOLT_LOG(ASFVOLT_ERROR, "dst_mac should not be more than 6 bytes."
-                                        "actual bytes %lud\n",  tmp_classifier->dst_mac.len);
+                                        "actual bytes %lu",  tmp_classifier->dst_mac.len);
             return BAL_ERRNO__BAL_ERR_PARM;
          }
       }
@@ -186,14 +186,14 @@
       {
          if(tmp_classifier->src_mac.len > BCMOS_ETH_ALEN)
          {
-            memcpy(classifier_val->src_mac.u8, 
+            memcpy(classifier_val->src_mac.u8,
                    tmp_classifier->src_mac.data, tmp_classifier->src_mac.len);
-            /*ASFVOLT_LOG(ASFVOLT_DEBUG, "classifier_val->src_mac= %x\n",  classifier_val->src_mac);*/
+            /*ASFVOLT_LOG(ASFVOLT_DEBUG, "classifier_val->src_mac= %x",  classifier_val->src_mac);*/
          }
          else
          {
             ASFVOLT_LOG(ASFVOLT_ERROR, "src_mac should not be more than 6 bytes."
-                                        "actual bytes %lud\n",  tmp_classifier->src_mac.len);
+                                        "actual bytes %lu",  tmp_classifier->src_mac.len);
             return BAL_ERRNO__BAL_ERR_PARM;
          }
 
@@ -202,44 +202,44 @@
       if (classifier_val->presence_mask & BCMBAL_CLASSIFIER_ID_IP_PROTO)
       {
          classifier_val->ip_proto  = tmp_classifier->ip_proto;
-         ASFVOLT_LOG(ASFVOLT_DEBUG, "classifier_val->ip_proto = %x\n",  classifier_val->ip_proto);
+         ASFVOLT_LOG(ASFVOLT_DEBUG, "classifier_val->ip_proto = %x",  classifier_val->ip_proto);
       }
 
       if (classifier_val->presence_mask & BCMBAL_CLASSIFIER_ID_DST_IP)
       {
          classifier_val->dst_ip.u32 = tmp_classifier->dst_ip;
-         ASFVOLT_LOG(ASFVOLT_DEBUG, "classifier_val->dst_ip = %x\n",  classifier_val->dst_ip.u32);
+         ASFVOLT_LOG(ASFVOLT_DEBUG, "classifier_val->dst_ip = %x",  classifier_val->dst_ip.u32);
       }
 
       if (classifier_val->presence_mask & BCMBAL_CLASSIFIER_ID_SRC_IP)
       {
          classifier_val->src_ip.u32 = tmp_classifier->src_ip;
-         ASFVOLT_LOG(ASFVOLT_DEBUG, "classifier_val->src_ip = %x\n",  classifier_val->src_ip.u32);
+         ASFVOLT_LOG(ASFVOLT_DEBUG, "classifier_val->src_ip = %x",  classifier_val->src_ip.u32);
       }
 
       if (classifier_val->presence_mask & BCMBAL_CLASSIFIER_ID_SRC_PORT)
       {
          classifier_val->src_port = tmp_classifier->src_port;
-         ASFVOLT_LOG(ASFVOLT_DEBUG, "classifier_val->src_port = %d\n",  classifier_val->src_port);
+         ASFVOLT_LOG(ASFVOLT_DEBUG, "classifier_val->src_port = %d",  classifier_val->src_port);
       }
 
       if (classifier_val->presence_mask & BCMBAL_CLASSIFIER_ID_DST_PORT)
       {
          classifier_val->dst_port = tmp_classifier->dst_port;
-         ASFVOLT_LOG(ASFVOLT_DEBUG, "classifier_val->dst_port = %d\n",  classifier_val->dst_port);
+         ASFVOLT_LOG(ASFVOLT_DEBUG, "classifier_val->dst_port = %d",  classifier_val->dst_port);
       }
 
       if (classifier_val->presence_mask & BCMBAL_CLASSIFIER_ID_PKT_TAG_TYPE)
       {
          classifier_val->pkt_tag_type = tmp_classifier->pkt_tag_type;
-         ASFVOLT_LOG(ASFVOLT_DEBUG, "classifier_val->pkt_tag_type = %x\n",  classifier_val->pkt_tag_type);
+         ASFVOLT_LOG(ASFVOLT_DEBUG, "classifier_val->pkt_tag_type = %x",  classifier_val->pkt_tag_type);
       }
 
-      ASFVOLT_LOG(ASFVOLT_DEBUG, "classifier_val->presence_mask = %x\n",  classifier_val->presence_mask);
+      ASFVOLT_LOG(ASFVOLT_DEBUG, "classifier_val->presence_mask = %x",  classifier_val->presence_mask);
    }
    else
    {
-      ASFVOLT_LOG(ASFVOLT_ERROR, "Classifier is not present in the flow\n");
+      ASFVOLT_LOG(ASFVOLT_ERROR, "Classifier is not present in the flow");
       return BAL_ERRNO__BAL_ERR_PARM;
    }
 
@@ -268,23 +268,23 @@
    }
    else
    {
-      ASFVOLT_LOG(ASFVOLT_ERROR, "Invalid Flow Id (%d)\n", flow_cfg->key->flow_id);
+      ASFVOLT_LOG(ASFVOLT_ERROR, "Invalid Flow Id (%d)", flow_cfg->key->flow_id);
       return BAL_ERRNO__BAL_ERR_PARM;
    }
 
 
-   ASFVOLT_LOG(ASFVOLT_INFO, "Adding the flow to OLT. FlowID(%d)\n", flow_cfg->key->flow_id);
+   ASFVOLT_LOG(ASFVOLT_INFO, "Adding the flow to OLT. FlowID(%d)", flow_cfg->key->flow_id);
 
-   if (!flow_cfg->key->has_flow_type && 
-         ((flow_cfg->key->flow_type < BAL_FLOW_TYPE__BAL_FLOW_TYPE_UPSTREAM) || 
+   if (!flow_cfg->key->has_flow_type &&
+         ((flow_cfg->key->flow_type < BAL_FLOW_TYPE__BAL_FLOW_TYPE_UPSTREAM) ||
          flow_cfg->key->flow_type > BAL_FLOW_TYPE__BAL_FLOW_TYPE_MULTICAST ))
    {
-      ASFVOLT_LOG(ASFVOLT_ERROR, "Flow type is not supported (%d)\n", flow_cfg->key->flow_type);
+      ASFVOLT_LOG(ASFVOLT_ERROR, "Flow type is not supported (%d)", flow_cfg->key->flow_type);
       return BAL_ERRNO__BAL_ERR_PARM;
    }
    else
    {
-      ASFVOLT_LOG(ASFVOLT_DEBUG, "flow_type = %d\n",  flow_cfg->key->flow_type);
+      ASFVOLT_LOG(ASFVOLT_DEBUG, "flow_type = %d",  flow_cfg->key->flow_type);
       key.flow_type = (bcmbal_flow_type) flow_cfg->key->flow_type;
    }
 
@@ -293,69 +293,69 @@
 
    /* decode API parameters from grpc-c */
    /* Admin State */
-   ASFVOLT_CFG_PROP_SET(cfg, flow, admin_state, 
-                        flow_cfg->data->has_admin_state, 
+   ASFVOLT_CFG_PROP_SET(cfg, flow, admin_state,
+                        flow_cfg->data->has_admin_state,
                         flow_cfg->data->admin_state);
-   ASFVOLT_LOG(ASFVOLT_DEBUG, "admin state = %d\n",  flow_cfg->data->admin_state);
+   ASFVOLT_LOG(ASFVOLT_DEBUG, "admin state = %d",  flow_cfg->data->admin_state);
 
    /* Operational status */
-   ASFVOLT_CFG_PROP_SET(cfg, flow, oper_status, 
-                        flow_cfg->data->has_oper_status, 
+   ASFVOLT_CFG_PROP_SET(cfg, flow, oper_status,
+                        flow_cfg->data->has_oper_status,
                         flow_cfg->data->oper_status);
-   ASFVOLT_LOG(ASFVOLT_DEBUG, "Oper. status = %d\n",  flow_cfg->data->oper_status);
+   ASFVOLT_LOG(ASFVOLT_DEBUG, "Oper. status = %d",  flow_cfg->data->oper_status);
 
    /* Access Side interface ID */
-   ASFVOLT_CFG_PROP_SET(cfg, flow, access_int_id, 
-                        BCMOS_TRUE, 
+   ASFVOLT_CFG_PROP_SET(cfg, flow, access_int_id,
+                        BCMOS_TRUE,
                         flow_cfg->data->access_int_id);
-   ASFVOLT_LOG(ASFVOLT_DEBUG, "access_int_id = %d\n",  flow_cfg->data->access_int_id);
+   ASFVOLT_LOG(ASFVOLT_DEBUG, "access_int_id = %d",  flow_cfg->data->access_int_id);
 
    /* Network interface ID */
-   ASFVOLT_CFG_PROP_SET(cfg, flow, network_int_id, 
+   ASFVOLT_CFG_PROP_SET(cfg, flow, network_int_id,
                         BCMOS_TRUE,
                         flow_cfg->data->network_int_id);
-   ASFVOLT_LOG(ASFVOLT_DEBUG, "network_int_id = %d\n",  flow_cfg->data->network_int_id);
+   ASFVOLT_LOG(ASFVOLT_DEBUG, "network_int_id = %d",  flow_cfg->data->network_int_id);
 
    /* ONU ID */
    if(BAL_FLOW_TYPE__BAL_FLOW_TYPE_MULTICAST != flow_cfg->key->flow_type)
    {
-      ASFVOLT_CFG_PROP_SET(cfg, flow, sub_term_id, 
-                           flow_cfg->data->has_sub_term_id, 
+      ASFVOLT_CFG_PROP_SET(cfg, flow, sub_term_id,
+                           flow_cfg->data->has_sub_term_id,
                            flow_cfg->data->sub_term_id);
-      ASFVOLT_LOG(ASFVOLT_DEBUG, "sub_term_id = %d\n",  flow_cfg->data->sub_term_id);
+      ASFVOLT_LOG(ASFVOLT_DEBUG, "sub_term_id = %d",  flow_cfg->data->sub_term_id);
    }
    else if (BAL_FLOW_TYPE__BAL_FLOW_TYPE_MULTICAST == flow_cfg->key->flow_type)
    {
       /* In case of Multicast the flow belongs to particular group */
-      ASFVOLT_CFG_PROP_SET(cfg, flow, group_id, 
-                            flow_cfg->data->has_group_id, 
+      ASFVOLT_CFG_PROP_SET(cfg, flow, group_id,
+                            flow_cfg->data->has_group_id,
                             flow_cfg->data->group_id);
-      ASFVOLT_LOG(ASFVOLT_DEBUG, "group_id = %d\n",  flow_cfg->data->group_id);
+      ASFVOLT_LOG(ASFVOLT_DEBUG, "group_id = %d",  flow_cfg->data->group_id);
    }
 
    /*Subscriber Terminal UNI index*/
-   ASFVOLT_CFG_PROP_SET(cfg, flow, sub_term_uni_idx, 
-                         flow_cfg->data->has_sub_term_uni_idx, 
+   ASFVOLT_CFG_PROP_SET(cfg, flow, sub_term_uni_idx,
+                         flow_cfg->data->has_sub_term_uni_idx,
                          flow_cfg->data->sub_term_uni_idx);
-   ASFVOLT_LOG(ASFVOLT_DEBUG, "sub_term_uni_idx = %d\n",  flow_cfg->data->sub_term_uni_idx);
+   ASFVOLT_LOG(ASFVOLT_DEBUG, "sub_term_uni_idx = %d",  flow_cfg->data->sub_term_uni_idx);
 
    /*Resolve MAC*/
-   ASFVOLT_CFG_PROP_SET(cfg, flow, resolve_mac, 
-                         flow_cfg->data->has_resolve_mac, 
+   ASFVOLT_CFG_PROP_SET(cfg, flow, resolve_mac,
+                         flow_cfg->data->has_resolve_mac,
                          flow_cfg->data->resolve_mac);
-   ASFVOLT_LOG(ASFVOLT_DEBUG, "resolve_mac = %d\n",  flow_cfg->data->resolve_mac);
+   ASFVOLT_LOG(ASFVOLT_DEBUG, "resolve_mac = %d",  flow_cfg->data->resolve_mac);
 
    /*Gem port*/
-   ASFVOLT_CFG_PROP_SET(cfg, flow, svc_port_id, 
-                         flow_cfg->data->has_svc_port_id, 
+   ASFVOLT_CFG_PROP_SET(cfg, flow, svc_port_id,
+                         flow_cfg->data->has_svc_port_id,
                          flow_cfg->data->svc_port_id);
-   ASFVOLT_LOG(ASFVOLT_DEBUG, "svc_port_id = %d\n",  flow_cfg->data->svc_port_id);
+   ASFVOLT_LOG(ASFVOLT_DEBUG, "svc_port_id = %d",  flow_cfg->data->svc_port_id);
 
    /*priority*/
-   ASFVOLT_CFG_PROP_SET(cfg, flow, priority, 
-                        flow_cfg->data->has_priority, 
+   ASFVOLT_CFG_PROP_SET(cfg, flow, priority,
+                        flow_cfg->data->has_priority,
                         flow_cfg->data->priority);
-   ASFVOLT_LOG(ASFVOLT_DEBUG, "priority = %d\n",flow_cfg->data->priority);
+   ASFVOLT_LOG(ASFVOLT_DEBUG, "priority = %d",flow_cfg->data->priority);
 
    BalClassifier *tmp_classifier = (BalClassifier*)(flow_cfg->data->classifier);
 
@@ -365,8 +365,8 @@
 
       if(bal_err != BAL_ERRNO__BAL_ERR_OK)
       {
-         ASFVOLT_LOG(ASFVOLT_ERROR, 
-               "Addition of flow %d failed while processing classifier\n",
+         ASFVOLT_LOG(ASFVOLT_ERROR,
+               "Addition of flow %d failed while processing classifier",
                flow_cfg->key->flow_id);
          return bal_err;
       }
@@ -375,7 +375,7 @@
    }
    else
    {
-      ASFVOLT_LOG(ASFVOLT_DEBUG, "No Classifier for flow\n");
+      ASFVOLT_LOG(ASFVOLT_DEBUG, "No Classifier for flow");
    }
 
    BalAction *tmp_action = (BalAction*)(flow_cfg->data->action);
@@ -386,8 +386,8 @@
 
       if(bal_err != BAL_ERRNO__BAL_ERR_OK)
       {
-         ASFVOLT_LOG(ASFVOLT_ERROR, 
-               "Addition of flow %d failed while processing action\n",
+         ASFVOLT_LOG(ASFVOLT_ERROR,
+               "Addition of flow %d failed while processing action",
                flow_cfg->key->flow_id);
          return bal_err;
       }
@@ -395,14 +395,14 @@
    }
    else
    {
-      ASFVOLT_LOG(ASFVOLT_DEBUG, "No Action for flow\n");
+      ASFVOLT_LOG(ASFVOLT_DEBUG, "No Action for flow");
    }
 
    /*cookie*/
-   ASFVOLT_CFG_PROP_SET(cfg, flow, cookie, 
-                        flow_cfg->data->has_cookie, 
+   ASFVOLT_CFG_PROP_SET(cfg, flow, cookie,
+                        flow_cfg->data->has_cookie,
                         flow_cfg->data->cookie);
-   ASFVOLT_LOG(ASFVOLT_DEBUG, "priority = %lx\n",flow_cfg->data->cookie);
+   ASFVOLT_LOG(ASFVOLT_DEBUG, "priority = %lx",flow_cfg->data->cookie);
 
    /*Egress queue*/
    BalTmQueueRef *tmp_que = (BalTmQueueRef*)(flow_cfg->data->queue);
@@ -413,8 +413,8 @@
 
       if(bal_err != BAL_ERRNO__BAL_ERR_OK)
       {
-         ASFVOLT_LOG(ASFVOLT_ERROR, 
-               "Addition of flow %d failed while processing queue\n",
+         ASFVOLT_LOG(ASFVOLT_ERROR,
+               "Addition of flow %d failed while processing queue",
                flow_cfg->key->flow_id);
          return bal_err;
       }
@@ -425,16 +425,16 @@
       ASFVOLT_LOG(ASFVOLT_DEBUG, "No queue Information for flow");
    }
    /*dba_tm_sched_id*/
-   ASFVOLT_CFG_PROP_SET(cfg, flow, dba_tm_sched_id, 
-                        flow_cfg->data->has_dba_tm_sched_id, 
+   ASFVOLT_CFG_PROP_SET(cfg, flow, dba_tm_sched_id,
+                        flow_cfg->data->has_dba_tm_sched_id,
                         flow_cfg->data->dba_tm_sched_id);
-   ASFVOLT_LOG(ASFVOLT_DEBUG, "tm_sched used for dba = %d\n",flow_cfg->data->dba_tm_sched_id);
+   ASFVOLT_LOG(ASFVOLT_DEBUG, "tm_sched used for dba = %d",flow_cfg->data->dba_tm_sched_id);
 
    err = bcmbal_cfg_set(DEFAULT_ATERM_ID, &cfg.hdr);
    if(err != BCM_ERR_OK)
    {
-        ASFVOLT_LOG(ASFVOLT_ERROR, 
-              "Failed to configure the flow. FlowId(%d)\n", key.flow_id);
+        ASFVOLT_LOG(ASFVOLT_ERROR,
+              "Failed to configure the flow. FlowId(%d)", key.flow_id);
         return BAL_ERRNO__BAL_ERR_INTERNAL;
    }
    return BAL_ERRNO__BAL_ERR_OK;
@@ -443,7 +443,7 @@
 
 /********************************************************************\
  * Function    : bal_flow_cfg_clear                                 *
- * Description : Deletes/Clears the OLT DEVICE with flow 
+ * Description : Deletes/Clears the OLT DEVICE with flow            *
  *               information using BAL Apis                         *
  ********************************************************************/
 uint32_t bal_flow_cfg_clear(BalFlowKey *flow_key)
@@ -459,13 +459,13 @@
    }
    else
    {
-      ASFVOLT_LOG(ASFVOLT_DEBUG, "Invalid Flow Parameters to clear FlowId(%d), FlowType(%d)\n", 
+      ASFVOLT_LOG(ASFVOLT_DEBUG, "Invalid Flow Parameters to clear FlowId(%d), FlowType(%d)",
                                   key.flow_id, key.flow_type);
       return BAL_ERRNO__BAL_ERR_PARM;
    }
 
-   ASFVOLT_LOG(ASFVOLT_DEBUG, "FlowId(%d), FlowType(%d)\n", key.flow_id, key.flow_type);
- 
+   ASFVOLT_LOG(ASFVOLT_DEBUG, "FlowId(%d), FlowType(%d)", key.flow_id, key.flow_type);
+
    /* init the API struct */
    BCMBAL_CFG_INIT(&cfg, flow, key);
 
@@ -473,13 +473,13 @@
    err = bcmbal_cfg_clear(DEFAULT_ATERM_ID, &cfg.hdr);
    if( err != BCM_ERR_OK)
    {
-      ASFVOLT_LOG(ASFVOLT_INFO, 
-          "Failed to clear the Flow. FlowID(%d) FlowType(%d)\n", 
+      ASFVOLT_LOG(ASFVOLT_INFO,
+          "Failed to clear the Flow. FlowID(%d) FlowType(%d)",
                   key.flow_id, key.flow_type);
       return BAL_ERRNO__BAL_ERR_INTERNAL;
    }
    return BAL_ERRNO__BAL_ERR_OK;
-} 
+}
 
 
 /********************************************************************\
@@ -500,7 +500,7 @@
    }
    else
    {
-      ASFVOLT_LOG(ASFVOLT_DEBUG, "Invalid Flow Parameters to get cfg FlowId(%d), FlowType(%d)\n", 
+      ASFVOLT_LOG(ASFVOLT_DEBUG, "Invalid Flow Parameters to get cfg FlowId(%d), FlowType(%d)",
                                   key.flow_id, key.flow_type);
       return BAL_ERRNO__BAL_ERR_PARM;
    }
@@ -514,14 +514,14 @@
    err = bcmbal_cfg_get(DEFAULT_ATERM_ID, &cfg.hdr);
    if( err != BCM_ERR_OK)
    {
-      ASFVOLT_LOG(ASFVOLT_INFO, 
-            "Failed to get Flow Info. FlowID(%d) FlowType(%d)\n", 
+      ASFVOLT_LOG(ASFVOLT_INFO,
+            "Failed to get Flow Info. FlowID(%d) FlowType(%d)",
             key.flow_id, key.flow_type);
       return BAL_ERRNO__BAL_ERR_INTERNAL;
    }
 
-   ASFVOLT_LOG(ASFVOLT_INFO, 
-                  "To-Do. Send Flow details to Adapter\n");
+   ASFVOLT_LOG(ASFVOLT_INFO,
+                  "To-Do. Send Flow details to Adapter");
 
    return BAL_ERRNO__BAL_ERR_OK;
-} 
+}
diff --git a/src/bal_group_hdlr.c b/src/bal_group_hdlr.c
index 5c05425..c00b1a3 100755
--- a/src/bal_group_hdlr.c
+++ b/src/bal_group_hdlr.c
@@ -42,11 +42,11 @@
     }
     else
     {
-       ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to configure the group cfg(OLT): Group Id was not present \n");
+       ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to configure the group cfg(OLT): Group Id was not present");
        return BAL_ERRNO__BAL_ERR_NOENT;
     }
 
-    ASFVOLT_LOG(ASFVOLT_DEBUG, "Configuration of OLT(group cfg) starts\n");
+    ASFVOLT_LOG(ASFVOLT_DEBUG, "Configuration of OLT(group cfg) starts");
 
     /* init the API struct */
     BCMBAL_CFG_INIT(&grp_cfg_obj, group, key);
@@ -54,15 +54,15 @@
     /* decode API parameters from GRPC */
     if(tm_group_cfg->data->has_members_cmd)
     {
-        ASFVOLT_CFG_PROP_SET(grp_cfg_obj, group, members_cmd, 
-                             tm_group_cfg->data->has_members_cmd, 
+        ASFVOLT_CFG_PROP_SET(grp_cfg_obj, group, members_cmd,
+                             tm_group_cfg->data->has_members_cmd,
                              tm_group_cfg->data->members_cmd);
     }
 
     if(tm_group_cfg->data->has_cookie)
     {
-        ASFVOLT_CFG_PROP_SET(grp_cfg_obj, group, cookie, 
-                             tm_group_cfg->data->has_cookie, 
+        ASFVOLT_CFG_PROP_SET(grp_cfg_obj, group, cookie,
+                             tm_group_cfg->data->has_cookie,
                              tm_group_cfg->data->cookie);
     }
 
@@ -73,31 +73,31 @@
     valFlows.val = (bcmbal_flow_id *)malloc((valFlows.len)*sizeof(bcmbal_flow_id));
     if(!valFlows.val)
     {
-       ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to configure the group cfg(OLT): Memory Exhausted\n");
+       ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to configure the group cfg(OLT): Memory Exhausted");
        return BAL_ERRNO__BAL_ERR_NOMEM;
     }
-    memcpy((void *)valFlows.val, (const void *)balFlows->val, 
+    memcpy((void *)valFlows.val, (const void *)balFlows->val,
            (balFlows->n_val)*sizeof(bcmbal_flow_id));
-    ASFVOLT_CFG_PROP_SET(grp_cfg_obj, group, flows, BCMOS_TRUE, valFlows); 
+    ASFVOLT_CFG_PROP_SET(grp_cfg_obj, group, flows, BCMOS_TRUE, valFlows);
 
     if(tm_group_cfg->data->has_owner)
     {
-        ASFVOLT_CFG_PROP_SET(grp_cfg_obj, group, owner, 
-                             tm_group_cfg->data->has_owner, 
+        ASFVOLT_CFG_PROP_SET(grp_cfg_obj, group, owner,
+                             tm_group_cfg->data->has_owner,
                              tm_group_cfg->data->owner);
     }
 
-    BalGroupMemberInfoList *balMembers = 
+    BalGroupMemberInfoList *balMembers =
               (BalGroupMemberInfoList *)tm_group_cfg->data->members;
     bcmbal_group_member_info_list_u16 valMembers = {};
     /*if(balMembers->has_len)*/
     {
        valMembers.len = balMembers->n_val;
-       valMembers.val = 
+       valMembers.val =
         (bcmbal_group_member_info *)malloc((valMembers.len)*sizeof(bcmbal_group_member_info));
        if(!valMembers.val)
        {
-          ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to configure the group cfg(OLT): Memory Exhausted\n");
+          ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to configure the group cfg(OLT): Memory Exhausted");
           return BAL_ERRNO__BAL_ERR_NOMEM;
        }
        //check
@@ -106,17 +106,17 @@
        {
           if(balMembers->val[grp_mem_idx]->has_intf_id)
           {
-             valMembers.val[grp_mem_idx].intf_id 
+             valMembers.val[grp_mem_idx].intf_id
                                   = balMembers->val[grp_mem_idx]->intf_id;
           }
           if(balMembers->val[grp_mem_idx]->has_svc_port_id)
           {
-             valMembers.val[grp_mem_idx].svc_port_id 
+             valMembers.val[grp_mem_idx].svc_port_id
                                = balMembers->val[grp_mem_idx]->svc_port_id;
           }
           if(balMembers->val[grp_mem_idx]->action->has_presence_mask)
           {
-             valMembers.val[grp_mem_idx].action.presence_mask 
+             valMembers.val[grp_mem_idx].action.presence_mask
                      = balMembers->val[grp_mem_idx]->action->presence_mask;
           }
           if(balMembers->val[grp_mem_idx]->action->has_cmds_bitmask)
@@ -165,18 +165,18 @@
                      = balMembers->val[grp_mem_idx]->queue->queue_id;
           }
        }
-       ASFVOLT_CFG_PROP_SET(grp_cfg_obj, group, members, BCMOS_TRUE, valMembers); 
+       ASFVOLT_CFG_PROP_SET(grp_cfg_obj, group, members, BCMOS_TRUE, valMembers);
     }
 
     err = bcmbal_cfg_set(DEFAULT_ATERM_ID, &(grp_cfg_obj.hdr));
 
     if(BCM_ERR_OK != err)
     {
-        ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to configure the group cfg(OLT)\n");
+        ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to configure the group cfg(OLT)");
         return err;
     }
 
-    ASFVOLT_LOG(ASFVOLT_INFO, "\nSet Group configuration sent to OLT for Group Id(%d)\n", 
+    ASFVOLT_LOG(ASFVOLT_INFO, "Set Group configuration sent to OLT for Group Id(%d)",
                                key.group_id);
     return err;
 }
@@ -187,7 +187,7 @@
  * Description : get the OLT device group cfg                    *
  ********************************************************************/
 
-uint32_t bal_group_cfg_get(BalGroupKey *tm_group_cfg_key, 
+uint32_t bal_group_cfg_get(BalGroupKey *tm_group_cfg_key,
                            BalGroupCfg *tm_group_cfg)
 {
     bcmos_errno err = BCM_ERR_OK;
@@ -200,11 +200,11 @@
     }
     else
     {
-       ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to get the group cfg(OLT): Group Id was not present\n");
+       ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to get the group cfg(OLT): Group Id was not present");
        return BAL_ERRNO__BAL_ERR_NOENT;
     }
 
-    ASFVOLT_LOG(ASFVOLT_DEBUG, "Get group cfg(for OLT) starts\n");
+    ASFVOLT_LOG(ASFVOLT_DEBUG, "Get group cfg(for OLT) starts");
 
     /* init the API struct */
     BCMBAL_CFG_INIT(&grp_cfg_obj, group, key);
@@ -216,11 +216,11 @@
 
     if(BCM_ERR_OK != err)
     {
-        ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to get the group Cfg(OLT)\n");
+        ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to get the group Cfg(OLT)");
         return err;
     }
 
-    ASFVOLT_LOG(ASFVOLT_INFO, "\nGet Group cfg sent to OLT for Group Id(%d)\n", 
+    ASFVOLT_LOG(ASFVOLT_INFO, "Get Group cfg sent to OLT for Group Id(%d)",
                                key.group_id);
     return err;
 }
@@ -242,11 +242,11 @@
     }
     else
     {
-       ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to clear the group cfg(OLT): Group Id was not present\n");
+       ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to clear the group cfg(OLT): Group Id was not present");
        return BAL_ERRNO__BAL_ERR_NOENT;
     }
 
-    ASFVOLT_LOG(ASFVOLT_DEBUG, "Clearing of OLT(group cfg) starts\n");
+    ASFVOLT_LOG(ASFVOLT_DEBUG, "Clearing of OLT(group cfg) starts");
 
     /* init the API struct */
     BCMBAL_CFG_INIT(&grp_cfg_obj, group, key);
@@ -255,11 +255,11 @@
 
     if(BCM_ERR_OK != err)
     {
-        ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to clear the group Cfg(OLT)\n");
+        ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to clear the group Cfg(OLT)");
         return err;
     }
 
-    ASFVOLT_LOG(ASFVOLT_INFO, "\nClear Group cfg clear sent to OLT for Group Id(%d) \n", 
+    ASFVOLT_LOG(ASFVOLT_INFO, "Clear Group cfg clear sent to OLT for Group Id(%d)",
                                key.group_id);
     return err;
 }
@@ -272,11 +272,9 @@
 bcmos_errno bal_group_cfg_indication_cb(bcmbal_obj *obj)
 {
     bcmos_errno result = BCM_ERR_OK;
-    ASFVOLT_LOG(ASFVOLT_INFO, "Processing API ('%s)\n' IND callback status is (%s)\n",
+    ASFVOLT_LOG(ASFVOLT_INFO, "Processing API ('%s)' IND callback status is (%s)",
 		    bcmbal_objtype_str(obj->obj_type),
 		    bcmos_strerror(obj->status));
-    
+
     return result;
 }
-
-
diff --git a/src/bal_indications_hdlr.c b/src/bal_indications_hdlr.c
index 8066d18..312c5a6 100755
--- a/src/bal_indications_hdlr.c
+++ b/src/bal_indications_hdlr.c
@@ -36,13 +36,13 @@
    if(BCMBAL_OBJ_ID_ACCESS_TERMINAL != obj->obj_type ||
       bcmbal_access_terminal_auto_id_ind != obj->subgroup)
    {
-      ASFVOLT_LOG(ASFVOLT_ERROR, "Processing BAL API \'%s\' IND callback (status is %s)\n",
+      ASFVOLT_LOG(ASFVOLT_ERROR, "Processing BAL API '%s' IND callback (status is %s)",
 				  bcmbal_objtype_str(obj->obj_type), bcmos_strerror(obj->status));
       result = BCM_ERR_INTERNAL;
    }
    else
    {
-      ASFVOLT_LOG(ASFVOLT_DEBUG, "Processing BAL API \'%s\' IND callback (status is %s)\n",
+      ASFVOLT_LOG(ASFVOLT_DEBUG, "Processing BAL API '%s' IND callback (status is %s)",
 				  bcmbal_objtype_str(obj->obj_type), bcmos_strerror(obj->status));
       BalIndications *balIndCfg;
       balIndCfg = malloc(sizeof(BalIndications));
@@ -165,7 +165,7 @@
    if(BCMBAL_OBJ_ID_ACCESS_TERMINAL != obj->obj_type ||
       bcmbal_access_terminal_auto_id_oper_status_change != obj->subgroup)
    {
-      ASFVOLT_LOG(ASFVOLT_ERROR, "Processing BAL API \'%s\' IND callback (status is %s)\n",
+      ASFVOLT_LOG(ASFVOLT_ERROR, "Processing BAL API '%s' IND callback (status is %s)",
 				  bcmbal_objtype_str(obj->obj_type), bcmos_strerror(obj->status));
       result = BCM_ERR_INTERNAL;
    }
@@ -245,7 +245,7 @@
    if(BCMBAL_OBJ_ID_FLOW != obj->obj_type ||
       bcmbal_flow_auto_id_oper_status_change != obj->subgroup)
    {
-      ASFVOLT_LOG(ASFVOLT_ERROR, "Processing BAL API \'%s\' IND callback (status is %s)\n",
+      ASFVOLT_LOG(ASFVOLT_ERROR, "Processing BAL API '%s' IND callback (status is %s)",
 				  bcmbal_objtype_str(obj->obj_type), bcmos_strerror(obj->status));
       result = BCM_ERR_INTERNAL;
    }
@@ -330,7 +330,7 @@
    if(BCMBAL_OBJ_ID_FLOW != obj->obj_type ||
       bcmbal_flow_auto_id_ind != obj->subgroup)
    {
-      ASFVOLT_LOG(ASFVOLT_ERROR, "Processing BAL API \'%s\' IND callback (status is %s)\n",
+      ASFVOLT_LOG(ASFVOLT_ERROR, "Processing BAL API '%s' IND callback (status is %s)",
 				  bcmbal_objtype_str(obj->obj_type), bcmos_strerror(obj->status));
       result = BCM_ERR_INTERNAL;
    }
@@ -496,7 +496,7 @@
    if(BCMBAL_OBJ_ID_GROUP != obj->obj_type ||
       bcmbal_group_auto_id_ind != obj->subgroup)
    {
-      ASFVOLT_LOG(ASFVOLT_ERROR, "Processing BAL API \'%s\' IND callback (status is %s)\n",
+      ASFVOLT_LOG(ASFVOLT_ERROR, "Processing BAL API '%s' IND callback (status is %s)",
 				  bcmbal_objtype_str(obj->obj_type), bcmos_strerror(obj->status));
       result = BCM_ERR_INTERNAL;
    }
@@ -643,7 +643,7 @@
    if(BCMBAL_OBJ_ID_INTERFACE != obj->obj_type ||
       bcmbal_interface_auto_id_oper_status_change != obj->subgroup)
    {
-      ASFVOLT_LOG(ASFVOLT_ERROR, "Processing BAL API \'%s\' IND callback (status is %s)\n",
+      ASFVOLT_LOG(ASFVOLT_ERROR, "Processing BAL API '%s' IND callback (status is %s)",
 				  bcmbal_objtype_str(obj->obj_type), bcmos_strerror(obj->status));
       result = BCM_ERR_INTERNAL;
    }
@@ -723,7 +723,7 @@
    if(BCMBAL_OBJ_ID_INTERFACE != obj->obj_type ||
       bcmbal_interface_auto_id_los != obj->subgroup)
    {
-      ASFVOLT_LOG(ASFVOLT_ERROR, "Processing BAL API \'%s\' IND callback (status is %s)\n",
+      ASFVOLT_LOG(ASFVOLT_ERROR, "Processing BAL API '%s' IND callback (status is %s)",
 				  bcmbal_objtype_str(obj->obj_type), bcmos_strerror(obj->status));
       result = BCM_ERR_INTERNAL;
    }
@@ -799,7 +799,7 @@
    if(BCMBAL_OBJ_ID_INTERFACE != obj->obj_type ||
       bcmbal_interface_auto_id_ind != obj->subgroup)
    {
-      ASFVOLT_LOG(ASFVOLT_ERROR, "Processing BAL API \'%s\' IND callback (status is %s)\n",
+      ASFVOLT_LOG(ASFVOLT_ERROR, "Processing BAL API '%s' IND callback (status is %s)",
 				  bcmbal_objtype_str(obj->obj_type), bcmos_strerror(obj->status));
       result = BCM_ERR_INTERNAL;
    }
@@ -904,7 +904,7 @@
    if(BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL != obj->obj_type ||
       bcmbal_subscriber_terminal_auto_id_oper_status_change != obj->subgroup)
    {
-      ASFVOLT_LOG(ASFVOLT_ERROR, "Processing BAL API \'%s\' IND callback (status is %s)\n",
+      ASFVOLT_LOG(ASFVOLT_ERROR, "Processing BAL API '%s' IND callback (status is %s)",
 				  bcmbal_objtype_str(obj->obj_type), bcmos_strerror(obj->status));
       result = BCM_ERR_INTERNAL;
    }
@@ -987,13 +987,13 @@
    if(BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL != obj->obj_type ||
       bcmbal_subscriber_terminal_auto_id_sub_term_disc != obj->subgroup)
    {
-      ASFVOLT_LOG(ASFVOLT_ERROR, "Processing BAL API \'%s\' IND callback (status is %s)\n",
+      ASFVOLT_LOG(ASFVOLT_ERROR, "Processing BAL API '%s' IND callback (status is %s)",
 				  bcmbal_objtype_str(obj->obj_type), bcmos_strerror(obj->status));
       result = BCM_ERR_INTERNAL;
    }
    else
    {
-      ASFVOLT_LOG(ASFVOLT_DEBUG, "Processing BAL API \'%s\' IND callback (status is %s)\n",
+      ASFVOLT_LOG(ASFVOLT_DEBUG, "Processing BAL API '%s' IND callback (status is %s)",
 				  bcmbal_objtype_str(obj->obj_type), bcmos_strerror(obj->status));
       BalIndications *balIndCfg;
       balIndCfg = malloc(sizeof(BalIndications));
@@ -1045,23 +1045,19 @@
 
       balIndCfg->terminal_disc->data->serial_number = serial_number;
 
-      ASFVOLT_LOG(ASFVOLT_DEBUG, "Discovered ONU serial number "
-                "%2X%2X%2X%2X%1X%1X%1X%1X%1X%1X%1X%1X ",
+      ASFVOLT_LOG(ASFVOLT_INFO, "Discovered ONU serial number "
+                "%c%c%c%c%02X%02X%02X%02X",
                 sub_disc_ind->data.serial_number.vendor_id[0],
                 sub_disc_ind->data.serial_number.vendor_id[1],
                 sub_disc_ind->data.serial_number.vendor_id[2],
                 sub_disc_ind->data.serial_number.vendor_id[3],
-                sub_disc_ind->data.serial_number.vendor_specific[0]>>4 & 0x0f,
-                sub_disc_ind->data.serial_number.vendor_specific[0] & 0x0f,
-                sub_disc_ind->data.serial_number.vendor_specific[1]>>4 & 0x0f,
-                sub_disc_ind->data.serial_number.vendor_specific[1] & 0x0f,
-                sub_disc_ind->data.serial_number.vendor_specific[2]>>4 & 0x0f,
-                sub_disc_ind->data.serial_number.vendor_specific[2] & 0x0f,
-                sub_disc_ind->data.serial_number.vendor_specific[3]>>4 & 0x0f,
-                sub_disc_ind->data.serial_number.vendor_specific[3] & 0x0f);
+                sub_disc_ind->data.serial_number.vendor_specific[0],
+                sub_disc_ind->data.serial_number.vendor_specific[1],
+                sub_disc_ind->data.serial_number.vendor_specific[2],
+                sub_disc_ind->data.serial_number.vendor_specific[3]);
 
-      ASFVOLT_LOG(ASFVOLT_DEBUG, "ONU Discovery:Before decoding:Vendor id is %s\n", sub_disc_ind->data.serial_number.vendor_id);
-      ASFVOLT_LOG(ASFVOLT_DEBUG, "ONU Discovery:Before decoding:Vendor specific is %s\n", sub_disc_ind->data.serial_number.vendor_specific);
+      //ASFVOLT_LOG(ASFVOLT_DEBUG, "ONU Discovery:Before decoding:Vendor id is %s", sub_disc_ind->data.serial_number.vendor_id);
+      //ASFVOLT_LOG(ASFVOLT_DEBUG, "ONU Discovery:Before decoding:Vendor specific is %s", sub_disc_ind->data.serial_number.vendor_specific);
 
       char *vendor_id = malloc(sizeof(char)*MAX_CHAR_LENGTH);
       memset(vendor_id, 0, MAX_CHAR_LENGTH);
@@ -1071,7 +1067,7 @@
 		      sub_disc_ind->data.serial_number.vendor_id[2],
 		      sub_disc_ind->data.serial_number.vendor_id[3]);
       balIndCfg->terminal_disc->data->serial_number->vendor_id = vendor_id;
-      ASFVOLT_LOG(ASFVOLT_DEBUG, "ONU Discovery:After decoding:Vendor id is %s\n", balIndCfg->terminal_disc->data->serial_number->vendor_id);
+      ASFVOLT_LOG(ASFVOLT_DEBUG, "ONU Discovery:After decoding:Vendor id is %s", balIndCfg->terminal_disc->data->serial_number->vendor_id);
       char *vendor_specific = malloc(sizeof(char)*MAX_CHAR_LENGTH);
       memset(vendor_specific, 0, MAX_CHAR_LENGTH);
       sprintf(vendor_specific,"%1X%1X%1X%1X%1X%1X%1X%1X",
@@ -1084,7 +1080,7 @@
 		      sub_disc_ind->data.serial_number.vendor_specific[3]>>4 & 0x0f,
 		      sub_disc_ind->data.serial_number.vendor_specific[3] & 0x0f);
       balIndCfg->terminal_disc->data->serial_number->vendor_specific = vendor_specific;
-      ASFVOLT_LOG(ASFVOLT_DEBUG, "ONU Discovery:After decoding:Vendor specific is %s\n", balIndCfg->terminal_disc->data->serial_number->vendor_specific);
+      ASFVOLT_LOG(ASFVOLT_DEBUG, "ONU Discovery:After decoding:Vendor specific is %s", balIndCfg->terminal_disc->data->serial_number->vendor_specific);
 
       list_node *bal_indication_node = malloc(sizeof(list_node));
       bal_indication_node->bal_indication = balIndCfg;
@@ -1110,7 +1106,7 @@
    if(BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL != obj->obj_type ||
       bcmbal_subscriber_terminal_auto_id_sub_term_alarm != obj->subgroup)
    {
-      ASFVOLT_LOG(ASFVOLT_ERROR, "Processing BAL API \'%s\' IND callback (status is %s)\n",
+      ASFVOLT_LOG(ASFVOLT_ERROR, "Processing BAL API \'%s\' IND callback (status is %s)",
 				  bcmbal_objtype_str(obj->obj_type), bcmos_strerror(obj->status));
       result = BCM_ERR_INTERNAL;
    }
@@ -1198,7 +1194,7 @@
    if(BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL != obj->obj_type ||
       bcmbal_subscriber_terminal_auto_id_dgi != obj->subgroup)
    {
-      ASFVOLT_LOG(ASFVOLT_ERROR, "Processing BAL API \'%s\' IND callback (status is %s)\n",
+      ASFVOLT_LOG(ASFVOLT_ERROR, "Processing BAL API '%s' IND callback (status is %s)",
 				  bcmbal_objtype_str(obj->obj_type), bcmos_strerror(obj->status));
       result = BCM_ERR_INTERNAL;
    }
@@ -1274,7 +1270,7 @@
    if(BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL != obj->obj_type ||
       bcmbal_subscriber_terminal_auto_id_ind != obj->subgroup)
    {
-      ASFVOLT_LOG(ASFVOLT_ERROR, "Processing BAL API \'%s\' IND callback (status is %s)\n",
+      ASFVOLT_LOG(ASFVOLT_ERROR, "Processing BAL API '%s' IND callback (status is %s)",
 				  bcmbal_objtype_str(obj->obj_type), bcmos_strerror(obj->status));
       result = BCM_ERR_INTERNAL;
    }
@@ -1359,8 +1355,8 @@
       bal_serial_number__init(serialNum);
       balIndCfg->terminal_ind->data->serial_number = serialNum;
 
-      ASFVOLT_LOG(ASFVOLT_ERROR, "ONU Activation:Before decoding:Vendor id is %s\n", sub_ind->data.serial_number.vendor_id);
-      ASFVOLT_LOG(ASFVOLT_ERROR, "ONU Activation:Before decoding:Vendor specific is %s\n", sub_ind->data.serial_number.vendor_specific);
+      //ASFVOLT_LOG(ASFVOLT_ERROR, "ONU Activation:Before decoding:Vendor id is %s", sub_ind->data.serial_number.vendor_id);
+      //ASFVOLT_LOG(ASFVOLT_ERROR, "ONU Activation:Before decoding:Vendor specific is %s", sub_ind->data.serial_number.vendor_specific);
 
       char *vendor_id = malloc(sizeof(char)*MAX_CHAR_LENGTH);
       memset(vendor_id, 0, MAX_CHAR_LENGTH);
@@ -1370,7 +1366,7 @@
 		      sub_ind->data.serial_number.vendor_id[2],
 		      sub_ind->data.serial_number.vendor_id[3]);
       balIndCfg->terminal_ind->data->serial_number->vendor_id = vendor_id;
-      ASFVOLT_LOG(ASFVOLT_ERROR, "ONU Activation:After decoding:Vendor id is %s\n", balIndCfg->terminal_ind->data->serial_number->vendor_id);
+      ASFVOLT_LOG(ASFVOLT_DEBUG, "ONU Activation:After decoding:Vendor id is %s", balIndCfg->terminal_ind->data->serial_number->vendor_id);
       char *vendor_specific = malloc(sizeof(char)*MAX_CHAR_LENGTH);
       memset(vendor_specific, 0, MAX_CHAR_LENGTH);
       sprintf(vendor_specific,"%1X%1X%1X%1X%1X%1X%1X%1X",
@@ -1383,7 +1379,7 @@
 		      sub_ind->data.serial_number.vendor_specific[3]>>4 & 0x0f,
 		      sub_ind->data.serial_number.vendor_specific[3] & 0x0f);
       balIndCfg->terminal_ind->data->serial_number->vendor_specific = vendor_specific;
-      ASFVOLT_LOG(ASFVOLT_ERROR, "ONU Activation:After decoding:Vendor specific is %s\n", balIndCfg->terminal_ind->data->serial_number->vendor_specific);
+      ASFVOLT_LOG(ASFVOLT_DEBUG, "ONU Activation:After decoding:Vendor specific is %s", balIndCfg->terminal_ind->data->serial_number->vendor_specific);
 
       BalIdList *balAggportList;
       balAggportList = malloc(sizeof(BalIdList));
@@ -1440,7 +1436,7 @@
    if(BCMBAL_OBJ_ID_TM_QUEUE != obj->obj_type ||
       bcmbal_tm_queue_auto_id_ind != obj->subgroup)
    {
-      ASFVOLT_LOG(ASFVOLT_ERROR, "Processing BAL API \'%s\' IND callback (status is %s)\n",
+      ASFVOLT_LOG(ASFVOLT_ERROR, "Processing BAL API '%s' IND callback (status is %s)",
 				  bcmbal_objtype_str(obj->obj_type), bcmos_strerror(obj->status));
       result = BCM_ERR_INTERNAL;
    }
@@ -1617,7 +1613,7 @@
    if(BCMBAL_OBJ_ID_TM_SCHED != obj->obj_type ||
       bcmbal_tm_sched_auto_id_ind != obj->subgroup)
    {
-      ASFVOLT_LOG(ASFVOLT_ERROR, "Processing BAL API \'%s\' IND callback (status is %s)\n",
+      ASFVOLT_LOG(ASFVOLT_ERROR, "Processing BAL API '%s' IND callback (status is %s)",
 				  bcmbal_objtype_str(obj->obj_type), bcmos_strerror(obj->status));
       result = BCM_ERR_INTERNAL;
    }
@@ -1684,7 +1680,7 @@
    if(BCMBAL_OBJ_ID_PACKET != obj->obj_type ||
       bcmbal_packet_auto_id_bearer_channel_rx != obj->subgroup)
    {
-      ASFVOLT_LOG(ASFVOLT_ERROR, "Processing BAL API \'%s\' IND callback (status is %s)\n",
+      ASFVOLT_LOG(ASFVOLT_ERROR, "Processing BAL API '%s' IND callback (status is %s)",
 				  bcmbal_objtype_str(obj->obj_type), bcmos_strerror(obj->status));
       result = BCM_ERR_INTERNAL;
    }
@@ -1847,13 +1843,13 @@
    if(BCMBAL_OBJ_ID_PACKET != obj->obj_type ||
       bcmbal_packet_auto_id_itu_omci_channel_rx != obj->subgroup)
    {
-      ASFVOLT_LOG(ASFVOLT_ERROR, "Processing BAL API \'%s\' IND callback (status is %s)\n",
+      ASFVOLT_LOG(ASFVOLT_ERROR, "Processing BAL API '%s' IND callback (status is %s)",
 				  bcmbal_objtype_str(obj->obj_type), bcmos_strerror(obj->status));
       result = BCM_ERR_INTERNAL;
    }
    else
    {
-      ASFVOLT_LOG(ASFVOLT_DEBUG, "Received OMCI response via BAL APIs\n");
+      ASFVOLT_LOG(ASFVOLT_DEBUG, "Received OMCI response via BAL APIs");
       BalIndications *balIndCfg;
       balIndCfg = malloc(sizeof(BalIndications));
       memset(balIndCfg, 0, sizeof(BalIndications));
@@ -1928,7 +1924,7 @@
                                                                             BAL_GRPC_PRES;
             balIndCfg->balomciresp->key->packet_send_dest->itu_omci_channel->intf_id =
                                  omci_channel->key.packet_send_dest.u.itu_omci_channel.intf_id;
-            ASFVOLT_LOG(ASFVOLT_DEBUG, "OMCI Response for ONU id %d\n",
+            ASFVOLT_LOG(ASFVOLT_DEBUG, "OMCI Response for ONU id %d",
                  balIndCfg->balomciresp->key->packet_send_dest->itu_omci_channel->sub_term_id);
          }
          break;
@@ -1939,15 +1935,12 @@
          break;
       }
 
-      ASFVOLT_LOG(ASFVOLT_DEBUG, "OMCI Response with %zd bytes is \n",balIndCfg->balomciresp->data->pkt.len);
-      uint16_t idx;
-      for(idx=0; idx<balIndCfg->balomciresp->data->pkt.len; idx++)
-      {
-	      printf("%02x", balIndCfg->balomciresp->data->pkt.data[idx]);
-      }
-      printf("\n");
-      ASFVOLT_LOG(ASFVOLT_DEBUG, "OMCI Response for ONU id %d\n",
+      ASFVOLT_HEX2LOG(ASFVOLT_DEBUG, "OMCI Response with %zd bytes is ",
+         balIndCfg->balomciresp->data->pkt.data, balIndCfg->balomciresp->data->pkt.len);
+
+      ASFVOLT_LOG(ASFVOLT_DEBUG, "OMCI Response for ONU id %d",
 		      balIndCfg->balomciresp->key->packet_send_dest->itu_omci_channel->sub_term_id);
+
       list_node *bal_indication_node = malloc(sizeof(list_node));
       bal_indication_node->bal_indication = balIndCfg;
 
@@ -1972,7 +1965,7 @@
    if(BCMBAL_OBJ_ID_PACKET != obj->obj_type ||
       bcmbal_packet_auto_id_ieee_oam_channel_rx != obj->subgroup)
    {
-      ASFVOLT_LOG(ASFVOLT_ERROR, "Processing BAL API \'%s\' IND callback (status is %s)\n",
+      ASFVOLT_LOG(ASFVOLT_ERROR, "Processing BAL API '%s' IND callback (status is %s)",
 				  bcmbal_objtype_str(obj->obj_type), bcmos_strerror(obj->status));
       result = BCM_ERR_INTERNAL;
    }
diff --git a/src/bal_interface_hdlr.c b/src/bal_interface_hdlr.c
index 33847ea..707f3fd 100755
--- a/src/bal_interface_hdlr.c
+++ b/src/bal_interface_hdlr.c
@@ -23,7 +23,7 @@
 #include "bal_interface_hdlr.h"
 
 /********************************************************************\
- * Function    : bal_interface_cfg_set                          *
+ * Function    : bal_interface_cfg_set                              *
  * Description : Configures the PON and NNI interfaces              *
  *               of OLT Device                                      *
  ********************************************************************/
@@ -49,51 +49,51 @@
         BCMBAL_CFG_INIT(&interface_obj, interface, intf_key);
 
         ASFVOLT_CFG_PROP_SET(interface_obj, interface, admin_state, BCMOS_TRUE, BCMBAL_STATE_UP);
-         
-        ASFVOLT_CFG_PROP_SET(interface_obj, interface, min_data_agg_port_id, 
-                               interface_cfg->data->has_min_data_svc_port_id, 
+
+        ASFVOLT_CFG_PROP_SET(interface_obj, interface, min_data_agg_port_id,
+                               interface_cfg->data->has_min_data_svc_port_id,
                                interface_cfg->data->min_data_agg_port_id);
 
-        ASFVOLT_CFG_PROP_SET(interface_obj, interface, min_data_svc_port_id, 
-                               interface_cfg->data->has_min_data_svc_port_id, 
+        ASFVOLT_CFG_PROP_SET(interface_obj, interface, min_data_svc_port_id,
+                               interface_cfg->data->has_min_data_svc_port_id,
                                interface_cfg->data->min_data_svc_port_id);
 
         ASFVOLT_CFG_PROP_SET(interface_obj, interface, transceiver_type,
-                               BCMOS_TRUE, 
+                               BCMOS_TRUE,
                                interface_cfg->data->transceiver_type);
-        ASFVOLT_LOG(ASFVOLT_INFO, "Setting transceiver_type to : %d\n", interface_cfg->data->transceiver_type);
+        ASFVOLT_LOG(ASFVOLT_INFO, "Setting transceiver_type to : %d", interface_cfg->data->transceiver_type);
 
         ASFVOLT_CFG_PROP_SET(interface_obj, interface, ds_miss_mode,
-                               interface_cfg->data->has_ds_miss_mode, 
+                               interface_cfg->data->has_ds_miss_mode,
                                interface_cfg->data->ds_miss_mode);
 
         ASFVOLT_CFG_PROP_SET(interface_obj, interface, mtu,
-                               interface_cfg->data->has_mtu, 
+                               interface_cfg->data->has_mtu,
                                interface_cfg->data->mtu);
 
         ASFVOLT_CFG_PROP_SET(interface_obj, interface, flow_control,
-                               interface_cfg->data->has_flow_control, 
+                               interface_cfg->data->has_flow_control,
                                interface_cfg->data->flow_control);
 
         ASFVOLT_CFG_PROP_SET(interface_obj, interface, ds_tm,
-                               interface_cfg->data->has_ds_tm, 
+                               interface_cfg->data->has_ds_tm,
                                interface_cfg->data->ds_tm);
 
         ASFVOLT_CFG_PROP_SET(interface_obj, interface, us_tm,
-                               interface_cfg->data->has_us_tm, 
+                               interface_cfg->data->has_us_tm,
                                interface_cfg->data->us_tm);
 
-        ASFVOLT_LOG(ASFVOLT_INFO, "Bringing up the interface No: %d\n", intf_key.intf_id);
+        ASFVOLT_LOG(ASFVOLT_INFO, "Bringing up the interface No: %d", intf_key.intf_id);
 
         err = bcmbal_cfg_set(DEFAULT_ATERM_ID, &(interface_obj.hdr));
 
         if(BCM_ERR_OK != err)
         {
-            ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to configure the interface object to ADMIN-UP\n");
+            ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to configure the interface object to ADMIN-UP");
             return BAL_ERRNO__BAL_ERR_INTERNAL;
         }
     }
-    ASFVOLT_LOG(ASFVOLT_DEBUG, "\n Set Interface configuration sent to OLT.Interface ID(%d) Interface Type(%d)\n", 
+    ASFVOLT_LOG(ASFVOLT_DEBUG, "Set Interface configuration sent to OLT.Interface ID(%d) Interface Type(%d)",
                                 intf_key.intf_id, intf_key.intf_type);
     return BAL_ERRNO__BAL_ERR_OK;
 }
@@ -104,13 +104,13 @@
  * Description : get the PON and NNI interfaces                     *
  *               of OLT Device                                      *
  ********************************************************************/
-uint32_t bal_interface_cfg_get(BalInterfaceKey *interface_cfg_key, 
+uint32_t bal_interface_cfg_get(BalInterfaceKey *interface_cfg_key,
                                BalInterfaceCfg *interface_cfg)
 {
     bcmos_errno err = BCM_ERR_OK;
     bcmbal_interface_cfg interface_obj;
     bcmbal_interface_key intf_key;
-    
+
     if((interface_cfg_key->has_intf_id) && (interface_cfg_key->has_intf_type))
     {
        intf_key.intf_id = interface_cfg_key->intf_id;
@@ -118,18 +118,18 @@
     }
     else
     {
-       ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to get the interface cfg(OLT): Missing Key values\
-                                   Recevied key values intf-id(%d), intf-type(%d) \n", 
+       ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to get the interface cfg(OLT): Missing Key values "
+                                  "Received key values intf-id(%d), intf-type(%d)",
                                    interface_cfg_key->intf_id, interface_cfg_key->intf_type);
        return BAL_ERRNO__BAL_ERR_NOENT;
     }
 
-    ASFVOLT_LOG(ASFVOLT_DEBUG, "Get interface cfg(for OLT) starts\n");
+    ASFVOLT_LOG(ASFVOLT_DEBUG, "Get interface cfg(for OLT) starts");
     /*
      * Set the key in the interface object and initialize the object itself
      */
     BCMBAL_CFG_INIT(&interface_obj, interface, intf_key);
- 
+
     /* request all properties, include everything */
     BCMBAL_CFG_PROP_GET(&interface_obj, interface, all_properties);
 
@@ -137,12 +137,12 @@
 
     if(BCM_ERR_OK != err)
     {
-        ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to get the interface Cfg(OLT)\n");
+        ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to get the interface Cfg(OLT)");
         return BAL_ERRNO__BAL_ERR_INTERNAL;
     }
 
-    ASFVOLT_LOG(ASFVOLT_INFO, "\nGet Interface cfg sent to OLT. \
-                               Interface ID(%d) Interface Type(%d)\n", 
+    ASFVOLT_LOG(ASFVOLT_INFO, "Get Interface cfg sent to OLT. "
+                              "Interface ID(%d) Interface Type(%d)",
                                intf_key.intf_id, intf_key.intf_type);
     /* TODO - Add code to call grpc */
 
@@ -160,7 +160,7 @@
     bcmos_errno err = BCM_ERR_OK;
     bcmbal_interface_cfg interface_obj;
     bcmbal_interface_key intf_key;
-    
+
     if((interface_cfg_key->has_intf_id) && (interface_cfg_key->has_intf_type))
     {
        intf_key.intf_id = interface_cfg_key->intf_id;
@@ -168,14 +168,14 @@
     }
     else
     {
-       ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to clear the interface cfg(OLT): Missing Key values\
-                                   Recevied key values intf-id(%d), intf-type(%d) \n", 
+       ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to clear the interface cfg(OLT): Missing Key values "
+                                  "Received key values intf-id(%d), intf-type(%d)",
                                    interface_cfg_key->intf_id, interface_cfg_key->intf_type);
        return BAL_ERRNO__BAL_ERR_NOENT;
     }
 
 
-    ASFVOLT_LOG(ASFVOLT_DEBUG, "Clearing of OLT(interface cfg) starts\n");
+    ASFVOLT_LOG(ASFVOLT_DEBUG, "Clearing of OLT(interface cfg) starts");
     /*
      * Set the key in the interface object and initialize the object itself
      */
@@ -185,12 +185,12 @@
 
     if(BCM_ERR_OK != err)
     {
-        ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to clear the interface Cfg(OLT)\n");
+        ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to clear the interface Cfg(OLT)");
         return BAL_ERRNO__BAL_ERR_INTERNAL;
     }
 
-    ASFVOLT_LOG(ASFVOLT_INFO, "\nClear Interface cfg sent to OLT. \
-                               Interface ID(%d) Interface Type(%d)\n", 
+    ASFVOLT_LOG(ASFVOLT_INFO, "Clear Interface cfg sent to OLT. "
+                              "Interface ID(%d) Interface Type(%d)",
                                intf_key.intf_id, intf_key.intf_type);
     return BAL_ERRNO__BAL_ERR_OK;
 }
diff --git a/src/bal_packet_hdlr.c b/src/bal_packet_hdlr.c
index 5f01c1d..74312c9 100755
--- a/src/bal_packet_hdlr.c
+++ b/src/bal_packet_hdlr.c
@@ -53,7 +53,7 @@
             buf.len = packet->data->pkt.len;
             buf.val = (uint8_t *)malloc((buf.len)*sizeof(uint8_t));
             memcpy(buf.val,(uint8_t *)packet->data->pkt.data,buf.len);
-	    ASFVOLT_LOG(ASFVOLT_DEBUG, "\n Packet of length %d bytes with dest type as %d\n",buf.len,packet->key->packet_send_dest->type);
+	    ASFVOLT_LOG(ASFVOLT_DEBUG, "Packet of length %d bytes with dest type as %d",buf.len,packet->key->packet_send_dest->type);
             err = bcmbal_pkt_send(aterm_id,
                   proxy_pkt_dest,
                   (const char *)(buf.val),
@@ -69,7 +69,7 @@
             buf.len = packet->data->pkt.len;
             buf.val = (uint8_t *)malloc((buf.len)*sizeof(uint8_t));
             memcpy(buf.val,(uint8_t *)packet->data->pkt.data,buf.len);
-	    ASFVOLT_LOG(ASFVOLT_DEBUG, "\n Packet of length %d bytes with dest type as %d\n",buf.len,packet->key->packet_send_dest->type);
+	    ASFVOLT_LOG(ASFVOLT_DEBUG, "Packet of length %d bytes with dest type as %d",buf.len,packet->key->packet_send_dest->type);
             err = bcmbal_pkt_send(aterm_id,
                   proxy_pkt_dest,
                   (const char *)(buf.val),
@@ -84,7 +84,7 @@
                .u.svc_port.intf_id = packet->key->packet_send_dest->svc_port->intf_id };
             buf.len = packet->data->pkt.len;
             buf.val = (uint8_t *)malloc((buf.len)*sizeof(uint8_t));
-	    ASFVOLT_LOG(ASFVOLT_DEBUG, "\n Packet of length %d bytes with dest type as %d\n",buf.len,packet->key->packet_send_dest->type);
+	    ASFVOLT_LOG(ASFVOLT_DEBUG, "Packet of length %d bytes with dest type as %d",buf.len,packet->key->packet_send_dest->type);
             memcpy(buf.val,(uint8_t *)packet->data->pkt.data,buf.len);
             err = bcmbal_pkt_send(aterm_id,
                   proxy_pkt_dest,
@@ -107,7 +107,7 @@
             char str1[MAX_CHAR_LENGTH];
             char str2[MAX_CHAR_LENGTH];
             memset(&arraySend,0,buf.len);
-            ASFVOLT_LOG(ASFVOLT_DEBUG,"\nSending omci msg to ONU of length is %d\n",buf.len);
+            ASFVOLT_LOG(ASFVOLT_DEBUG,"Sending omci msg to ONU of length is %d",buf.len);
             for(idx1=0,idx2=0; idx1<((buf.len)*2); idx1++,idx2++)
             {
                sprintf(str1,"%c",packet->data->pkt.data[idx1]);
@@ -117,17 +117,12 @@
             }
             buf.val = (uint8_t *)malloc((buf.len)*sizeof(uint8_t));
             memcpy(buf.val,(uint8_t *)arraySend,buf.len);
-            ASFVOLT_LOG(ASFVOLT_DEBUG,"\nAfter converting it into hex ");
-            for(idx2=0; idx2<buf.len; idx2++)
-            {
-               printf("%02x", buf.val[idx2]);
-            }
-            printf("\n");
+            ASFVOLT_HEX2LOG(ASFVOLT_DEBUG, "After converting %zd bytes to hex ", buf.val, buf.len);
             err = bcmbal_pkt_send(aterm_id,
                   proxy_pkt_dest,
                   (const char *)(buf.val),
                   buf.len);
-            ASFVOLT_LOG(ASFVOLT_DEBUG, "\n OMCI request msg of length(%d) sent to ONU(%d) through PON(%d)\n",
+            ASFVOLT_LOG(ASFVOLT_DEBUG, "OMCI request msg of length(%d) sent to ONU(%d) through PON(%d)",
                   buf.len,
                   packet->key->packet_send_dest->itu_omci_channel->sub_term_id,
                   packet->key->packet_send_dest->itu_omci_channel->intf_id);
@@ -136,12 +131,12 @@
          break;
       case BAL_DEST_TYPE__BAL_DEST_TYPE_IEEE_OAM_CHANNEL:
          {
-            ASFVOLT_LOG(ASFVOLT_DEBUG, "\n PLOAM msg not yet implemented\n");
+            ASFVOLT_LOG(ASFVOLT_DEBUG, "PLOAM msg not yet implemented");
          }
          break;
       default:
          {
-            ASFVOLT_LOG(ASFVOLT_DEBUG, "\n Invalid dest type\n");
+            ASFVOLT_LOG(ASFVOLT_DEBUG, "Invalid dest type");
          }
          break;
    }
diff --git a/src/bal_stats_hdlr.c b/src/bal_stats_hdlr.c
index 6c20e44..7865c7c 100755
--- a/src/bal_stats_hdlr.c
+++ b/src/bal_stats_hdlr.c
@@ -31,7 +31,7 @@
 
    bcmos_errno err = BCM_ERR_OK;
 
-   ASFVOLT_LOG(ASFVOLT_DEBUG, "Get Stats from OLT intf_type %d\n",intf_type);
+   ASFVOLT_LOG(ASFVOLT_DEBUG, "Get Stats from OLT intf_type %d",intf_type);
 
    if(intf_type!=BAL_INTF_TYPE__BAL_INTF_TYPE_NNI && intf_type!=BAL_INTF_TYPE__BAL_INTF_TYPE_PON &&
 	intf_type!=BAL_INTF_TYPE__BAL_INTF_TYPE_EPON_1G_PATH &&
@@ -47,7 +47,7 @@
 
    /* Retrieve the Upstream packet and byte counts */
    BCMBAL_STAT_PROP_GET(&interface_stats, interface, all_properties);
-   ASFVOLT_LOG(ASFVOLT_DEBUG, "Retrieve the Upstream packet and byte count success\n");
+   ASFVOLT_LOG(ASFVOLT_DEBUG, "Retrieve the Upstream packet and byte count success");
 
    /* Read the NNI stats.
     * NOTE: When a CLEAR is specified during a NNI stats GET operation,
diff --git a/src/bal_subscriber_terminal_hdlr.c b/src/bal_subscriber_terminal_hdlr.c
index c0627ac..c2df2a6 100755
--- a/src/bal_subscriber_terminal_hdlr.c
+++ b/src/bal_subscriber_terminal_hdlr.c
@@ -39,7 +39,7 @@
     subs_terminal_key.sub_term_id = onu_cfg->key->sub_term_id;
     subs_terminal_key.intf_id = onu_cfg->key->intf_id;
 
-    ASFVOLT_LOG(ASFVOLT_INFO, "Bringing up the subscriber terminal: %d\n", onu_cfg->key->sub_term_id);
+    ASFVOLT_LOG(ASFVOLT_INFO, "Bringing up the subscriber terminal: %d", onu_cfg->key->sub_term_id);
 
     /*
      * Set the key in the subscriber terminal object
@@ -56,8 +56,8 @@
 
        two_digit_buf[2] = 0;
 
-       ASFVOLT_LOG(ASFVOLT_DEBUG, "Before encoding,Vendor Id(%s),Vendor Specific Id(%s), Registration Id(%s)\n",
-		       onu_cfg->data->serial_number->vendor_id, 
+       ASFVOLT_LOG(ASFVOLT_DEBUG, "Before encoding,Vendor Id(%s),Vendor Specific Id(%s), Registration Id(%s)",
+		       onu_cfg->data->serial_number->vendor_id,
 		       onu_cfg->data->serial_number->vendor_specific,
 		       onu_cfg->data->registration_id);
 
@@ -69,8 +69,8 @@
 		       onu_cfg->data->serial_number->vendor_id[2],
 		       onu_cfg->data->serial_number->vendor_id[3]);
        onu_cfg->data->serial_number->vendor_id = vendor_id;
-       ASFVOLT_LOG(ASFVOLT_DEBUG, "After encoding,Vendor Id(%s),Vendor Specific Id(%s), Registration Id(%s)\n",
-		       onu_cfg->data->serial_number->vendor_id, 
+       ASFVOLT_LOG(ASFVOLT_DEBUG, "After encoding,Vendor Id(%s),Vendor Specific Id(%s), Registration Id(%s)",
+		       onu_cfg->data->serial_number->vendor_id,
 		       onu_cfg->data->serial_number->vendor_specific,
 		       onu_cfg->data->registration_id);
 
@@ -112,7 +112,7 @@
     if (!skip_onu)
     {
 
-       /*ASFVOLT_LOG(ASFVOLT_DEBUG, "Onu's(%d) Serial number %02x%02x%02x%2x%02x%02x%02x%02x\n", 
+       /*ASFVOLT_LOG(ASFVOLT_DEBUG, "Onu's(%d) Serial number %02x%02x%02x%2x%02x%02x%02x%02x",
              onu_cfg->key->sub_term_id,
              sub_term_obj.data->serial_number.vendor_id[0], sub_term_obj.data->serial_number.vendor_id[1],
              sub_term_obj.data->serial_number.vendor_id[2], sub_term_obj.data->serial_number.vendor_id[3],
@@ -121,16 +121,16 @@
 
        err = bcmbal_cfg_set(DEFAULT_ATERM_ID, &(sub_term_obj.hdr));
 
-       ASFVOLT_LOG(ASFVOLT_DEBUG, 
-                   "\n   ....SENT SUBSCRIBER TERMINAL %s UP %d on interface %d...\n",
-                   (BCM_ERR_OK != err) ? "NOT" : "\b",
+       ASFVOLT_LOG(ASFVOLT_DEBUG,
+                   "....SENT SUBSCRIBER TERMINAL %sUP %d on interface %d...",
+                   (BCM_ERR_OK != err) ? "NOT " : "",
                    subs_terminal_key.sub_term_id,
                    subs_terminal_key.intf_id);
     }
     else
     {
-       ASFVOLT_LOG(ASFVOLT_DEBUG, 
-                   "Skipping activation of subscriber terminal %d on interface %d\n",
+       ASFVOLT_LOG(ASFVOLT_DEBUG,
+                   "Skipping activation of subscriber terminal %d on interface %d",
                    subs_terminal_key.sub_term_id,
                    subs_terminal_key.intf_id);
        err = BAL_ERRNO__BAL_ERR_PARM;
@@ -161,7 +161,7 @@
        {
           ASFVOLT_LOG(ASFVOLT_INFO, "New ONU Discovered. serial number "
                 "%2X%2X%2X%2X%1X%1X%1X%1X%1X%1X%1X%1X "
-                "on PON %d\n",
+                "on PON %d",
                 p_serial_number->vendor_id[0],
                 p_serial_number->vendor_id[1],
                 p_serial_number->vendor_id[2],
@@ -182,7 +182,7 @@
        {
           ASFVOLT_LOG(ASFVOLT_INFO, "Event on existing ONU. serial number "
                 "%2X%2X%2X%2X%1X%1X%1X%1X%1X%1X%1X%1X "
-                "on PON %d\n",
+                "on PON %d",
                 p_serial_number->vendor_id[0],
                 p_serial_number->vendor_id[1],
                 p_serial_number->vendor_id[2],
@@ -202,10 +202,10 @@
     }
     else
     {
-       ASFVOLT_LOG(ASFVOLT_ERROR, 
-                   "Invalid object type %d for subscriber terminal indication\n",
+       ASFVOLT_LOG(ASFVOLT_ERROR,
+                   "Invalid object type %d for subscriber terminal indication",
                    obj->obj_type);
- 
+
     }
 
 #endif
@@ -222,11 +222,11 @@
     bcmbal_subscriber_terminal_cfg cfg;
     bcmbal_subscriber_terminal_key key = { };
 
-    ASFVOLT_LOG(ASFVOLT_INFO, 
-                    "Processing subscriber terminal cfg clear: %d\n",
+    ASFVOLT_LOG(ASFVOLT_INFO,
+                    "Processing subscriber terminal cfg clear: %d",
                      terminal_key->sub_term_id);
 
-    if (terminal_key->has_sub_term_id && 
+    if (terminal_key->has_sub_term_id &&
                     terminal_key->has_intf_id)
     {
         key.sub_term_id = terminal_key->sub_term_id ;
@@ -234,23 +234,23 @@
     }
     else
     {
-       ASFVOLT_LOG(ASFVOLT_ERROR, 
-                   "Invalid Key to handle subscriber terminal clear Req.subscriber_terminal_id(%d), Interface ID(%d)\n",
+       ASFVOLT_LOG(ASFVOLT_ERROR,
+                   "Invalid Key to handle subscriber terminal clear Req.subscriber_terminal_id(%d), Interface ID(%d)",
                    key.sub_term_id, key.intf_id);
- 
+
         return BAL_ERRNO__BAL_ERR_PARM;
     }
 
     err = bcmbal_cfg_clear(DEFAULT_ATERM_ID, &cfg.hdr);
     err = BAL_ERRNO__BAL_ERR_OK;
     return err;
-} 
+}
 
 /********************************************************************\
  * Function    : bal_subscriber_terminal_cfg_get                    *
  * Description : Get the subscriber terminal(ONU) configuration     *
  ********************************************************************/
-uint32_t bal_subscriber_terminal_cfg_get(BalSubscriberTerminalKey *terminal_key, 
+uint32_t bal_subscriber_terminal_cfg_get(BalSubscriberTerminalKey *terminal_key,
                                          BalSubscriberTerminalCfg *onu_cfg)
 {
 
@@ -259,11 +259,11 @@
     bcmbal_subscriber_terminal_key key = { };   /**< declare key */
     uint8_t *list_mem;  /**< declare memory buffer for variable-sized lists */
 
-    ASFVOLT_LOG(ASFVOLT_INFO, 
-                    "Processing subscriber terminal cfg get: %d\n",
+    ASFVOLT_LOG(ASFVOLT_INFO,
+                    "Processing subscriber terminal cfg get: %d",
                      onu_cfg->key->sub_term_id);
 
-    if (terminal_key->has_sub_term_id && 
+    if (terminal_key->has_sub_term_id &&
                     terminal_key->has_intf_id)
     {
         key.sub_term_id = terminal_key->sub_term_id ;
@@ -271,10 +271,10 @@
     }
     else
     {
-       ASFVOLT_LOG(ASFVOLT_ERROR, 
-                   "Invalid Key to handle subscriber terminal Cfg Get subscriber_terminal_id(%d), Interface ID(%d)\n",
+       ASFVOLT_LOG(ASFVOLT_ERROR,
+                   "Invalid Key to handle subscriber terminal Cfg Get subscriber_terminal_id(%d), Interface ID(%d)",
                    key.sub_term_id, key.intf_id);
- 
+
         return BAL_ERRNO__BAL_ERR_PARM;
     }
 
@@ -288,8 +288,8 @@
     if (list_mem == NULL)
     {
 
-       ASFVOLT_LOG(ASFVOLT_ERROR, 
-                   "Memory allocation failed while handling subscriber terminal cfg get subscriber_terminal_id(%d), Interface ID(%d)\n",
+       ASFVOLT_LOG(ASFVOLT_ERROR,
+                   "Memory allocation failed while handling subscriber terminal cfg get subscriber_terminal_id(%d), Interface ID(%d)",
                    key.sub_term_id, key.intf_id);
         return BAL_ERRNO__BAL_ERR_NOMEM;
     }
@@ -301,13 +301,13 @@
     err = bcmbal_cfg_get(DEFAULT_ATERM_ID, &cfg.hdr);
     if (err != BCM_ERR_OK)
     {
-       ASFVOLT_LOG(ASFVOLT_ERROR, 
-                   "Failed to get information from BAL subscriber_terminal_id(%d), Interface ID(%d)\n",
+       ASFVOLT_LOG(ASFVOLT_ERROR,
+                   "Failed to get information from BAL subscriber_terminal_id(%d), Interface ID(%d)",
                    key.sub_term_id, key.intf_id);
         return BAL_ERRNO__BAL_ERR_INTERNAL;
     }
 
-    ASFVOLT_LOG(ASFVOLT_INFO, 
-                  "To-Do. Send subscriber terminal details to Adapter\n");
+    ASFVOLT_LOG(ASFVOLT_INFO,
+                  "To-Do. Send subscriber terminal details to Adapter");
     return BAL_ERRNO__BAL_ERR_OK;
 }
diff --git a/src/bal_tmqueue_hdlr.c b/src/bal_tmqueue_hdlr.c
index 75f26ce..0e7e03b 100755
--- a/src/bal_tmqueue_hdlr.c
+++ b/src/bal_tmqueue_hdlr.c
@@ -43,29 +43,29 @@
     }
     else
     {
-       ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to configure the tm queue cfg(OLT): Missing Key values\
-                                   Recevied key values Id(%d), Sched-Dir(%d), Sched-Id(%d) \n", 
+       ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to configure the tm queue cfg(OLT): Missing Key values "
+                                  "Received key values Id(%d), Sched-Dir(%d), Sched-Id(%d)",
                                    tm_queue_cfg->key->sched_id, tm_queue_cfg->key->sched_dir, tm_queue_cfg->key->id);
        return BAL_ERRNO__BAL_ERR_NOENT;
     }
 
-    ASFVOLT_LOG(ASFVOLT_DEBUG, "Configuration of OLT(tm Queue) starts\n");
+    ASFVOLT_LOG(ASFVOLT_DEBUG, "Configuration of OLT(tm Queue) starts");
 
     /* init the API struct */
     BCMBAL_CFG_INIT(&tm_queue_obj, tm_queue, key);
 
     /* decode API parameters from GRPC */
-    ASFVOLT_CFG_PROP_SET(tm_queue_obj, tm_queue, priority, 
-                         tm_queue_cfg->data->has_priority, 
+    ASFVOLT_CFG_PROP_SET(tm_queue_obj, tm_queue, priority,
+                         tm_queue_cfg->data->has_priority,
                          tm_queue_cfg->data->priority);
-    ASFVOLT_CFG_PROP_SET(tm_queue_obj, tm_queue, weight, 
-                         tm_queue_cfg->data->has_weight, 
+    ASFVOLT_CFG_PROP_SET(tm_queue_obj, tm_queue, weight,
+                         tm_queue_cfg->data->has_weight,
                          tm_queue_cfg->data->weight);
-    ASFVOLT_CFG_PROP_SET(tm_queue_obj, tm_queue, creation_mode, 
-                         tm_queue_cfg->data->has_creation_mode, 
+    ASFVOLT_CFG_PROP_SET(tm_queue_obj, tm_queue, creation_mode,
+                         tm_queue_cfg->data->has_creation_mode,
                          tm_queue_cfg->data->creation_mode);
-    ASFVOLT_CFG_PROP_SET(tm_queue_obj, tm_queue, ref_count, 
-                         tm_queue_cfg->data->has_ref_count, 
+    ASFVOLT_CFG_PROP_SET(tm_queue_obj, tm_queue, ref_count,
+                         tm_queue_cfg->data->has_ref_count,
                          tm_queue_cfg->data->ref_count);
 
     /* rating/shaping */
@@ -165,12 +165,12 @@
 
     if(BCM_ERR_OK != err)
     {
-        ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to configure the tm Queue Cfg(OLT)\n");
+        ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to configure the tm Queue Cfg(OLT)");
         return err;
     }
 
-    ASFVOLT_LOG(ASFVOLT_INFO, "\nSet tm Queue configuration sent to OLT. \
-                               Queue ID(%d) Sched ID(%d) Sched Dir(%d)\n", 
+    ASFVOLT_LOG(ASFVOLT_INFO, "Set tm Queue configuration sent to OLT. "
+                              "Queue ID(%d) Sched ID(%d) Sched Dir(%d)",
                                key.id, key.sched_id, key.sched_dir );
     return err;
 }
@@ -186,7 +186,7 @@
     bcmos_errno err = BCM_ERR_OK;
     bcmbal_tm_queue_cfg tm_queue_obj;   /**< declare main API struct */
     bcmbal_tm_queue_key key = { };      /**< declare key */
-    
+
     if((tm_queue_key->has_id) && (tm_queue_key->has_sched_id) && (tm_queue_key->has_sched_dir))
     {
        key.id = tm_queue_key->id;
@@ -195,13 +195,13 @@
     }
     else
     {
-       ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to clear the tm queue cfg(OLT): Missing Key values\
-                                   Recevied key values Id(%d), Sched-Dir(%d), Sched-Id(%d) \n", 
+       ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to clear the tm queue cfg(OLT): Missing Key values "
+                                  "Received key values Id(%d), Sched-Dir(%d), Sched-Id(%d) ",
                                    tm_queue_key->sched_id, tm_queue_key->sched_dir, tm_queue_key->id);
        return BAL_ERRNO__BAL_ERR_NOENT;
     }
 
-    ASFVOLT_LOG(ASFVOLT_DEBUG, "Clearing of OLT(tm Queue) starts\n");
+    ASFVOLT_LOG(ASFVOLT_DEBUG, "Clearing of OLT(tm Queue) starts");
 
     /* init the API struct */
     BCMBAL_CFG_INIT(&tm_queue_obj, tm_queue, key);
@@ -210,12 +210,12 @@
 
     if(BCM_ERR_OK != err)
     {
-        ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to clear the tm Queue Cfg(OLT)\n");
+        ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to clear the tm Queue Cfg(OLT)");
         return err;
     }
 
-    ASFVOLT_LOG(ASFVOLT_INFO, "\nClear tm Queue sent to OLT. \
-                               Queue ID(%d) Sched ID(%d) Sched Dir(%d)\n", 
+    ASFVOLT_LOG(ASFVOLT_INFO, "Clear tm Queue sent to OLT. "
+                              "Queue ID(%d) Sched ID(%d) Sched Dir(%d)",
                                key.id, key.sched_id, key.sched_dir );
     return err;
 }
@@ -231,7 +231,7 @@
     bcmos_errno err = BCM_ERR_OK;
     bcmbal_tm_queue_cfg tm_queue_obj;   /**< declare main API struct */
     bcmbal_tm_queue_key key = { };      /**< declare key */
-    
+
     if((tm_queue_key->has_id) && (tm_queue_key->has_sched_id) && (tm_queue_key->has_sched_dir))
     {
        key.id = tm_queue_key->id;
@@ -240,13 +240,13 @@
     }
     else
     {
-       ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to get the tm queue cfg(OLT): Missing Key values\
-                                   Recevied key values Id(%d), Sched-Dir(%d), Sched-Id(%d) \n", 
+       ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to get the tm queue cfg(OLT): Missing Key values "
+                                  "Received key values Id(%d), Sched-Dir(%d), Sched-Id(%d)",
                                    tm_queue_key->sched_id, tm_queue_key->sched_dir, tm_queue_key->id);
        return BAL_ERRNO__BAL_ERR_NOENT;
     }
 
-    ASFVOLT_LOG(ASFVOLT_DEBUG, "Get tm queue cfg(for OLT) starts\n");
+    ASFVOLT_LOG(ASFVOLT_DEBUG, "Get tm queue cfg(for OLT) starts");
 
     /* init the API struct */
     BCMBAL_CFG_INIT(&tm_queue_obj, tm_queue, key);
@@ -258,12 +258,12 @@
 
     if(BCM_ERR_OK != err)
     {
-        ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to get the tm Queue Cfg(OLT)\n");
+        ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to get the tm Queue Cfg(OLT)");
         return err;
     }
 
-    ASFVOLT_LOG(ASFVOLT_INFO, "\nGet tm Queue sent to OLT. \
-                               Queue ID(%d) Sched ID(%d) Sched Dir(%d)\n", 
+    ASFVOLT_LOG(ASFVOLT_INFO, "Get tm Queue sent to OLT. "
+                              "Queue ID(%d) Sched ID(%d) Sched Dir(%d)",
                                key.id, key.sched_id, key.sched_dir );
     return err;
 }
@@ -277,11 +277,9 @@
 bcmos_errno bal_tm_queue_cfg_indication_cb(bcmbal_obj *obj)
 {
     bcmos_errno result = BCM_ERR_OK;
-    ASFVOLT_LOG(ASFVOLT_INFO, "Processing API \'%s\' IND callback (status is %s)\n",
+    ASFVOLT_LOG(ASFVOLT_INFO, "Processing API \'%s\' IND callback (status is %s)",
 		    bcmbal_objtype_str(obj->obj_type),
 		    bcmos_strerror(obj->status));
-    
+
     return result;
 }
-
-
diff --git a/src/bal_tmsched_hdlr.c b/src/bal_tmsched_hdlr.c
index 1ed1b01..73c738b 100755
--- a/src/bal_tmsched_hdlr.c
+++ b/src/bal_tmsched_hdlr.c
@@ -33,7 +33,7 @@
     bcmos_errno err = BCM_ERR_OK;
     bcmbal_tm_sched_cfg tm_sched_obj;   /**< declare main API struct */
     bcmbal_tm_sched_key key = { };      /**< declare key */
-    
+
     if((tm_sched_cfg->key->has_dir) && (tm_sched_cfg->key->has_id))
     {
        key.dir = tm_sched_cfg->key->dir;
@@ -41,13 +41,13 @@
     }
     else
     {
-       ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to configure the tm schedule cfg(OLT): Missing Key values\
-                                   Recevied key values Sched-Dir(%d), Sched-Id(%d) \n", 
+       ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to configure the tm schedule cfg(OLT): Missing Key values "
+                                  "Received key values Sched-Dir(%d), Sched-Id(%d)",
                                    tm_sched_cfg->key->dir, tm_sched_cfg->key->id);
        return BAL_ERRNO__BAL_ERR_NOENT;
     }
 
-    ASFVOLT_LOG(ASFVOLT_DEBUG, "Configuration of OLT(tm Sched) starts\n");
+    ASFVOLT_LOG(ASFVOLT_DEBUG, "Configuration of OLT(tm Sched) starts");
     /* init the API struct */
     BCMBAL_CFG_INIT(&tm_sched_obj, tm_sched, key);
 
@@ -124,8 +124,8 @@
        ASFVOLT_CFG_PROP_SET(tm_sched_obj, tm_sched, owner, BCMOS_TRUE, valtmScOwn);
     }
 
-    ASFVOLT_CFG_PROP_SET(tm_sched_obj, tm_sched, sched_type, 
-                         tm_sched_cfg->data->has_sched_type, 
+    ASFVOLT_CFG_PROP_SET(tm_sched_obj, tm_sched, sched_type,
+                         tm_sched_cfg->data->has_sched_type,
                          tm_sched_cfg->data->sched_type);
 
     /* scheduler parent */
@@ -137,22 +137,22 @@
        if(schedPar->has_sched_id)
        {
           valSchedPar.sched_id = schedPar->sched_id;
-       } 
+       }
        if(schedPar->has_priority)
        {
           valSchedPar.priority = schedPar->priority;
-       } 
+       }
        if(schedPar->has_weight)
        {
           valSchedPar.weight = schedPar->weight;
-       } 
+       }
        ASFVOLT_CFG_PROP_SET(tm_sched_obj, tm_sched, sched_parent, BCMOS_TRUE, valSchedPar);
     }
-     
-    ASFVOLT_CFG_PROP_SET(tm_sched_obj, tm_sched, sched_child_type, 
-                         tm_sched_cfg->data->has_sched_child_type, 
+
+    ASFVOLT_CFG_PROP_SET(tm_sched_obj, tm_sched, sched_child_type,
+                         tm_sched_cfg->data->has_sched_child_type,
                          tm_sched_cfg->data->sched_child_type);
-   
+
     /* rating/shaping */
     BalTmShaping *balShaping = (BalTmShaping *)tm_sched_cfg->data->rate;
     bcmbal_tm_shaping val = {};
@@ -176,7 +176,7 @@
 
     /* Extended itu dba parameters */
     BalExtendedItuDba *tItuDba = (BalExtendedItuDba *)tm_sched_cfg->data->ext_itu_dba;
-    bcmbal_extended_itu_dba valItuDda = {}; 
+    bcmbal_extended_itu_dba valItuDda = {};
     if (tItuDba != NULL && tItuDba->has_presence_mask)
     {
        valItuDda.presence_mask = tItuDba->presence_mask;
@@ -204,13 +204,13 @@
     }
 
     /* Creation mode */
-    ASFVOLT_CFG_PROP_SET(tm_sched_obj, tm_sched, creation_mode, 
-                         tm_sched_cfg->data->has_creation_mode, 
+    ASFVOLT_CFG_PROP_SET(tm_sched_obj, tm_sched, creation_mode,
+                         tm_sched_cfg->data->has_creation_mode,
                          tm_sched_cfg->data->creation_mode);
 
     /* Extended epon dba parameters */
     BalExtendedEponDba *teponDba = (BalExtendedEponDba*)tm_sched_cfg->data->ext_epon_dba;
-    bcmbal_extended_epon_dba valeponDda = {}; 
+    bcmbal_extended_epon_dba valeponDda = {};
     if (teponDba != NULL && teponDba->has_presence_mask)
     {
        valeponDda.presence_mask = teponDba->presence_mask;
@@ -258,13 +258,13 @@
        valQueues.val = (bcmbal_tm_queue_id *)malloc((valQueues.len)*sizeof(bcmbal_tm_queue_id));
        if(!valQueues.val)
        {
-          ASFVOLT_LOG(ASFVOLT_ERROR, 
-                     "Failed to configure the tm scheduler cfg(OLT): Memory Exhausted\n");
+          ASFVOLT_LOG(ASFVOLT_ERROR,
+                     "Failed to configure the tm scheduler cfg(OLT): Memory Exhausted");
           return BAL_ERRNO__BAL_ERR_NOMEM;
        }
-       memcpy((void *)valQueues.val, (const void *)balQueues->val, 
+       memcpy((void *)valQueues.val, (const void *)balQueues->val,
               (balQueues->n_val)*sizeof(uint32_t));
-       ASFVOLT_CFG_PROP_SET(tm_sched_obj, tm_sched, queues, BCMOS_TRUE, valQueues); 
+       ASFVOLT_CFG_PROP_SET(tm_sched_obj, tm_sched, queues, BCMOS_TRUE, valQueues);
     }
 
     /* Subsidiary schedulers */
@@ -276,29 +276,29 @@
        valSubScheds.val = (uint32_t *)malloc((valSubScheds.len)*sizeof(uint32_t));
        if(!valSubScheds.val)
        {
-          ASFVOLT_LOG(ASFVOLT_ERROR, 
-                     "Failed to configure the tm scheduler cfg(OLT): Memory Exhausted\n");
+          ASFVOLT_LOG(ASFVOLT_ERROR,
+                     "Failed to configure the tm scheduler cfg(OLT): Memory Exhausted");
           return BAL_ERRNO__BAL_ERR_NOMEM;
        }
-       memcpy((void *)valSubScheds.val, (const void *)balSubScheds->val, 
+       memcpy((void *)valSubScheds.val, (const void *)balSubScheds->val,
               (balSubScheds->n_val)*sizeof(uint32_t));
-       ASFVOLT_CFG_PROP_SET(tm_sched_obj, tm_sched, sub_scheds, BCMOS_TRUE, valSubScheds); 
+       ASFVOLT_CFG_PROP_SET(tm_sched_obj, tm_sched, sub_scheds, BCMOS_TRUE, valSubScheds);
     }
 
-    ASFVOLT_CFG_PROP_SET(tm_sched_obj, tm_sched, num_priorities, 
-                         tm_sched_cfg->data->has_num_priorities, 
+    ASFVOLT_CFG_PROP_SET(tm_sched_obj, tm_sched, num_priorities,
+                         tm_sched_cfg->data->has_num_priorities,
                          tm_sched_cfg->data->num_priorities);
 
     err = bcmbal_cfg_set(DEFAULT_ATERM_ID, &(tm_sched_obj.hdr));
 
     if(BCM_ERR_OK != err)
     {
-        ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to configure the tm scheduler Cfg(OLT)\n");
+        ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to configure the tm scheduler Cfg(OLT)");
         return err;
     }
 
-    ASFVOLT_LOG(ASFVOLT_INFO, "Set tm scheduler configuration sent to OLT. \
-                               Sched ID(%d) Sched Dir(%d)\n", key.id, key.dir);
+    ASFVOLT_LOG(ASFVOLT_INFO, "Set tm scheduler configuration sent to OLT. "
+                              "Sched ID(%d) Sched Dir(%d)", key.id, key.dir);
     return err;
 }
 
@@ -313,7 +313,7 @@
     bcmos_errno err = BCM_ERR_OK;
     bcmbal_tm_sched_cfg tm_sched_obj;   /**< declare main API struct */
     bcmbal_tm_sched_key key = { };      /**< declare key */
-    
+
     if((tm_sched_cfg->key->has_dir) && (tm_sched_cfg->key->has_id))
     {
        key.dir = tm_sched_cfg->key->dir;
@@ -321,14 +321,14 @@
     }
     else
     {
-       ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to get the tm schedule cfg(OLT): Missing Key values\
-                                   Recevied key values Sched-Dir(%d), Sched-Id(%d) \n", 
+       ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to get the tm schedule cfg(OLT): Missing Key values "
+                                  "Received key values Sched-Dir(%d), Sched-Id(%d)",
                                    tm_sched_cfg->key->dir, tm_sched_cfg->key->id);
        return BAL_ERRNO__BAL_ERR_NOENT;
     }
-    
 
-    ASFVOLT_LOG(ASFVOLT_DEBUG, "Gem tm scheduler cfg (for OLT) starts\n");
+
+    ASFVOLT_LOG(ASFVOLT_DEBUG, "Gem tm scheduler cfg (for OLT) starts");
 
     /* init the API struct */
     BCMBAL_CFG_INIT(&tm_sched_obj, tm_sched, key);
@@ -340,12 +340,12 @@
 
     if(BCM_ERR_OK != err)
     {
-        ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to get the tm scheduler Cfg(OLT)\n");
+        ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to get the tm scheduler Cfg(OLT)");
         return err;
     }
 
-    ASFVOLT_LOG(ASFVOLT_INFO, "Get tm scheduler cfg sent to OLT. \
-                               Sched ID(%d) Sched Dir(%d)\n", key.id, key.dir);
+    ASFVOLT_LOG(ASFVOLT_INFO, "Get tm scheduler cfg sent to OLT. "
+                              "Sched ID(%d) Sched Dir(%d)", key.id, key.dir);
     return err;
 }
 
@@ -360,7 +360,7 @@
     bcmos_errno err = BCM_ERR_OK;
     bcmbal_tm_sched_cfg tm_sched_obj;   /**< declare main API struct */
     bcmbal_tm_sched_key key = { };      /**< declare key */
-    
+
     if((tm_sched_key->has_dir) && (tm_sched_key->has_id))
     {
        key.dir = tm_sched_key->dir;
@@ -368,13 +368,13 @@
     }
     else
     {
-       ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to clear the tm schedule cfg(OLT): Missing Key values\
-                                   Recevied key values Sched-Dir(%d), Sched-Id(%d) \n", 
+       ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to clear the tm schedule cfg(OLT): Missing Key values "
+                                  "Received key values Sched-Dir(%d), Sched-Id(%d)",
                                    tm_sched_key->dir, tm_sched_key->id);
        return BAL_ERRNO__BAL_ERR_NOENT;
     }
 
-    ASFVOLT_LOG(ASFVOLT_DEBUG, "Clear tm scheduler cfg(for OLT) starts\n");
+    ASFVOLT_LOG(ASFVOLT_DEBUG, "Clear tm scheduler cfg(for OLT) starts");
 
     /* init the API struct */
     BCMBAL_CFG_INIT(&tm_sched_obj, tm_sched, key);
@@ -383,12 +383,12 @@
 
     if(BCM_ERR_OK != err)
     {
-        ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to clear the tm scheduler Cfg(OLT)\n");
+        ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to clear the tm scheduler Cfg(OLT)");
         return err;
     }
 
-    ASFVOLT_LOG(ASFVOLT_INFO, "Clear tm scheduler clear sent to OLT. \
-                               Sched ID(%d) Sched Dir(%d)\n", key.id, key.dir);
+    ASFVOLT_LOG(ASFVOLT_INFO, "Clear tm scheduler clear sent to OLT. "
+                              "Sched ID(%d) Sched Dir(%d)", key.id, key.dir);
     return err;
 }
 
@@ -401,10 +401,10 @@
 bcmos_errno bal_tm_sched_cfg_indication_cb(bcmbal_obj *obj)
 {
     bcmos_errno result = BCM_ERR_OK;
-    ASFVOLT_LOG(ASFVOLT_INFO, "Processing API (%s) IND callback status is (%s)\n",
+    ASFVOLT_LOG(ASFVOLT_INFO, "Processing API (%s) IND callback status is (%s)",
 		    bcmbal_objtype_str(obj->obj_type),
 		    bcmos_strerror(obj->status));
-    
+
     return result;
 }
 
