diff --git a/src/core.cc b/src/core.cc
index bf2a41e..002783c 100644
--- a/src/core.cc
+++ b/src/core.cc
@@ -38,11 +38,16 @@
 #include <bal_api_end.h>
 // FIXME : dependency problem
 // #include <bcm_common_gpon.h>
+// #include <bcm_dev_log_task.h>
 }
 
+dev_log_id openolt_log_id = bcm_dev_log_id_register("OPENOLT", DEV_LOG_LEVEL_INFO, DEV_LOG_ID_TYPE_BOTH);
+dev_log_id omci_log_id = bcm_dev_log_id_register("OMCI", DEV_LOG_LEVEL_INFO, DEV_LOG_ID_TYPE_BOTH);
+
+
 #define NUM_OF_PON_PORTS 16
 const std::string technology = "xgspon";
-const std::string firmware_version = "BAL.2.6.0.1__Openolt.2018.09.05";
+const std::string firmware_version = "BAL.2.6.0.1__Openolt.2018.09.10";
 
 State state;
 
@@ -90,15 +95,16 @@
     bcmbal_access_terminal_key key = { };
 
     if (!state.is_activated()) {
-        std::cout << "Enable OLT" << std::endl;
+        BCM_LOG(INFO, openolt_log_id, "Enable OLT");
 
         bcmbal_init(argc, argv, NULL);
 
         Status status = SubscribeIndication();
         if (!status.ok()) {
-            std::cout << "ERROR: SubscribeIndication failed - "
-                      << status.error_code() << ": " << status.error_message()
-                      << std::endl;
+            BCM_LOG(ERROR, openolt_log_id, "SubscribeIndication failed - %s : %s\n",
+                grpc_status_code_to_string(status.error_code()).c_str(),
+                status.error_message().c_str());
+
             return status;
         }
 
@@ -107,7 +113,7 @@
         BCMBAL_CFG_PROP_SET(&acc_term_obj, access_terminal, admin_state, BCMBAL_STATE_UP);
         bcmos_errno err = bcmbal_cfg_set(DEFAULT_ATERM_ID, &(acc_term_obj.hdr));
         if (err) {
-            std::cout << "ERROR: Failed to enable OLT" << std::endl;
+            BCM_LOG(ERROR, openolt_log_id, "Failed to enable OLT\n");
             return bcm_to_grpc_err(err, "Failed to enable OLT");
         }
         init_stats();
@@ -144,7 +150,7 @@
         openolt::OltIndication* olt_ind = new openolt::OltIndication;
         olt_ind->set_oper_state("down");
         ind.set_allocated_olt_ind(olt_ind);
-        std::cout << "Disable OLT, add an extra indication" << std::endl;
+        BCM_LOG(INFO, openolt_log_id, "Disable OLT, add an extra indication\n");
         oltIndQ.push(ind);
     }
     return status;
@@ -159,7 +165,7 @@
         openolt::OltIndication* olt_ind = new openolt::OltIndication;
         olt_ind->set_oper_state("up");
         ind.set_allocated_olt_ind(olt_ind);
-        std::cout << "Reenable OLT, add an extra indication" << std::endl;
+        BCM_LOG(INFO, openolt_log_id, "Reenable OLT, add an extra indication\n");
         oltIndQ.push(ind);
     }
     return status;
@@ -177,7 +183,7 @@
 
     bcmos_errno err = bcmbal_cfg_set(DEFAULT_ATERM_ID, &(interface_obj.hdr));
     if (err) {
-        std::cout << "ERROR: Failed to enable PON interface: " << intf_id << std::endl;
+        BCM_LOG(ERROR, openolt_log_id, "Failed to enable PON interface: %d\n", intf_id);
         return bcm_to_grpc_err(err, "Failed to enable PON interface");
     }
 
@@ -196,7 +202,7 @@
 
     bcmos_errno err = bcmbal_cfg_set(DEFAULT_ATERM_ID, &(interface_obj.hdr));
     if (err) {
-        std::cout << "ERROR: Failed to disable Uplink interface: " << intf_id << std::endl;
+        BCM_LOG(ERROR, openolt_log_id, "Failed to disable Uplink interface: %d\n", intf_id);
         return bcm_to_grpc_err(err, "Failed to disable Uplink interface");
     }
 
