diff --git a/protos/openolt.proto b/protos/openolt.proto
index c9f6d98..93c64c1 100644
--- a/protos/openolt.proto
+++ b/protos/openolt.proto
@@ -79,7 +79,8 @@
     fixed32 intf_id = 1;
     fixed32 onu_id = 2;
     string oper_state = 3;      // up, down
-    SerialNumber serial_number = 4;
+    string admin_state = 4;     // up, down
+    SerialNumber serial_number = 5;
 }
 
 message IntfOperIndication {
diff --git a/src/indications.cc b/src/indications.cc
index da63fc7..298f51f 100644
--- a/src/indications.cc
+++ b/src/indications.cc
@@ -103,7 +103,7 @@
     openolt::Indication ind;
     openolt::IntfOperIndication* intf_oper_ind = new openolt::IntfOperIndication;
     std::cout << "intf oper state indication, intf_id:"
-              << ((bcmbal_interface_ind *)obj)->key.intf_id
+              << ((bcmbal_interface_oper_status_change *)obj)->key.intf_id
               << " type:" << ((bcmbal_interface_oper_status_change *)obj)->key.intf_type
               << " oper_state:" << ((bcmbal_interface_oper_status_change *)obj)->data.new_oper_status
               << " admin_state:" << ((bcmbal_interface_oper_status_change *)obj)->data.admin_state
@@ -139,7 +139,40 @@
 
 bcmos_errno OnuDyingGaspIndication(bcmbal_obj *obj) {
     openolt::Indication ind;
-    std::cout << "onu dying-gasp indication" << std::endl;
+    openolt::OnuIndication* onu_ind = new openolt::OnuIndication;
+    openolt::SerialNumber* serial_number = new openolt::SerialNumber;
+
+    bcmbal_subscriber_terminal_key *key =
+        &(((bcmbal_subscriber_terminal_dgi*)obj)->key);
+
+    bcmbal_subscriber_terminal_dgi_data *data =
+        &(((bcmbal_subscriber_terminal_dgi*)obj)->data);
+
+
+    std::cout << "onu dying-gasp indication, intf_id:"
+         << key->intf_id
+         << ", onu_id:"
+         << key->sub_term_id
+         << ", alarm: "
+         << data->dgi_status << std::endl;
+
+    onu_ind->set_intf_id(key->intf_id);
+    onu_ind->set_onu_id(key->sub_term_id);
+    const char* zeros4 = "0000";
+    const char* zeros8 = "00000000";
+    serial_number->set_vendor_id(zeros4);
+    serial_number->set_vendor_specific(zeros8);
+    onu_ind->set_allocated_serial_number(serial_number);
+    //ONU is dying, set operating state to down
+    onu_ind->set_oper_state("down");
+    //TODO: set admin state to unknow ? For now assume that it is up otherwise
+    //we would not have received the alarm
+    onu_ind->set_admin_state("up");
+
+
+    ind.set_allocated_onu_ind(onu_ind);
+
+    oltIndQ.push(ind);
     return BCM_ERR_OK;
 }
 
@@ -195,6 +228,17 @@
     serial_number->set_vendor_id(reinterpret_cast<const char *>(in_serial_number->vendor_id), 4);
     serial_number->set_vendor_specific(reinterpret_cast<const char *>(in_serial_number->vendor_specific), 8);
     onu_ind->set_allocated_serial_number(serial_number);
+    if (data->oper_status == BCMBAL_STATE_UP) {
+        onu_ind->set_oper_state("up");
+    } else {
+        onu_ind->set_oper_state("down");
+    }
+    if (data->admin_state == BCMBAL_STATE_UP) {
+        onu_ind->set_admin_state("up");
+    } else {
+        onu_ind->set_admin_state("down");
+    }
+
     ind.set_allocated_onu_ind(onu_ind);
 
     oltIndQ.push(ind);
@@ -203,7 +247,46 @@
 
 bcmos_errno OnuOperIndication(bcmbal_obj *obj) {
     openolt::Indication ind;
-    std::cout << "onu oper state indication" << std::endl;
+    openolt::OnuIndication* onu_ind = new openolt::OnuIndication;
+    openolt::SerialNumber* serial_number = new openolt::SerialNumber;
+
+    bcmbal_subscriber_terminal_key *key =
+        &(((bcmbal_subscriber_terminal_oper_status_change*)obj)->key);
+
+    bcmbal_subscriber_terminal_oper_status_change_data *data =
+        &(((bcmbal_subscriber_terminal_oper_status_change*)obj)->data);
+
+
+    std::cout << "onu oper state indication, intf_id:"
+         << key->intf_id
+         << " onu_id: "
+         << key->sub_term_id
+         << " old oper state: "
+         << data->old_oper_status
+         << " new oper state:"
+         << data->new_oper_status << std::endl;
+
+    onu_ind->set_intf_id(key->intf_id);
+    onu_ind->set_onu_id(key->sub_term_id);
+    const char* zeros4 = "0000";
+    const char* zeros8 = "00000000";
+    serial_number->set_vendor_id(zeros4);
+    serial_number->set_vendor_specific(zeros8);
+    onu_ind->set_allocated_serial_number(serial_number);
+    if (data->new_oper_status == BCMBAL_STATE_UP) {
+        onu_ind->set_oper_state("up");
+    } else {
+        onu_ind->set_oper_state("down");
+    }
+    if (data->admin_state == BCMBAL_STATE_UP) {
+        onu_ind->set_admin_state("up");
+    } else {
+        onu_ind->set_admin_state("down");
+    }
+
+    ind.set_allocated_onu_ind(onu_ind);
+
+    oltIndQ.push(ind);
     return BCM_ERR_OK;
 }
 
