diff --git a/src/bal_access_terminal_hdlr.c b/src/bal_access_terminal_hdlr.c
index cebd418..153fcf9 100755
--- a/src/bal_access_terminal_hdlr.c
+++ b/src/bal_access_terminal_hdlr.c
@@ -42,7 +42,8 @@
     BCMBAL_CFG_INIT(&acc_term_obj, access_terminal, key);
 
     /* decode API parameters from CLI */
-    ASFVOLT_CFG_PROP_SET(acc_term_obj, access_terminal, admin_state, BCMOS_TRUE, BCMBAL_STATE_UP);
+    ASFVOLT_CFG_PROP_SET(acc_term_obj, access_terminal, admin_state, BCMOS_TRUE,
+                         access_term_cfg->data->admin_state);
 
     err = bcmbal_cfg_set(DEFAULT_ATERM_ID, &(acc_term_obj.hdr));
 
@@ -52,7 +53,7 @@
         return BAL_ERRNO__BAL_ERR_INTERNAL;
     }
 
-    ASFVOLT_LOG(ASFVOLT_INFO, "Access Terminal UP configuration sent to OLT");
+    ASFVOLT_LOG(ASFVOLT_INFO, "Access Terminal %d sent to OLT", access_term_cfg->data->admin_state);
     return BAL_ERRNO__BAL_ERR_OK;
 }
 
diff --git a/src/bal_indications_hdlr.c b/src/bal_indications_hdlr.c
index 312c5a6..fdd9bf3 100755
--- a/src/bal_indications_hdlr.c
+++ b/src/bal_indications_hdlr.c
@@ -1366,7 +1366,8 @@
 		      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_DEBUG, "ONU Activation:After decoding:Vendor id is %s", 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",
@@ -1379,7 +1380,10 @@
 		      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_DEBUG, "ONU Activation:After decoding:Vendor specific is %s", 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);
+      ASFVOLT_LOG(ASFVOLT_DEBUG, "ONU Activation:After decoding:Registration ID is %s",
+                  balIndCfg->terminal_ind->data->registration_id);
 
       BalIdList *balAggportList;
       balAggportList = malloc(sizeof(BalIdList));
diff --git a/src/bal_interface_hdlr.c b/src/bal_interface_hdlr.c
index 707f3fd..f59be37 100755
--- a/src/bal_interface_hdlr.c
+++ b/src/bal_interface_hdlr.c
@@ -36,62 +36,59 @@
     intf_key.intf_id = interface_cfg->key->intf_id;
     intf_key.intf_type = interface_cfg->key->intf_type;
 
+    ASFVOLT_LOG(ASFVOLT_DEBUG, "Setting Interface ID(%d) Interface Type(%d) to Admin state(%d)",
+                                intf_key.intf_id, intf_key.intf_type,
+                                interface_cfg->data->admin_state);
 
     /*
      * Set the key in the interface object and initialize the object itself
      */
     BCMBAL_CFG_INIT(&interface_obj, interface, intf_key);
 
-    bcmbal_cfg_get(DEFAULT_ATERM_ID, &(interface_obj.hdr));
+    ASFVOLT_CFG_PROP_SET(interface_obj, interface, admin_state, BCMOS_TRUE,
+                         interface_cfg->data->admin_state);
 
-    if(BCMBAL_STATUS_UP != ((bcmbal_interface_cfg *)&interface_obj.hdr)->data.oper_status)
+    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,
+                         interface_cfg->data->min_data_svc_port_id);
+
+    ASFVOLT_CFG_PROP_SET(interface_obj, interface, transceiver_type,
+                         BCMOS_TRUE,
+                         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->ds_miss_mode);
+
+    ASFVOLT_CFG_PROP_SET(interface_obj, interface, 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->flow_control);
+
+    ASFVOLT_CFG_PROP_SET(interface_obj, interface, 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->us_tm);
+
+    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)
     {
-        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,
-                               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,
-                               interface_cfg->data->min_data_svc_port_id);
-
-        ASFVOLT_CFG_PROP_SET(interface_obj, interface, transceiver_type,
-                               BCMOS_TRUE,
-                               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->ds_miss_mode);
-
-        ASFVOLT_CFG_PROP_SET(interface_obj, interface, 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->flow_control);
-
-        ASFVOLT_CFG_PROP_SET(interface_obj, interface, 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->us_tm);
-
-        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");
-            return BAL_ERRNO__BAL_ERR_INTERNAL;
-        }
+        ASFVOLT_LOG(ASFVOLT_ERROR, "Failed to configure the interface object to ADMIN-UP");
+        return BAL_ERRNO__BAL_ERR_INTERNAL;
     }
     ASFVOLT_LOG(ASFVOLT_DEBUG, "Set Interface configuration sent to OLT.Interface ID(%d) Interface Type(%d)",
                                 intf_key.intf_id, intf_key.intf_type);
diff --git a/src/bal_tmqueue_hdlr.c b/src/bal_tmqueue_hdlr.c
index 0e7e03b..eb52db9 100755
--- a/src/bal_tmqueue_hdlr.c
+++ b/src/bal_tmqueue_hdlr.c
@@ -54,24 +54,26 @@
     /* 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,
-                         tm_queue_cfg->data->priority);
-    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,
-                         tm_queue_cfg->data->creation_mode);
-    ASFVOLT_CFG_PROP_SET(tm_queue_obj, tm_queue, ref_count,
-                         tm_queue_cfg->data->has_ref_count,
-                         tm_queue_cfg->data->ref_count);
-
+    if (NULL != tm_queue_cfg->data)
+    {
+	    /* decode API parameters from GRPC */
+	    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,
+			    tm_queue_cfg->data->weight);
+	    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,
+			    tm_queue_cfg->data->ref_count);
+    }
     /* rating/shaping */
     BalTmShaping *balShaping = (BalTmShaping *)tm_queue_cfg->data->rate;
     bcmbal_tm_shaping val = {};
-    if (balShaping->has_presence_mask)
+    if ((NULL != balShaping) && (balShaping->has_presence_mask))
     {
        val.presence_mask = balShaping->presence_mask;
        if (balShaping->has_cir)
@@ -92,7 +94,7 @@
     /* bac - Buffer addmission Control */
     BalTmBac *balBac = (BalTmBac *)tm_queue_cfg->data->bac;
     bcmbal_tm_bac valBac = {};
-    if(balBac->has_type)
+    if((NULL != balBac) && (balBac->has_type))
     {
        valBac.type = balBac->type;
        switch(valBac.type)