@@ -215,7 +221,7 @@
 
     bcmos_errno err = bcmbal_cfg_set(DEFAULT_ATERM_ID, &(interface_obj.hdr));
     if (err) {
-        std::cout << "ERROR: Failed to enable Uplink interface: " << intf_id << std::endl;
+        BCM_LOG(ERROR, openolt_log_id, "Failed to enable Uplink interface: %d\n", intf_id);
         return bcm_to_grpc_err(err, "Failed to enable Uplink interface");
     }
 
@@ -234,7 +240,7 @@
 
     bcmos_errno err = bcmbal_cfg_set(DEFAULT_ATERM_ID, &(interface_obj.hdr));
     if (err) {
-        std::cout << "ERROR: Failed to disable PON interface: " << intf_id << std::endl;
+        BCM_LOG(ERROR, openolt_log_id, "Failed to disable PON interface: %d\n", intf_id);
         return bcm_to_grpc_err(err, "Failed to disable PON interface");
     }
 
@@ -250,11 +256,8 @@
     bcmbal_serial_number serial_num = {};
     bcmbal_registration_id registration_id = {};
 
-    std::cout << "Enabling ONU " << onu_id << " on PON " << intf_id << std::endl;
-    std::cout << "Vendor Id " << vendor_id
-              << "Vendor Specific Id " << vendor_specific
-              << "pir " << pir
-              << std::endl;
+    BCM_LOG(INFO, openolt_log_id,  "Enabling ONU %d on PON %d : vendor id %s, vendor specific %s, pir %d\n",
+        onu_id, intf_id, vendor_id, vendor_specific, pir);
 
     subs_terminal_key.sub_term_id = onu_id;
     subs_terminal_key.intf_id = intf_id;
@@ -277,7 +280,7 @@
 
     bcmos_errno err = bcmbal_cfg_set(DEFAULT_ATERM_ID, &(sub_term_obj.hdr));
     if (err) {
-        std::cout << "ERROR: Failed to enable ONU: " << std::endl;
+        BCM_LOG(ERROR, openolt_log_id, "Failed to enable ONU %d on PON %d\n", onu_id, intf_id);
         return bcm_to_grpc_err(err, "Failed to enable ONU");
     }
 
@@ -296,10 +299,8 @@
     bcmbal_subscriber_terminal_cfg sub_term_obj = {};
     bcmbal_subscriber_terminal_key subs_terminal_key;
 
-    std::cout << "Deactivating ONU " << onu_id << " on PON " << intf_id << std::endl;
-    std::cout << "Vendor Id " << vendor_id
-              << "Vendor Specific Id " << vendor_specific
-              << std::endl;
+    BCM_LOG(INFO, openolt_log_id,  "Deactivating ONU %d on PON %d : vendor id %s, vendor specific %s\n",
+        onu_id, intf_id, vendor_id, vendor_specific);
 
     subs_terminal_key.sub_term_id = onu_id;
     subs_terminal_key.intf_id = intf_id;
@@ -308,7 +309,7 @@
     BCMBAL_CFG_PROP_SET(&sub_term_obj, subscriber_terminal, admin_state, BCMBAL_STATE_DOWN);
 
     if (bcmbal_cfg_set(DEFAULT_ATERM_ID, &(sub_term_obj.hdr))) {
-        std::cout << "ERROR: Failed to deactivate ONU: " << std::endl;
+        BCM_LOG(ERROR, openolt_log_id,  "Failed to deactivate ONU %d on PON %d\n", onu_id, intf_id);
         return Status(grpc::StatusCode::INTERNAL, "Failed to deactivate ONU");
     }
 
@@ -337,16 +338,16 @@
     bcmbal_subscriber_terminal_cfg cfg;
     bcmbal_subscriber_terminal_key key = { };
 
