Index: include/SaHpiOaSoap.h
===================================================================
--- include/SaHpiOaSoap.h	(revision 7342)
+++ include/SaHpiOaSoap.h	(working copy)
@@ -256,12 +256,16 @@
  * plugin/oa_soap/oa_soap_resources.c may require updation.
  */
 /* Fan Zone field type for storing the device bays */
-#define OA_SOAP_INV_FZ_DEV_BAY			(SaHpiIdrIdT)	  0x100
+#define OA_SOAP_INV_FZ_DEV_BAY                \
+            ((SaHpiIdrFieldTypeT)(SAHPI_IDR_FIELDTYPE_CUSTOM + 0x100))
 /* Fan Zone field type for storing the fan bays */
-#define OA_SOAP_INV_FZ_FAN_BAY			(SaHpiIdrIdT)	  0x101
+#define OA_SOAP_INV_FZ_FAN_BAY                \
+            ((SaHpiIdrFieldTypeT)(SAHPI_IDR_FIELDTYPE_CUSTOM + 0x101))
 /* Fan field type for storing the shared status */
-#define OA_SOAP_INV_FAN_SHARED			(SaHpiIdrIdT)	  0x102
+#define OA_SOAP_INV_FAN_SHARED                \
+            ((SaHpiIdrFieldTypeT)(SAHPI_IDR_FIELDTYPE_CUSTOM + 0x102))
 /* Fan field type for storing the Fan zone number */
-#define OA_SOAP_INV_FZ_NUM			(SaHpiIdrIdT)	  0x103
+#define OA_SOAP_INV_FZ_NUM                    \
+            ((SaHpiIdrFieldTypeT)(SAHPI_IDR_FIELDTYPE_CUSTOM + 0x103))
 
 #endif
Index: utils/sahpi_enum_utils.c
===================================================================
--- utils/sahpi_enum_utils.c	(revision 7342)
+++ utils/sahpi_enum_utils.c	(working copy)
@@ -2220,7 +2220,7 @@
         case SAHPI_IDR_FIELDTYPE_UNSPECIFIED:
                 return "UNSPECIFIED";
         default:
-                return NULL;
+                return oh_lookup_sahpiidrfieldtype(value);
         }
 }
 
@@ -2271,7 +2271,7 @@
 		*type = idrfieldtype_strings[i].entity_type;
 	}
 	else {
-		return(SA_ERR_HPI_INVALID_DATA);
+                return(oh_encode_sahpiidrfieldtype(buffer, type));
 	}
 	
 	return(SA_OK);
@@ -4996,3 +4996,82 @@
 	return(SA_OK);
 }
 
+/**
+ * oh_lookup_sahpiidrfieldtype:
+ * @value: enum value of type SaHpiIdrFieldTypeT.
+ *
+ * Converts @value into a string based on @value's HPI enum definition.
+ *
+ * Returns:
+ * string - normal operation.
+ * NULL - if @value not a valid SaHpiIdrFieldTypeT.
+ **/
+
+char * oh_lookup_sahpiidrfieldtype(SaHpiIdrFieldTypeT value)
+{
+        switch (value) {
+        case OA_SOAP_INV_FZ_DEV_BAY:
+                return "FAN_DEVICE_BAY";
+        case OA_SOAP_INV_FZ_FAN_BAY:
+                return "FAN_BAY";
+        case OA_SOAP_INV_FAN_SHARED:
+                return "SHARED_FAN";
+        case OA_SOAP_INV_FZ_NUM:
+                return "FAN_ZONE_NUMBER";
+        default:
+                return NULL;
+        }
+}
+
+struct oh_sahpiidrfieldtype_map sahpiidrfieldtype_strings[] = {
+       {OA_SOAP_INV_FZ_DEV_BAY, "FAN_DEVICE_BAY"},
+       {OA_SOAP_INV_FZ_FAN_BAY, "FAN_BAY"},
+       {OA_SOAP_INV_FAN_SHARED, "SHARED_FAN"},
+       {OA_SOAP_INV_FZ_NUM, "FAN_ZONE_NUMBER"},
+};
+
+/**
+ * oh_encode_sahpiidrfieldtype:
+ * @buffer: Pointer to SaHpiTextBufferT that contains enum's 
+ * string representation.
+ * @type: Location (of SaHpiIdrFieldTypeT) to place encoded result.
+ *
+ * Converts a @buffer->Data string, generated by 
+ * oh_lookup_sahpiidrfieldtype(), back into an SaHpiIdrFieldTypeT type.
+ *
+ * Returns:
+ * SaHpiIdrFieldTypeT value - normal operation.
+ * SA_ERR_HPI_INVALID_PARAMS - if @buffer or @type is NULL 
+ * or @buffer->Data empty.
+ * SA_ERR_HPI_INVALID_DATA - if @buffer->Data is invalid.
+ **/
+
+SaErrorT oh_encode_sahpiidrfieldtype(SaHpiTextBufferT *buffer, 
+                                               SaHpiIdrFieldTypeT *type)
+{
+        int i, found;
+
+        if (!buffer || !type || buffer->Data == NULL || 
+                                              buffer->Data[0] == '\0') {
+                return(SA_ERR_HPI_INVALID_PARAMS);
+        }
+
+        found = 0;
+        for (i=0; i<OH_MAX_SAHPIIDRFIELDTYPE; i++) {
+                if (strcasecmp((char *)buffer->Data, 
+                               sahpiidrfieldtype_strings[i].str) == 0) {
+                        found++;
+                        break;
+                }
+        }
+
+        if (found) {
+                *type = sahpiidrfieldtype_strings[i].entity_type;
+        }
+        else {
+                return(SA_ERR_HPI_INVALID_DATA);
+        }
+
+        return(SA_OK);
+}
+
Index: utils/sahpi_enum_utils.h
===================================================================
--- utils/sahpi_enum_utils.h	(revision 7342)
+++ utils/sahpi_enum_utils.h	(working copy)
@@ -471,7 +471,16 @@
 char * oh_lookup_eventcategory(SaHpiEventCategoryT value);
 SaErrorT oh_encode_eventcategory(SaHpiTextBufferT *buffer, SaHpiEventCategoryT *type);
 
+#define OH_MAX_SAHPIIDRFIELDTYPE 4
+extern struct oh_sahpiidrfieldtype_map {
+  SaHpiIdrFieldTypeT  entity_type;
+  char *str;
+} sahpiidrfieldtype_strings[OH_MAX_SAHPIIDRFIELDTYPE];
+char * oh_lookup_sahpiidrfieldtype(SaHpiIdrFieldTypeT value);
+SaErrorT oh_encode_sahpiidrfieldtype(SaHpiTextBufferT *buffer, 
+                                            SaHpiIdrFieldTypeT *type);
 
+
 #ifdef __cplusplus
 }
 #endif
Index: utils/oh_utils.h
===================================================================
--- utils/oh_utils.h	(revision 7342)
+++ utils/oh_utils.h	(working copy)
@@ -33,5 +33,6 @@
 #include <sahpixtca_enum_utils.h>
 #include <sahpiatca_enum_utils.h>
 #include <uid_utils.h>
+#include <SaHpiOaSoap.h>
 
 #endif
