diff --git a/agent/common/core.h b/agent/common/core.h
index f19e3aa..47666ac 100644
--- a/agent/common/core.h
+++ b/agent/common/core.h
@@ -63,6 +63,7 @@
 uint32_t GetPortNum_(uint32_t flow_id);
 int get_status_bcm_cli_quit(void);
 uint16_t get_dev_id(void); 
+Status pushOltOperInd(uint32_t intf_id, const char *type, const char *state);
 
 void stats_collection();
 #endif
diff --git a/agent/common/main.cc b/agent/common/main.cc
index 0454337..47fd117 100644
--- a/agent/common/main.cc
+++ b/agent/common/main.cc
@@ -50,16 +50,22 @@
     for (int i = 0; i < NumPonIf_(); i++) {
         status = EnablePonIf_(i);
         if (!status.ok()) {
-            // FIXME - raise alarm to report error in enabling PON
+            // raise alarm to report error in enabling PON
+            pushOltOperInd(i, "pon", "down");
         }
+        else
+            pushOltOperInd(i, "pon", "up");
     }
     sleep(2);
     // Enable all NNI interfaces.
     for (int i = 0; i < NumNniIf_(); i++) {
         status = EnableUplinkIf_(i);
         if (!status.ok()) {
-            // FIXME - raise alarm to report error in enabling PON
+            // raise alarm to report error in enabling PON
+            pushOltOperInd(i, "nni", "down");
         }
+        else
+            pushOltOperInd(i, "nni", "up");
     }
 
     RunServer();
diff --git a/agent/src/core.cc b/agent/src/core.cc
index fde14a4..999601e 100644
--- a/agent/src/core.cc
+++ b/agent/src/core.cc
@@ -312,7 +312,7 @@
     return queue_map.count(key) > 0 ? true: false;
 }
 
-char* openolt_read_sysinfo(char* field_name, char* field_val)
+char* openolt_read_sysinfo(const char* field_name, char* field_val)
 {
    FILE *fp;
    /* Prepare the command*/
@@ -455,6 +455,19 @@
     return Status::OK;
 }
 
+Status pushOltOperInd(uint32_t intf_id, const char *type, const char *state)
+{
+	 openolt::Indication ind;
+	 openolt::IntfOperIndication* intf_oper_ind = new openolt::IntfOperIndication;
+
+	 intf_oper_ind->set_type(type);
+	 intf_oper_ind->set_intf_id(intf_id);
+	 intf_oper_ind->set_oper_state(state);
+	 ind.set_allocated_intf_oper_ind(intf_oper_ind);
+	 oltIndQ.push(ind);
+    return Status::OK;
+}
+
 #define CLI_HOST_PROMPT_FORMAT "BCM.%u> "
 
 /* Build CLI prompt */
@@ -651,12 +664,8 @@
     Status status = DisableUplinkIf_(nni_intf_id);
     if (status.ok()) {
         state.deactivate();
-        openolt::Indication ind;
-        openolt::OltIndication* olt_ind = new openolt::OltIndication;
-        olt_ind->set_oper_state("down");
-        ind.set_allocated_olt_ind(olt_ind);
         BCM_LOG(INFO, openolt_log_id, "Disable OLT, add an extra indication\n");
-        oltIndQ.push(ind);
+        pushOltOperInd(nni_intf_id, "nni", "up");
     }
     return status;
 
@@ -666,12 +675,8 @@
     Status status = EnableUplinkIf_(0);
     if (status.ok()) {
         state.activate();
-        openolt::Indication ind;
-        openolt::OltIndication* olt_ind = new openolt::OltIndication;
-        olt_ind->set_oper_state("up");
-        ind.set_allocated_olt_ind(olt_ind);
         BCM_LOG(INFO, openolt_log_id, "Reenable OLT, add an extra indication\n");
-        oltIndQ.push(ind);
+        pushOltOperInd(0, "nni", "up");
     }
     return status;
 }
