diff --git a/sm5/CHANGELOG b/sm5/CHANGELOG
index 5bf311fa5aa214a3761a33ddfa962f224b5b87b4..cb53711894fc8811f9e882aec37b822ca529a033 100644
--- a/sm5/CHANGELOG
+++ b/sm5/CHANGELOG
@@ -1,6 +1,6 @@
 CHANGELOG for smartmontools
 
-$Id: CHANGELOG,v 1.746 2008/10/24 19:29:15 chrfranke Exp $
+$Id: CHANGELOG,v 1.747 2008/10/24 21:43:12 manfred99 Exp $
 
 The most recent version of this file is:
 http://smartmontools.cvs.sourceforge.net/smartmontools/sm5/CHANGELOG?view=markup
@@ -40,6 +40,11 @@ NOTES FOR FUTURE RELEASES: see TODO file.
 
 <DEVELOPERS: ADDITIONS TO THE CHANGE LOG GO JUST BELOW HERE, PLEASE>
 
+  [MS] Workaround for huge raw values of Reallocated_Sector_Ct and
+       Reallocated_Event_Ct for newer Fujitsu disks (only the lower
+       16 bits seem to be meaningful). Clip the display to 16 bits
+       and show the remaining part, if existent, in parens. Patch by [CF].
+
   [CF] smartd DEVICESCAN: Fix autodetection of SAT devices.
        Thanks to Stanislav Brabec for bug report and testing.
 
diff --git a/sm5/atacmds.cpp b/sm5/atacmds.cpp
index 97b1a424dc45c19683daece2a0b8d0ba6ba708ab..e24a75ba26409153a4f3e226c048dbe678b5a17d 100644
--- a/sm5/atacmds.cpp
+++ b/sm5/atacmds.cpp
@@ -39,7 +39,7 @@
 
 #include <algorithm> // std::sort
 
-const char *atacmds_c_cvsid="$Id: atacmds.cpp,v 1.208 2008/10/11 14:18:07 chrfranke Exp $"
+const char *atacmds_c_cvsid="$Id: atacmds.cpp,v 1.209 2008/10/24 21:43:12 manfred99 Exp $"
 ATACMDS_H_CVSID CONFIG_H_CVSID EXTERN_H_CVSID INT64_H_CVSID SCSIATA_H_CVSID UTILITY_H_CVSID;
 
 // for passing global control variables
@@ -1836,6 +1836,12 @@ int64_t ataPrintSmartAttribRawValue(char *out,
     if (word[1])
       out+=sprintf(out, " (Average %d)", word[1]);
     break;
+    // reallocated sector count
+  case 5:
+    out+=sprintf(out, "%u", word[0]);
+    if (word[1] || word[2])
+      out+=sprintf(out, " (%u, %u)", word[2], word[1]);
+    break;
     // Power on time
   case 9:
     if (select==1){
@@ -1891,6 +1897,12 @@ int64_t ataPrintSmartAttribRawValue(char *out,
     else
       ataPrintTemperatureValue(out, attribute->raw, word);
     break;
+    // reallocated event count
+  case 196:
+    out+=sprintf(out, "%u", word[0]);
+    if (word[1] || word[2])
+      out+=sprintf(out, " (%u, %u)", word[2], word[1]);
+    break;
   default:
     out+=sprintf(out, "%"PRIu64, rawvalue);
   }