diff --git a/sm5/VERSION b/sm5/VERSION
index 920a1396648024dd8985b3cafa24d7156e3b2610..c739b42c4d2ce23786c5350641d0adbf5fa7d6b2 100644
--- a/sm5/VERSION
+++ b/sm5/VERSION
@@ -1 +1 @@
-43
+44
diff --git a/sm5/ataprint.c b/sm5/ataprint.c
index 7ff6c631bfb47345bbe80bab045c40208255e433..5a2fb37ad6bff0f08cec79ed156d1fdf8d23eef0 100644
--- a/sm5/ataprint.c
+++ b/sm5/ataprint.c
@@ -30,7 +30,7 @@
 #include "smartctl.h"
 #include "extern.h"
 
-const char *CVSid2="$Id: ataprint.c,v 1.43 2002/11/07 19:07:20 ballen4705 Exp $"
+const char *CVSid2="$Id: ataprint.c,v 1.44 2002/11/14 14:57:20 ballen4705 Exp $"
 CVSID1 CVSID2 CVSID3 CVSID6;
 
 // for passing global control variables
@@ -505,13 +505,19 @@ void ataPrintSmartErrorlog (struct ata_smart_errorlog *data){
     return;
   }
   QUIETON(con);
-  // if log pointer out of range, return
-  if ( data->error_log_pointer>5 ){
+  // If log pointer out of range, return
+  if (data->error_log_pointer>5){
     pout("Invalid Error Log index = %02x (T13/1321D rev 1c"
 	 "Section 8.41.6.8.2.2 gives valid range from 1 to 5)\n\n",
 	 (int)data->error_log_pointer);
     return;
   }
+
+  // Some internal consistency checking of the data structures
+  if ((data->ata_error_count-data->error_log_pointer)%5) {
+    pout("Warning: ATA error count %d inconsistent with error log pointer %d\n\n",
+	 data->ata_error_count,data->error_log_pointer);
+  }
   
   // starting printing error log info
   if (data->ata_error_count<=5)
@@ -553,7 +559,7 @@ void ataPrintSmartErrorlog (struct ata_smart_errorlog *data){
       // See table 42 of ATA5 spec
       QUIETON(con);
       pout("Error %d occurred at disk power-on lifetime: %d hours\n",
-	     (int)(5-k), (int)data->errorlog_struct[i].error_struct.timestamp);
+	     (int)(data->ata_error_count+k-4), (int)data->errorlog_struct[i].error_struct.timestamp);
       QUIETOFF(con);
       pout("When the command that caused the error occurred, the device was %s.\n",msgstate);
       pout("After command completion occurred, registers were:\n");
diff --git a/sm5/ataprint.cpp b/sm5/ataprint.cpp
index a83265312a588175aacb79cd4303e7a56ca70fe4..eac4d660d4a43cdddc9366bd12dbd1c7f72fe313 100644
--- a/sm5/ataprint.cpp
+++ b/sm5/ataprint.cpp
@@ -30,7 +30,7 @@
 #include "smartctl.h"
 #include "extern.h"
 
-const char *CVSid2="$Id: ataprint.cpp,v 1.43 2002/11/07 19:07:20 ballen4705 Exp $"
+const char *CVSid2="$Id: ataprint.cpp,v 1.44 2002/11/14 14:57:20 ballen4705 Exp $"
 CVSID1 CVSID2 CVSID3 CVSID6;
 
 // for passing global control variables
@@ -505,13 +505,19 @@ void ataPrintSmartErrorlog (struct ata_smart_errorlog *data){
     return;
   }
   QUIETON(con);
-  // if log pointer out of range, return
-  if ( data->error_log_pointer>5 ){
+  // If log pointer out of range, return
+  if (data->error_log_pointer>5){
     pout("Invalid Error Log index = %02x (T13/1321D rev 1c"
 	 "Section 8.41.6.8.2.2 gives valid range from 1 to 5)\n\n",
 	 (int)data->error_log_pointer);
     return;
   }
+
+  // Some internal consistency checking of the data structures
+  if ((data->ata_error_count-data->error_log_pointer)%5) {
+    pout("Warning: ATA error count %d inconsistent with error log pointer %d\n\n",
+	 data->ata_error_count,data->error_log_pointer);
+  }
   
   // starting printing error log info
   if (data->ata_error_count<=5)
@@ -553,7 +559,7 @@ void ataPrintSmartErrorlog (struct ata_smart_errorlog *data){
       // See table 42 of ATA5 spec
       QUIETON(con);
       pout("Error %d occurred at disk power-on lifetime: %d hours\n",
-	     (int)(5-k), (int)data->errorlog_struct[i].error_struct.timestamp);
+	     (int)(data->ata_error_count+k-4), (int)data->errorlog_struct[i].error_struct.timestamp);
       QUIETOFF(con);
       pout("When the command that caused the error occurred, the device was %s.\n",msgstate);
       pout("After command completion occurred, registers were:\n");