diff --git a/sm5/atacmds.c b/sm5/atacmds.c
index 05abc696e225c4a527036e6b26d506ffd8a0ae84..7de7c9b9be380834094d8b7103a009e989fa926d 100644
--- a/sm5/atacmds.c
+++ b/sm5/atacmds.c
@@ -29,7 +29,7 @@
 #include <errno.h>
 #include "atacmds.h"
 
-const char *CVSid1="$Id: atacmds.c,v 1.25 2002/10/26 06:44:42 ballen4705 Exp $" CVSID1;
+const char *CVSid1="$Id: atacmds.c,v 1.26 2002/10/26 11:32:33 ballen4705 Exp $" CVSID1;
 
 // These Drive Identity tables are taken from hdparm 5.2, and are also
 // given in the ATA/ATAPI specs for the IDENTIFY DEVICE command.  Note
@@ -163,6 +163,7 @@ int ataReadHDIdentity (int device, struct hd_driveid *buf){
   // Hedrick about this on Oct 17 2002.  Please remove this comment
   // once the fix has made it into the stock kernel tree.
 
+#if 0
   // The following ifdef is a HACK to distinguish different versions
   // of the header file defining hd_driveid
 #ifdef CFA_REQ_EXT_ERROR_CODE
@@ -170,6 +171,15 @@ int ataReadHDIdentity (int device, struct hd_driveid *buf){
 #else
   driveidchecksum=buf->words160_255[95];
 #endif
+#else
+  // This way is ugly and you may feel ill -- but it always works...
+  {
+    unsigned short *rawstructure=
+      (unsigned short *)(parms+HDIO_DRIVE_CMD_HDR_SIZE);
+    driveidchecksum=rawstructure[255];
+  }
+#endif
+
   if ((driveidchecksum & 0x00ff) == 0x00a5){
     // Device identity structure contains a checksum
     unsigned char cksum=0;
diff --git a/sm5/atacmds.cpp b/sm5/atacmds.cpp
index 94b07e7aa4f2d3eeaa84fda999212a1de28b64b5..f1c672b722bc08a620a459a2fa4439aed12270b5 100644
--- a/sm5/atacmds.cpp
+++ b/sm5/atacmds.cpp
@@ -29,7 +29,7 @@
 #include <errno.h>
 #include "atacmds.h"
 
-const char *CVSid1="$Id: atacmds.cpp,v 1.25 2002/10/26 06:44:42 ballen4705 Exp $" CVSID1;
+const char *CVSid1="$Id: atacmds.cpp,v 1.26 2002/10/26 11:32:33 ballen4705 Exp $" CVSID1;
 
 // These Drive Identity tables are taken from hdparm 5.2, and are also
 // given in the ATA/ATAPI specs for the IDENTIFY DEVICE command.  Note
@@ -163,6 +163,7 @@ int ataReadHDIdentity (int device, struct hd_driveid *buf){
   // Hedrick about this on Oct 17 2002.  Please remove this comment
   // once the fix has made it into the stock kernel tree.
 
+#if 0
   // The following ifdef is a HACK to distinguish different versions
   // of the header file defining hd_driveid
 #ifdef CFA_REQ_EXT_ERROR_CODE
@@ -170,6 +171,15 @@ int ataReadHDIdentity (int device, struct hd_driveid *buf){
 #else
   driveidchecksum=buf->words160_255[95];
 #endif
+#else
+  // This way is ugly and you may feel ill -- but it always works...
+  {
+    unsigned short *rawstructure=
+      (unsigned short *)(parms+HDIO_DRIVE_CMD_HDR_SIZE);
+    driveidchecksum=rawstructure[255];
+  }
+#endif
+
   if ((driveidchecksum & 0x00ff) == 0x00a5){
     // Device identity structure contains a checksum
     unsigned char cksum=0;