diff -Nur freeipmi-0.8.1_ori/ipmi-dcmi/src/ipmi-dcmi.c freeipmi-0.8.1_HL/ipmi-dcmi/src/ipmi-dcmi.c
--- freeipmi-0.8.1_ori/ipmi-dcmi/src/ipmi-dcmi.c	2009-11-25 16:47:40.000000000 +0100
+++ freeipmi-0.8.1_HL/ipmi-dcmi/src/ipmi-dcmi.c	2009-12-14 16:32:09.531545500 +0100
@@ -751,7 +751,7 @@
 
 /* return 1 on output success, 0 on no output, -1 on error */
 static int
-_get_ehanced_system_power_statistics_attributes (ipmi_dcmi_state_data_t *state_data,
+_get_enhanced_system_power_statistics_attributes (ipmi_dcmi_state_data_t *state_data,
                                                  uint8_t *number_of_supported_rolling_average_time_periods,
                                                  uint8_t *rolling_average_time_periods,
                                                  unsigned int rolling_average_time_periods_buflen)
@@ -928,7 +928,7 @@
 
   assert (state_data);
 
-  if (_get_ehanced_system_power_statistics_attributes (state_data,
+  if (_get_enhanced_system_power_statistics_attributes (state_data,
                                                        &number_of_supported_rolling_average_time_periods,
                                                        rolling_average_time_periods,
                                                        IPMI_DCMI_ROLLING_AVERAGE_TIME_PERIOD_BUFLEN) < 0)
@@ -1116,7 +1116,7 @@
   statistics_reporting_time_period = val;
 
   if (FIID_OBJ_GET (obj_cmd_rs,
-                    "power_measurement",
+                    "power_reading_state.power_measurement",
                     &val) < 0)
     {
       pstdout_fprintf (state_data->pstate,
@@ -1187,7 +1187,7 @@
 
   assert (state_data);
 
-  if (_get_ehanced_system_power_statistics_attributes (state_data,
+  if (_get_enhanced_system_power_statistics_attributes (state_data,
                                                        &number_of_supported_rolling_average_time_periods,
                                                        rolling_average_time_periods,
                                                        IPMI_DCMI_ROLLING_AVERAGE_TIME_PERIOD_BUFLEN) < 0)
@@ -1339,15 +1339,22 @@
     pstdout_printf (state_data->pstate,
                     "Exception Actions                                 : Hard Power Off system (%Xh)\n",
                     exception_actions);
+/* HLiebig: Exception action is not specified as a bit field, therefore commenting this off
   else if (exception_actions & IPMI_DCMI_EXCEPTION_ACTION_HARD_POWER_OFF_SYSTEM)
     pstdout_printf (state_data->pstate,
                     "Exception Actions                                 : Hard Power Off system, OEM actions (%Xh)\n",
                     exception_actions);
-  else
+*/
+  /* See DCMI 1.0 Spec. Section 6.6.2 */
+  else if ((exception_actions >= 2) && (exception_actions <= 0x10))
+    pstdout_printf (state_data->pstate,
+                    "Exception Actions                                 : OEM action (%Xh)\n",
+                    exception_actions);
+   else 
     pstdout_printf (state_data->pstate,
-                    "Exception Actions                                 : OEM actions (%Xh)\n",
+                    "Exception Actions                                 : Unknown action (%Xh)\n",
                     exception_actions);
-    
+   
   pstdout_printf (state_data->pstate,
                   "Power Limit Requested                             : %u watts\n",
                   power_limit_requested);
@@ -1475,6 +1482,7 @@
   int asset_tag_data_len;
   unsigned int asset_tag_data_offset = 0;
   uint8_t total_asset_tag_length = 0;
+  uint8_t bytes_to_read = IPMI_DCMI_ASSET_TAG_NUMBER_OF_BYTES_TO_READ_MAX;
   ipmi_fru_parse_ctx_t fru_parse_ctx = NULL;
   int rv = -1;
 
@@ -1495,9 +1503,15 @@
     {
       uint64_t val;
 
+      if ((asset_tag_data_offset == 0)
+          || ((total_asset_tag_length - asset_tag_data_offset) >= IPMI_DCMI_ASSET_TAG_NUMBER_OF_BYTES_TO_READ_MAX))
+          bytes_to_read = IPMI_DCMI_ASSET_TAG_NUMBER_OF_BYTES_TO_READ_MAX;
+      else 
+          bytes_to_read = total_asset_tag_length - asset_tag_data_offset;
+
       if (ipmi_cmd_dcmi_get_asset_tag (state_data->ipmi_ctx,
                                        asset_tag_data_offset,
-                                       IPMI_DCMI_ASSET_TAG_NUMBER_OF_BYTES_TO_READ_MAX,
+                                       bytes_to_read,
                                        obj_cmd_rs) < 0)
         {
           pstdout_fprintf (state_data->pstate,
@@ -1539,6 +1553,22 @@
         break;
     }
 
+#if 1 /* HLiebig: 
+       * Output as simple English/Latin-1 string, nothing is specified in the 
+       * DCMI 1.0 spec. Also it is not encoded as FRU string as assumed below
+       * (no encoding information defined in spec.)
+       */
+      if (total_asset_tag_length)
+        pstdout_printf (state_data->pstate,
+                        "%s\n",
+                        asset_tag_data);
+      else
+        // TODO: Check against reported DCMI capabilities
+        pstdout_fprintf (state_data->pstate,
+                    stderr,
+                    "No asset tag found\n");
+
+#else
   if (total_asset_tag_length && asset_tag_data_offset)
     {
       char asset_tag[IPMI_DCMI_MAX_ASSET_TAG_LENGTH + 1];
@@ -1558,7 +1588,7 @@
       /* assume english? DCMI spec doesn't state */
       if (ipmi_fru_parse_type_length_field_to_string (fru_parse_ctx,
                                                       asset_tag_data,
-                                                      asset_tag_data_offset,
+                                                      total_asset_tag_length/*asset_tag_data_offset*/,
                                                       IPMI_FRU_LANGUAGE_CODE_ENGLISH,
                                                       asset_tag,
                                                       &asset_tag_len) < 0)
@@ -1575,6 +1605,7 @@
                         "%s\n",
                         asset_tag);
     }
+#endif
 
   rv = 0;
  cleanup:
@@ -1719,6 +1750,7 @@
           pstdout_printf (state_data->pstate,
                           "%u\n",
                           record_id);
+          total_entity_instances_parsed++;
         }
       
       /* achu: entity IDs are returned sequentially?  If not, I'm not
@@ -1726,6 +1758,11 @@
        * start the next time around.  Hopefully this is a correct
        * assumption
        */
+      /* HLiebig: Note: Intel simply increments the offset by 8 (max number of 
+       * SDR Id's per response.
+       * See dcmitool from www.intel.com/go/DCMI (a modified ipmitool)
+       */
+  
       entity_instance_start += number_of_record_ids_in_this_response;
 
       if (total_entity_instances_parsed >= total_number_of_available_instances)
diff -Nur freeipmi-0.8.1_ori/libfreeipmi/src/cmds/ipmi-dcmi-cmds.c freeipmi-0.8.1_HL/libfreeipmi/src/cmds/ipmi-dcmi-cmds.c
--- freeipmi-0.8.1_ori/libfreeipmi/src/cmds/ipmi-dcmi-cmds.c	2009-11-25 16:47:40.000000000 +0100
+++ freeipmi-0.8.1_HL/libfreeipmi/src/cmds/ipmi-dcmi-cmds.c	2009-12-14 16:29:46.672170500 +0100
@@ -186,7 +186,7 @@
     { 8,    "dcmi_specification_conformance.minor_version", FIID_FIELD_REQUIRED | FIID_FIELD_LENGTH_FIXED},
     { 8,    "parameter_revision", FIID_FIELD_REQUIRED | FIID_FIELD_LENGTH_FIXED},
     { 8,    "number_of_supported_rolling_average_time_periods", FIID_FIELD_REQUIRED | FIID_FIELD_LENGTH_FIXED},
-    { 2048, "rolling_average_time_periods", FIID_FIELD_REQUIRED | FIID_FIELD_LENGTH_FIXED},
+    { 2048, "rolling_average_time_periods", FIID_FIELD_OPTIONAL | FIID_FIELD_LENGTH_VARIABLE},
     { 0, "", 0}
   };
 