-    std::cout << "Processing subscriber terminal cfg clear for sub_term_id = "
-              << onu_id << " and intf_id = " << intf_id << std::endl;
+    BCM_LOG(INFO, openolt_log_id, "Processing subscriber terminal cfg clear for sub_term_id %d  and intf_id %d\n",
+        onu_id, intf_id);
 
     key.sub_term_id = onu_id ;
     key.intf_id = intf_id ;
 
     if (0 == key.sub_term_id)
     {
-            std::cout << "Invalid Key to handle subscriber terminal clear subscriber_terminal_id = "
-                      << onu_id << " Interface ID = " << intf_id << std::endl;
+            BCM_LOG(INFO, openolt_log_id,"Invalid Key to handle subscriber terminal clear subscriber_terminal_id %d, Interface ID %d\n",
+                onu_id, intf_id);
             return Status(grpc::StatusCode::INTERNAL, "Failed to delete ONU");
     }
 
@@ -355,8 +356,8 @@
     err = bcmbal_cfg_clear(DEFAULT_ATERM_ID, &cfg.hdr);
     if (err != BCM_ERR_OK)
     {
-       std::cout << "Failed to clear information for BAL subscriber_terminal_id = "
-                << onu_id << " Interface ID = " << intf_id << std::endl;
+       BCM_LOG(ERROR, openolt_log_id, "Failed to clear information for BAL subscriber_terminal_id %d, Interface ID %d\n",
+            onu_id, intf_id);
         return Status(grpc::StatusCode::INTERNAL, "Failed to delete ONU");
     }
 
@@ -391,10 +392,6 @@
     char str2[MAX_CHAR_LENGTH];
     memset(&arraySend, 0, buf.len);
 
-    // std::cout << "Sending omci msg to ONU of length is "
-    //      << buf.len
-    //      << std::endl;
-
     for (idx1=0,idx2=0; idx1<((buf.len)*2); idx1++,idx2++) {
        sprintf(str1,"%c", pkt[idx1]);
        sprintf(str2,"%c", pkt[++idx1]);
@@ -404,15 +401,15 @@
 
     buf.val = (uint8_t *)malloc((buf.len)*sizeof(uint8_t));
     memcpy(buf.val, (uint8_t *)arraySend, buf.len);
-    //
-    // std::cout << "After converting bytes to hex "
-    //           << buf.val << buf.len << std::endl;
 
     err = bcmbal_pkt_send(0, proxy_pkt_dest, (const char *)(buf.val), buf.len);
 
-    // std::cout << "OMCI request msg of length " << buf.len
-    //           << " sent to ONU" << onu_id
-    //           << " through PON " << intf_id << std::endl;
+    if (err) {
+        BCM_LOG(ERROR, omci_log_id, "Error sending OMCI message to ONU %d on PON %d\n", onu_id, intf_id);
+    } else {
+        BCM_LOG(DEBUG, omci_log_id, "OMCI request msg of length %d sent to ONU %d on PON %d : %s\n",
+            buf.len, onu_id, intf_id, buf.val);
+    }
 
     free(buf.val);
 
@@ -434,9 +431,8 @@
 
     err = bcmbal_pkt_send(0, proxy_pkt_dest, (const char *)(buf.val), buf.len);
 
-    std::cout << "Packet out of length " << buf.len
-              << " sent to ONU" << onu_id
-              << " through PON " << intf_id << std::endl;
+    BCM_LOG(INFO, openolt_log_id, "Packet out of length %d sent to ONU %d on PON %d\n",
+        buf.len, onu_id, intf_id);
 
     free(buf.val);
 
@@ -457,8 +453,8 @@
 
     err = bcmbal_pkt_send(0, proxy_pkt_dest, (const char *)(buf.val), buf.len);
 
-    std::cout << "Packet out of length " << buf.len
-              << " sent through uplink port " << intf_id << std::endl;
+    BCM_LOG(INFO, openolt_log_id, "Packet out of length %d sent through uplink port %d\n",
+        buf.len, intf_id);
 
     free(buf.val);
 
@@ -476,14 +472,8 @@
     bcmbal_flow_cfg cfg;
     bcmbal_flow_key key = { };
 
-    std::cout << "flow add -"
-              << " intf_id:" << access_intf_id
-              << " onu_id:" << onu_id
-              << " flow_id:" << flow_id
-              << " flow_type:" << flow_type
-              << " gemport_id:" << gemport_id
-              << " network_intf_id:" << network_intf_id
-              << std::endl;
+    BCM_LOG(INFO, openolt_log_id, "flow add - intf_id %d, onu_id %d, fow_id %d, `flow_type` %s, gemport_id %d, network_intf_id %d\n",
+        access_intf_id, onu_id, flow_id, flow_type.c_str(), gemport_id, network_intf_id);
 
     key.flow_id = flow_id;
     if (flow_type.compare("upstream") == 0 ) {
@@ -491,7 +481,7 @@
     } else if (flow_type.compare("downstream") == 0) {
         key.flow_type = BCMBAL_FLOW_TYPE_DOWNSTREAM;
     } else {
-        std::cout << "Invalid flow type " << flow_type << std::endl;
+        BCM_LOG(WARNING, openolt_log_id, "Invalid flow type %s\n", flow_type.c_str());
         return bcm_to_grpc_err(BCM_ERR_PARM, "Invalid flow type");
     }
 
@@ -670,7 +660,7 @@
 
     err = bcmbal_cfg_set(DEFAULT_ATERM_ID, &(cfg.hdr));
     if (err) {
-        std::cout << "ERROR: flow add failed" << std::endl;
+        BCM_LOG(ERROR, openolt_log_id,  "Flow add failed\n");
         return bcm_to_grpc_err(err, "flow add failed");
     }
 
@@ -691,7 +681,7 @@
     } else if (flow_type.compare("downstream") == 0) {
         key.flow_type = BCMBAL_FLOW_TYPE_DOWNSTREAM;
     } else {
-        std::cout << "Invalid flow type " << flow_type << std::endl;
+        BCM_LOG(WARNING, openolt_log_id, "Invalid flow type %s\n", flow_type.c_str());
         return bcm_to_grpc_err(BCM_ERR_PARM, "Invalid flow type");
     }
 
