Index: plugins/oa_soap/oa_soap_calls.c
===================================================================
--- plugins/oa_soap/oa_soap_calls.c	(revision 7289)
+++ plugins/oa_soap/oa_soap_calls.c	(working copy)
@@ -1154,6 +1154,11 @@
         if ((node = soap_walk_tree(events, "enclosureInfo"))) {
                 result->enum_eventInfo = ENCLOSUREINFO;
                 parse_enclosureInfo(node, &(result->eventData.enclosureInfo));
+                if ((node = soap_walk_tree(events, "powerSubsystemInfo"))) {
+                        result->eventData.enclosureInfo.powerType = 
+                                soap_enum(powerSystemType_S,
+                                     soap_tree_value(node, "subsystemType"));
+                }
                 return;
         }
 
@@ -1417,7 +1422,19 @@
 int soap_getEnclosureInfo(SOAP_CON *con,
                           struct enclosureInfo *response)
 {
+        xmlNode *node=NULL;
         SOAP_PARM_CHECK_NRQ
+        if (! (ret = soap_request(con, GET_POWER_SUBSYSTEM_INFO))) {
+                node = soap_walk_doc(con->doc,
+                                     "Body:"
+                                     "getPowerSubsystemInfoResponse:"
+                                     "powerSubsystemInfo");
+                response->powerType = soap_enum(powerSystemType_S,
+                                                    soap_tree_value(node,
+                                                    "subsystemType"));
+
+        } 
+	
         if (! (ret = soap_request(con, GET_ENCLOSURE_INFO))) {
                 parse_enclosureInfo(soap_walk_doc(con->doc,
                                                   "Body:"
Index: plugins/oa_soap/oa_soap_calls.h
===================================================================
--- plugins/oa_soap/oa_soap_calls.h	(revision 7289)
+++ plugins/oa_soap/oa_soap_calls.h	(working copy)
@@ -1069,6 +1069,7 @@
         char *pduPartNumber;
         char *pduSparePartNumber;
         xmlNode *extraData;             /* Items are struct extraDataInfo */
+        int powerType; 
 };
 
 struct oaStatus
Index: plugins/oa_soap/oa_soap_inventory.c
===================================================================
--- plugins/oa_soap/oa_soap_inventory.c	(revision 7289)
+++ plugins/oa_soap/oa_soap_inventory.c	(working copy)
@@ -1314,6 +1314,8 @@
         struct oa_soap_handler *oa_handler = NULL;
         SaHpiResourceIdT resource_id;
         SaHpiRptEntryT *rpt = NULL;
+        char *telco_status = NULL;
+        char *power_type = NULL;
 
         if (oh_handler == NULL || response == NULL || rdr == NULL ||
             inventory == NULL) {
@@ -1456,6 +1458,71 @@
                         local_inventory->info.area_list->idr_area_head.
                         NumFields++;
                 }
+
+                switch(response->powerType){
+                        case 0: telco_status = "Telco_Status: UNKNOWN";
+                                power_type = "Power_Type: NO_OP";
+                                break;
+                        case 1: telco_status = "Telco_Status: UNKNOWN";
+                                power_type = "Power_Type: UNKNOWN";
+                                break;
+                        case 2: telco_status = "Telco_Status: FALSE";
+                                power_type = "Power_Type: INTERNAL_AC";
+                                break;
+                        case 3: telco_status = "Telco_Status: TRUE";
+                                power_type = "Power_Type: INTERNAL_DC";
+                                break;
+                        case 4: telco_status = "Telco_Status: TRUE";
+                                power_type = "Power_Type: EXTERNAL_DC";
+                                break;
+                        default : break;
+                }
+
+                /* Add the telco status field if the enclosure hardware info
+                 * is available
+                 */
+                if (telco_status != NULL) {
+                        memset(&hpi_field, 0, sizeof(SaHpiIdrFieldT));
+                        hpi_field.AreaId = local_inventory->info.area_list->
+                                           idr_area_head.AreaId;
+                        hpi_field.Type = SAHPI_IDR_FIELDTYPE_CUSTOM;
+                        strcpy ((char *)hpi_field.Field.Data, telco_status);
+
+                        rv = idr_field_add(&(local_inventory->info.area_list
+                                           ->field_list),
+                                           &hpi_field);
+                        if (rv != SA_OK) {
+                                err("Add idr field failed");
+                                return rv;
+                        }
+
+                        /* Increment the field counter */
+                        local_inventory->info.area_list->idr_area_head.
+                        NumFields++;
+                }
+
+                /* Add the power type field if the enclosure hardware info
+                 * is available
+                 */
+                if (power_type != NULL) {
+                        memset(&hpi_field, 0, sizeof(SaHpiIdrFieldT));
+                        hpi_field.AreaId = local_inventory->info.area_list->
+                                           idr_area_head.AreaId;
+                        hpi_field.Type = SAHPI_IDR_FIELDTYPE_CUSTOM;
+                        strcpy ((char *)hpi_field.Field.Data, power_type);
+
+                        rv = idr_field_add(&(local_inventory->info.area_list
+                                           ->field_list),
+                                           &hpi_field);
+                        if (rv != SA_OK) {
+                                err("Add idr field failed");
+                                return rv;
+                        }
+                
+                        /* Increment the field counter */
+                        local_inventory->info.area_list->idr_area_head.
+                        NumFields++;
+                }
         }
         return SA_OK;
 }
