diff --git a/protos/openolt.proto b/protos/openolt.proto
index 3e72181..d5a83f2 100644
--- a/protos/openolt.proto
+++ b/protos/openolt.proto
@@ -75,6 +75,14 @@
         PacketIndication pkt_ind = 7;
         PortStatistics port_stats = 8;
         FlowStatistics flow_stats = 9;
+        AlarmIndication alarm_ind= 10;
+    }
+}
+
+message AlarmIndication {
+    oneof data {
+        LosIndication los_ind = 1;
+        DyingGaspIndication dying_gasp_ind = 2;
     }
 }
 
@@ -224,4 +232,15 @@
     fixed32 timestamp = 16;
 }
 
+message LosIndication {
+    fixed32 intf_id = 1;
+    string status = 2;
+}
+
+message DyingGaspIndication {
+    fixed32 intf_id = 1;
+    fixed32 onu_id = 2;
+    string status = 3;
+}
+
 message Empty {}
diff --git a/src/indications.cc b/src/indications.cc
index 3f49fcb..cbde803 100644
--- a/src/indications.cc
+++ b/src/indications.cc
@@ -18,6 +18,8 @@
 #include "core.h"
 #include "utils.h"
 #include "stats_collection.h"
+#include "translation.h"
+#include <string>
 extern "C"
 {
 #include <bcmos_system.h>
@@ -79,7 +81,22 @@
 
 bcmos_errno LosIndication(bcmbal_obj *obj) {
     openolt::Indication ind;
-    std::cout << "LOS indication " << std::endl;
+    openolt::AlarmIndication* alarm_ind = new openolt::AlarmIndication;
+    openolt::LosIndication* los_ind = new openolt::LosIndication;
+
+    bcmbal_interface_los* bcm_los_ind = (bcmbal_interface_los *) obj;
+    int intf_id = interface_key_to_port_no(bcm_los_ind->key);
+    std::string status = alarm_status_to_string(bcm_los_ind->data.status);
+
+    std::cout << "LOS indication : " << intf_id << "  " << status << std::endl;
+
+    los_ind->set_intf_id(intf_id);
+    los_ind->set_status(status);
+
+    alarm_ind->set_allocated_los_ind(los_ind);
+    ind.set_allocated_alarm_ind(alarm_ind);
+
+    oltIndQ.push(ind);
     return BCM_ERR_OK;
 }
 
@@ -143,8 +160,8 @@
 
 bcmos_errno OnuDyingGaspIndication(bcmbal_obj *obj) {
     openolt::Indication ind;
-    openolt::OnuIndication* onu_ind = new openolt::OnuIndication;
-    openolt::SerialNumber* serial_number = new openolt::SerialNumber;
+    openolt::AlarmIndication* alarm_ind = new openolt::AlarmIndication;
+    openolt::DyingGaspIndication* dg_ind = new openolt::DyingGaspIndication;
 
     bcmbal_subscriber_terminal_key *key =
         &(((bcmbal_subscriber_terminal_dgi*)obj)->key);
@@ -160,21 +177,12 @@
          << ", 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");
+    dg_ind->set_intf_id(key->intf_id);
+    dg_ind->set_onu_id(key->sub_term_id);
+    dg_ind->set_status(alarm_status_to_string(data->dgi_status));
 
-
-    ind.set_allocated_onu_ind(onu_ind);
+    alarm_ind->set_allocated_dying_gasp_ind(dg_ind);
+    ind.set_allocated_alarm_ind(alarm_ind);
 
     oltIndQ.push(ind);
     return BCM_ERR_OK;
@@ -247,7 +255,6 @@
 bcmos_errno OnuOperIndication(bcmbal_obj *obj) {
     openolt::Indication ind;
     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);
@@ -267,11 +274,6 @@
 
     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 {
diff --git a/src/translation.cc b/src/translation.cc
new file mode 100644
index 0000000..55daa4c
--- /dev/null
+++ b/src/translation.cc
@@ -0,0 +1,23 @@
+#include "translation.h"
+
+int interface_key_to_port_no(bcmbal_interface_key key) {
+    if (key.intf_type == BCMBAL_INTF_TYPE_NNI) {
+        return 128 + key.intf_id;
+    }
+    if (key.intf_type == BCMBAL_INTF_TYPE_PON) {
+        return (0x2 << 28) + 1;
+    }
+    return key.intf_id;
+}
+
+std::string alarm_status_to_string(bcmbal_alarm_status status) {
+    switch (status) {
+        case BCMBAL_ALARM_STATUS_OFF:
+            return "off";
+        case BCMBAL_ALARM_STATUS_ON:
+            return "on";
+        case BCMBAL_ALARM_STATUS_NO__CHANGE:
+            return "no_change";
+    }
+    return "unknown";
+}
diff --git a/src/translation.h b/src/translation.h
new file mode 100644
index 0000000..ffd476d
--- /dev/null
+++ b/src/translation.h
@@ -0,0 +1,15 @@
+#ifndef OPENOLT_TRANSLATION_H_
+#define OPENOLT_TRANSLATION_H_
+
+#include <string>
+extern "C"
+{
+#include <bal_model_types.h>
+}
+
+int interface_key_to_port_no(bcmbal_interface_key key);
+std::string alarm_status_to_string(bcmbal_alarm_status status);
+
+
+
+#endif