@@ -700,12 +690,12 @@
 
     bcmos_errno err = bcmbal_cfg_clear(DEFAULT_ATERM_ID, &cfg.hdr);
     if (err) {
-        std::cout << "Error " << err << " while removing flow "
-            << flow_id << ", " << flow_type << std::endl;
+        BCM_LOG(ERROR, openolt_log_id, "Error %d while removing flow %d, %s\n",
+            err, flow_id, flow_type.c_str());
         return Status(grpc::StatusCode::INTERNAL, "Failed to remove flow");
     }
 
-    std::cout << "Flow " << flow_id << ", " << flow_type << " removed";
+    BCM_LOG(INFO, openolt_log_id, "Flow %d, %s removed\n", flow_id, flow_type.c_str());
     return Status::OK;
 }
 
@@ -745,10 +735,8 @@
 
         err = bcmbal_cfg_set(DEFAULT_ATERM_ID, &cfg.hdr);
         if (err) {
-            std::cout << "ERROR: Failed to create subscriber downstream sched"
-                      << " id:" << key.id
-                      << " intf_id:" << intf_id
-                      << " onu_id:" << onu_id << std::endl;
+            BCM_LOG(ERROR, openolt_log_id, "Failed to create subscriber downstream sched, id %d, intf_id %d, onu_id %d\n",
+                key.id, intf_id, onu_id);
             return bcm_to_grpc_err(err, "Failed to create subscriber downstream sched");
         }
     }
@@ -766,11 +754,8 @@
         err = bcmbal_cfg_set(DEFAULT_ATERM_ID, &cfg.hdr);
 
         if (err) {
-            std::cout << "ERROR: Failed to create subscriber downstream tm queue"
-                      << " id: " << key.id
-                      << " sched_id: " << key.sched_id
-                      << " intf_id: " << intf_id
-                      << " onu_id: " << onu_id << std::endl;
+            BCM_LOG(ERROR, openolt_log_id, "Failed to create subscriber downstream tm queue, id %d, sched_id %d, intf_id %d, onu_id %d\n",
+                key.id, key.sched_id, intf_id, onu_id);
             return bcm_to_grpc_err(err, "Failed to create subscriber downstream tm queue");
         }
 
@@ -807,16 +792,12 @@
 
     err = bcmbal_cfg_set(DEFAULT_ATERM_ID, &(cfg.hdr));
     if (err) {
-        std::cout << "ERROR: Failed to create upstream DBA sched"
-                  << " id:" << key.id
-                  << " intf_id:" << intf_id
-                  << " onu_id:" << onu_id << std::endl;
+        BCM_LOG(ERROR, openolt_log_id, "Failed to create upstream DBA sched, id %d, intf_id %d, onu_id %d\n",
+            key.id, intf_id,  onu_id);
         return bcm_to_grpc_err(err, "Failed to create upstream DBA sched");
     }