diff --git a/agent/src/indications.cc b/agent/src/indications.cc
index ad71cee..eb7570f 100644
--- a/agent/src/indications.cc
+++ b/agent/src/indications.cc
@@ -59,6 +59,9 @@
        ((state == BCMOLT_RESULT_SUCCESS) ? BCMOS_TRUE : BCMOS_FALSE)
 #define ONU_RANGING_STATE_IF_DOWN(state) \
        ((state != BCMOLT_RESULT_SUCCESS) ? BCMOS_TRUE : BCMOS_FALSE)
+#define SET_OPER_STATE(indication,state) \
+       (INTERFACE_STATE_IF_UP(state)) ? indication->set_oper_state("up") : \
+       indication->set_oper_state("down")
 
 std::string bcmbal_to_grpc_intf_type(bcmolt_interface_type intf_type)
 {
@@ -159,10 +162,7 @@
                         &((bcmolt_pon_interface_state_change_completed*)msg)->data;
 
                     intf_ind->set_intf_id(key->pon_ni);
-				        if (INTERFACE_STATE_IF_UP(data->new_state))
-                        intf_ind->set_oper_state("up");
-                    if (INTERFACE_STATE_IF_DOWN(data->new_state))
-                        intf_ind->set_oper_state("down");
+                    SET_OPER_STATE(intf_ind, data->new_state);
                     ind.set_allocated_intf_ind(intf_ind);
                     break;
                 }
@@ -180,10 +180,7 @@
                         &((bcmolt_nni_interface_state_change *)msg)->data;
 
                     intf_ind->set_intf_id(key->id);
-				        if (INTERFACE_STATE_IF_UP(data->new_state))
-                        intf_ind->set_oper_state("up");
-                    if (INTERFACE_STATE_IF_DOWN(data->new_state))
-                        intf_ind->set_oper_state("down");
+                    SET_OPER_STATE(intf_ind, data->new_state);
                     ind.set_allocated_intf_ind(intf_ind);
                     break;
                 }
@@ -207,11 +204,7 @@
                     bcmolt_pon_interface_state_change_completed_data *data = &((bcmolt_pon_interface_state_change_completed*)msg)->data;
                     intf_oper_ind->set_intf_id(key->pon_ni);
                     intf_oper_ind->set_type(bcmbal_to_grpc_intf_type(BCMOLT_INTERFACE_TYPE_PON));
-			           if (INTERFACE_STATE_IF_UP(data->new_state))
-                        intf_oper_ind->set_oper_state("up");
-                    if (INTERFACE_STATE_IF_DOWN(data->new_state))
-                        intf_oper_ind->set_oper_state("down");
-
+                    SET_OPER_STATE(intf_oper_ind, data->new_state);
                     BCM_LOG(INFO, openolt_log_id, "intf oper state indication, intf_type %s, intf_id %d, oper_state %s\n",
                         intf_oper_ind->type().c_str(), key->pon_ni, intf_oper_ind->oper_state().c_str());
                     ind.set_allocated_intf_oper_ind(intf_oper_ind);
@@ -228,12 +221,7 @@
                     bcmolt_interface_type intf_type = BCMOLT_INTERFACE_TYPE_NNI;
                     intf_oper_ind->set_intf_id(key->id);
                     intf_oper_ind->set_type(bcmbal_to_grpc_intf_type(BCMOLT_INTERFACE_TYPE_NNI));
-
-                    if (INTERFACE_STATE_IF_UP(data->new_state))
-                        intf_oper_ind->set_oper_state("up");
-                    if (INTERFACE_STATE_IF_DOWN(data->new_state))
-                        intf_oper_ind->set_oper_state("down");
-                    
+                    SET_OPER_STATE(intf_oper_ind, data->new_state);           
                     BCM_LOG(INFO, openolt_log_id, "intf oper state indication, intf_type %s, intf_id %d, oper_state %s\n",
                         intf_oper_ind->type().c_str(), key->id, intf_oper_ind->oper_state().c_str());
                     ind.set_allocated_intf_oper_ind(intf_oper_ind);
@@ -361,17 +349,17 @@
                     bcmolt_onu_key *key = &((bcmolt_onu_ranging_completed*)msg)->key;
                     bcmolt_onu_ranging_completed_data *data = &((bcmolt_onu_ranging_completed*)msg)->data;
 
