diff --git a/protos/voltha_protos/openolt.proto b/protos/voltha_protos/openolt.proto
index 318f352..755c706 100755
--- a/protos/voltha_protos/openolt.proto
+++ b/protos/voltha_protos/openolt.proto
@@ -232,12 +232,23 @@
     }
 
     /* 
-     * GetObjects gets takes in type of the object and request details as argument.
-     * Returns the Object from the device.
+     * GetOnuInfo takes Onu id, serialnumber, and pon interface as argument from the onu structure.
+     * Returns the Onu info from the device.
      */
-    rpc GetObject(ObjectDataRequest) returns (ObjectDataResponse) {
+    rpc GetOnuInfo(Onu) returns (OnuInfo) {
         option (google.api.http) = {
-          post: "/v1/GetObject"
+          post: "/v1/GetOnuInfo"
+          body: "*"
+        };
+    }
+
+    /*
+     * GetPonInterfaceInfo takes the pon intf id as argument.
+     * Returns the pon interface information from the device.
+     */
+    rpc GetPonInterfaceInfo(Interface) returns (PonIntfInfo) {
+        option (google.api.http) = {
+          post: "/v1/GetInterfaceInfo"
           body: "*"
         };
     }
@@ -814,45 +825,40 @@
  * contains the onu id, state of the onu and the information about the alarms on the onu.
  * As of now only few alarms are added, any further information needed can be added to the structure.
  */
-message OnuObjectData {
+message OnuInfo {
     fixed32        onu_id  = 1;
-    enum OnuObjState {
-        NOT_CONFIGURED = 0;
-        ACTIVE         = 1;
-        INACTIVE       = 2;
+    enum OnuState {
+        /*
+         * There are other states in BAL for ONU, which voltha is not interested as of now.
+         * UNKNOWN is to be filled for the rest of the states other than NOT_CONFIGURED/ACTIVE/INACTIVE/DISABLED
+         */
+        UNKNOWN        = 0;
+        NOT_CONFIGURED = 1;
+        ACTIVE         = 2;
+        INACTIVE       = 3;
+        DISABLED       = 4;
     }
-    OnuObjState   state = 2;
+    OnuState      state = 2;
     AlarmState    losi = 3;
     AlarmState    lofi = 4;
+    AlarmState    loami = 5;
 }
 
 /*
- * IntfObjectData has the interface Id and if there are any alarms active on that interface.
+ * IntfInfo has the interface Id and if there are any alarms active on that interface.
  * Any further information needed from the interface object can be added to the structure.
  */
-message IntfObjectData {
+message PonIntfInfo {
     fixed32      intf_id = 1;
-    AlarmState   los = 2;
+    enum PonIntfState {
+        UNKNOWN        = 0;
+        ACTIVE_WORKING = 1;
+        ACTIVE_STANDBY = 2;
+        INACTIVE       = 3;
+        DISABLED       = 4;
+    }
+    PonIntfState state = 3;
+    AlarmState   los = 4;
 }
 
-/*
- * ObjectDataResponse would have one of the responses of the requested object
- */
-message ObjectDataResponse {
-    oneof data {
-        OnuObjectData   onu_object_data = 2;
-        IntfObjectData  intf_object_data = 3;
-    }
-}
-
-/*
- * Object data request would contain request for one of the objects ONU/INTERFACE/SCHEDULERS/QUEUES
- * As of now only ONU and INTERFACE objects are defined.
- */
-message ObjectDataRequest {
-    oneof data {
-        Onu            onu_object_data = 1;
-        Interface      int_object_data = 2;
-    }
-}
 message Empty {}