-    std::cout << "create upstream DBA sched"
-              << " id:" << key.id
-              << " intf_id:" << intf_id
-              << " onu_id:" << onu_id << std::endl;
+    BCM_LOG(INFO, openolt_log_id, "Create upstream DBA sched, id %d, intf_id %d, onu_id %d\n",
+        key.id,intf_id,onu_id);
 
     return Status::OK;
 }
@@ -841,17 +822,13 @@
 
     err = bcmbal_cfg_clear(DEFAULT_ATERM_ID, &(tm_cfg_us.hdr));
     if (err) {
-        std::cout << "ERROR: Failed to remove upstream DBA sched"
-                << " id:" << tm_key_us.id
-                << " intf_id:" << intf_id
-                << " onu_id:" << onu_id << std::endl;
+        BCM_LOG(ERROR, openolt_log_id, "Failed to remove upstream DBA sched, id %d, intf_id %d, onu_id %d\n",
+            tm_key_us.id, intf_id, onu_id);
         return Status(grpc::StatusCode::INTERNAL, "Failed to remove upstream DBA sched");
     }
 
-    std::cout << "remove upstream DBA sched"
-              << " id:" << tm_key_us.id
-              << " intf_id:" << intf_id
-              << " onu_id:" << onu_id << std::endl;
+    BCM_LOG(INFO, openolt_log_id, "Remove upstream DBA sched, id %d, intf_id %d, onu_id %d\n",
+        tm_key_us.id, intf_id, onu_id);
 
     /* Downstream */
 
@@ -867,19 +844,13 @@
 
     err = bcmbal_cfg_clear(DEFAULT_ATERM_ID, &(queue_cfg.hdr));
     if (err) {
-        std::cout << "ERROR: Failed to remove downstream tm queue"
-                << " id:" << queue_key.id
-                << " sched_id:" << queue_key.sched_id
-                << " intf_id:" << intf_id
-                << " onu_id:" << onu_id << std::endl;
+        BCM_LOG(ERROR, openolt_log_id, "Failed to remove downstream tm queue, id %d, sched_id %d, intf_id %d, onu_id %d\n",
+            queue_key.id, queue_key.sched_id, intf_id, onu_id);
         return Status(grpc::StatusCode::INTERNAL, "Failed to remove downstream tm queue");
     }
 
-    std::cout << "remove upstream DBA sched"
-              << " id:" << queue_key.id
-              << " sched_id:" << queue_key.sched_id
-              << " intf_id:" << intf_id
-              << " onu_id:" << onu_id << std::endl;
+    BCM_LOG(INFO, openolt_log_id, "Remove upstream DBA sched, id %d, sched_id %d, intf_id %d, onu_id %d\n",
+        queue_key.id, queue_key.sched_id, intf_id, onu_id);
 
     // Sheduler
 
@@ -891,17 +862,13 @@
 
     err = bcmbal_cfg_clear(DEFAULT_ATERM_ID, &(tm_cfg_ds.hdr));
     if (err) {
-        std::cout << "ERROR: Failed to remove sub downstream sched"
-                << " id:" << tm_key_us.id
-                << " intf_id:" << intf_id
-                << " onu_id:" << onu_id << std::endl;
+        BCM_LOG(ERROR, openolt_log_id, "Failed to remove sub downstream sched, id %d, intf_id %d, onu_id %d\n",
+            tm_key_us.id, intf_id, onu_id);
         return Status(grpc::StatusCode::INTERNAL, "Failed to remove sub downstream sched");
     }
 
-    std::cout << "remove sub downstream sched"
-              << " id:" << tm_key_us.id
-              << " intf_id:" << intf_id
-              << " onu_id:" << onu_id << std::endl;
+    BCM_LOG(INFO, openolt_log_id, "Remove sub downstream sched, id %d, intf_id %d, onu_id %d\n",
+        tm_key_us.id, intf_id, onu_id);
 
     return Status::OK;
     //return 0;