-                    BCM_LOG(INFO, openolt_log_id, "onu indication, pon_ni %d, onu_id %d, onu_state %s\n", 
-                        key->pon_ni, key->onu_id, (data->status==BCMOLT_RESULT_SUCCESS)?"up":"down");
-
                     onu_ind->set_intf_id(key->pon_ni);
                     onu_ind->set_onu_id(key->onu_id);
                     if (ONU_RANGING_STATE_IF_UP(data->status))
                         onu_ind->set_oper_state("up");
                     if (ONU_RANGING_STATE_IF_DOWN(data->status))
                         onu_ind->set_oper_state("down");
-
+                    (key->onu_id)?onu_ind->set_admin_state("up"):onu_ind->set_admin_state("down");
                     ind.set_allocated_onu_ind(onu_ind);
+                    BCM_LOG(INFO, openolt_log_id, "onu indication, pon_ni %d, onu_id %d, onu_state %s, onu_admin %s\n", 
+                        key->pon_ni, key->onu_id, (data->status==BCMOLT_RESULT_SUCCESS)?"up":"down",
+                        (key->onu_id)?"up":"down");
                 }
             }
     }
@@ -797,14 +785,6 @@
         return Status(grpc::StatusCode::INTERNAL, 
             "PON Interface operations state change indication subscribe failed");
 
-    rx_cfg.obj_type = BCMOLT_OBJ_ID_PON_INTERFACE;
-    rx_cfg.rx_cb = IfIndication;
-    rx_cfg.flags = BCMOLT_AUTO_FLAGS_NONE;
-    rx_cfg.subgroup = bcmolt_pon_interface_auto_subgroup_state_change_completed;
-    rc = bcmolt_ind_subscribe(current_device, &rx_cfg);
-    if(rc != BCM_ERR_OK)
-        return Status(grpc::StatusCode::INTERNAL, "PON Interface indication subscribe failed");
-
     rx_cfg.obj_type = BCMOLT_OBJ_ID_NNI_INTERFACE;
     rx_cfg.rx_cb = IfOperIndication;
     rx_cfg.flags = BCMOLT_AUTO_FLAGS_NONE;
@@ -814,14 +794,6 @@
         return Status(grpc::StatusCode::INTERNAL, 
             "NNI Interface operations state change indication subscribe failed");
 
-    rx_cfg.obj_type = BCMOLT_OBJ_ID_NNI_INTERFACE;
-    rx_cfg.rx_cb = IfIndication;
-    rx_cfg.flags = BCMOLT_AUTO_FLAGS_NONE;
-    rx_cfg.subgroup = bcmolt_nni_interface_auto_subgroup_state_change;
-    rc = bcmolt_ind_subscribe(current_device, &rx_cfg);
-    if(rc != BCM_ERR_OK)
-        return Status(grpc::StatusCode::INTERNAL, "NNI Interface indication subscribe failed");
-
     rx_cfg.obj_type = BCMOLT_OBJ_ID_ONU;
     rx_cfg.rx_cb = OnuAlarmIndication;
     rx_cfg.flags = BCMOLT_AUTO_FLAGS_NONE;
@@ -864,15 +836,6 @@
         return Status(grpc::StatusCode::INTERNAL, "onu indication subscribe failed");
 
     rx_cfg.obj_type = BCMOLT_OBJ_ID_ONU;
-    rx_cfg.rx_cb = OnuOperIndication;
-    rx_cfg.flags = BCMOLT_AUTO_FLAGS_NONE;
-    rx_cfg.subgroup = bcmolt_onu_auto_subgroup_state_change;
-    rc = bcmolt_ind_subscribe(current_device, &rx_cfg);
-    if(rc != BCM_ERR_OK)
-        return Status(grpc::StatusCode::INTERNAL, 
-            "onu operational state change indication subscribe failed");
-
-    rx_cfg.obj_type = BCMOLT_OBJ_ID_ONU;
     rx_cfg.rx_cb = OnuStartupFailureIndication;
     rx_cfg.flags = BCMOLT_AUTO_FLAGS_NONE;
     rx_cfg.subgroup = bcmolt_onu_auto_subgroup_sufi;
