diff --git a/sm5/AUTHORS b/sm5/AUTHORS
index a07276c1707f3360a31bbfa21d00817ea9f62ba6..6e1a599636fb92957b3bf7b3475462e9c8d07e08 100644
--- a/sm5/AUTHORS
+++ b/sm5/AUTHORS
@@ -1,4 +1,4 @@
-$Id: AUTHORS,v 1.10 2004/03/06 03:13:37 pervalidus Exp $
+$Id: AUTHORS,v 1.11 2004/03/06 19:43:16 ballen4705 Exp $
 
 This code was originally developed as a Senior Thesis by Michael
 Cornwell at the Concurrent Systems Laboratory (now part of the Storage
@@ -19,8 +19,10 @@ Christian Franke	<franke@computer.org>
 Guilhem Fr�zou		<guilhem.frezou@catii.fr>
 Douglas Gilbert		<dougg@torque.net>
 Guido Guenther		<agx@sigxcpu.org>
+Dr. David Kirkby	<drkirkby@ntlworld.com>
 Kai M�kisara		<kai.makisara@kolumbus.fi>
 Eduard Martinescu	<martines@rochester.rr.com>
 Fr�d�ric L. W. Meunier	<http://www.pervalidus.net/contact.html>
+Keiji Sawada		<card_captor@users.sourceforge.net>
+Sergey Svishchev	<svs@ropnet.ru>
 Phil Williams		<phil@subbacultcha.demon.co.uk>
-Sawada Keiji		<card_captor@users.sourceforge.net>
diff --git a/sm5/CHANGELOG b/sm5/CHANGELOG
index 85799be1340e16ef28c404bdb49ed7524adb58de..c62f913a81831aa62b3668c1f387fbdf81fb311c 100644
--- a/sm5/CHANGELOG
+++ b/sm5/CHANGELOG
@@ -1,6 +1,6 @@
 CHANGELOG for smartmontools
 
-$Id: CHANGELOG,v 1.360 2004/03/05 23:38:46 pjwilliams Exp $
+$Id: CHANGELOG,v 1.361 2004/03/06 19:43:17 ballen4705 Exp $
 
 The most recent version of this file is:
 http://cvs.sourceforge.net/viewcvs.py/smartmontools/sm5/CHANGELOG?sortby=date&view=markup
@@ -20,13 +20,15 @@ Maintainers / Developers Key:
 [EM] Eduard Martinescu
 [FM] Fr�d�ric L. W. Meunier
 [KS] Keiji Sawada
-[PW] Phil Williams
 [SS] Sergey Svishchev
+[PW] Phil Williams
 
 NOTES FOR FUTURE RELEASES: see TODO file.
 
 <ADDITIONS TO THE CHANGE LOG SHOULD BE ADDED JUST BELOW HERE, PLEASE>
 
+smartmontools 5.30
+
   [PW] Added QUANTUM FIREBALLlct15 30, QUANTUM FIREBALLlct20 40, and
        Maxtor 6Y060P0 (DiamondMax Plus 9 60GB) to knowndrives table.
 
diff --git a/sm5/NEWS b/sm5/NEWS
index 545ae7dbcec7e3744f5954e0fbc2eb5bec6df773..28a38573766448da6e2f05f52a9c7ed8fee10c12 100644
--- a/sm5/NEWS
+++ b/sm5/NEWS
@@ -1,10 +1,17 @@
 smartmontools NEWS
 ------------------
-CVS ID: $Id: NEWS,v 1.18 2004/02/24 09:57:27 ballen4705 Exp $
+CVS ID: $Id: NEWS,v 1.19 2004/03/06 19:43:17 ballen4705 Exp $
 
 The most up-to-date version of this file is:
 http://cvs.sourceforge.net/viewcvs.py/smartmontools/sm5/NEWS?sortby=date&view=markup
 
+Date: 2003-3-6
+Summary: smartmontools release 5.30 (STABLE)
+--------------------------------------------
+This is a stable release of smartmontools: the first stable release
+since 5.26.
+
+
 Date: 2003-2-24
 Summary: smartmontools release 5.29 (Experimental, not STABLE)
 --------------------------------------------------------------
diff --git a/sm5/knowndrives.c b/sm5/knowndrives.c
index 12fc028fe94144e2fa25f82e12bac3f66e16be5c..de797bb7d58733c8dc2310552abbeee957681f9d 100644
--- a/sm5/knowndrives.c
+++ b/sm5/knowndrives.c
@@ -27,7 +27,7 @@
 #include "utility.h"
 #include "config.h"
 
-const char *knowndrives_c_cvsid="$Id: knowndrives.c,v 1.95 2004/03/05 23:38:46 pjwilliams Exp $"
+const char *knowndrives_c_cvsid="$Id: knowndrives.c,v 1.96 2004/03/06 19:43:17 ballen4705 Exp $"
                                 ATACMDS_H_CVSID ATAPRINT_H_CVSID CONFIG_H_CVSID EXTERN_H_CVSID KNOWNDRIVES_H_CVSID UTILITY_H_CVSID;
 
 #define MODEL_STRING_LENGTH                         40
@@ -119,11 +119,13 @@ const char may_need_minus_F2_disabled[]="May need -F samsung2 disabled; see manu
 /* Special-purpose functions for use in knowndrives[]. */
 void specialpurpose_reverse_samsung(smartmonctrl *con)
 {
-  con->fixfirmwarebug = FIX_SAMSUNG;
+  if (con->fixfirmwarebug==FIX_NOTSPECIFIED)
+    con->fixfirmwarebug = FIX_SAMSUNG;
 }
 void specialpurpose_reverse_samsung2(smartmonctrl *con)
 {
-  con->fixfirmwarebug = FIX_SAMSUNG2;
+  if (con->fixfirmwarebug==FIX_NOTSPECIFIED)
+    con->fixfirmwarebug = FIX_SAMSUNG2;
 }
 
 /* Table of settings for known drives terminated by an element containing all
@@ -820,10 +822,10 @@ int applypresets(const struct ata_identify_device *drive, unsigned char **optspt
     }
     
     // If a special-purpose function is defined for this drive then
-    // call it.  We might call a special purpose function even if now
-    // Attribute interpretation presets are set.  We ONLY call this
-    // function if the user has NOT already specified a '-F' option.
-    if (knowndrives[i].specialpurpose && con->fixfirmwarebug==FIX_NOTSPECIFIED)
+    // call it. Note that if command line arguments or Directives
+    // over-ride this choice, then the specialpurpose function that is
+    // called must deal with this.
+    if (knowndrives[i].specialpurpose)
       (*knowndrives[i].specialpurpose)(con);
   }
   
diff --git a/sm5/knowndrives.cpp b/sm5/knowndrives.cpp
index 75117d88aa0719533df4e51e8a4c6c15a4d5d7a6..7c907fcf6c6e5876728fb29fa122d69a27716e89 100644
--- a/sm5/knowndrives.cpp
+++ b/sm5/knowndrives.cpp
@@ -27,7 +27,7 @@
 #include "utility.h"
 #include "config.h"
 
-const char *knowndrives_c_cvsid="$Id: knowndrives.cpp,v 1.95 2004/03/05 23:38:46 pjwilliams Exp $"
+const char *knowndrives_c_cvsid="$Id: knowndrives.cpp,v 1.96 2004/03/06 19:43:17 ballen4705 Exp $"
                                 ATACMDS_H_CVSID ATAPRINT_H_CVSID CONFIG_H_CVSID EXTERN_H_CVSID KNOWNDRIVES_H_CVSID UTILITY_H_CVSID;
 
 #define MODEL_STRING_LENGTH                         40
@@ -119,11 +119,13 @@ const char may_need_minus_F2_disabled[]="May need -F samsung2 disabled; see manu
 /* Special-purpose functions for use in knowndrives[]. */
 void specialpurpose_reverse_samsung(smartmonctrl *con)
 {
-  con->fixfirmwarebug = FIX_SAMSUNG;
+  if (con->fixfirmwarebug==FIX_NOTSPECIFIED)
+    con->fixfirmwarebug = FIX_SAMSUNG;
 }
 void specialpurpose_reverse_samsung2(smartmonctrl *con)
 {
-  con->fixfirmwarebug = FIX_SAMSUNG2;
+  if (con->fixfirmwarebug==FIX_NOTSPECIFIED)
+    con->fixfirmwarebug = FIX_SAMSUNG2;
 }
 
 /* Table of settings for known drives terminated by an element containing all
@@ -820,10 +822,10 @@ int applypresets(const struct ata_identify_device *drive, unsigned char **optspt
     }
     
     // If a special-purpose function is defined for this drive then
-    // call it.  We might call a special purpose function even if now
-    // Attribute interpretation presets are set.  We ONLY call this
-    // function if the user has NOT already specified a '-F' option.
-    if (knowndrives[i].specialpurpose && con->fixfirmwarebug==FIX_NOTSPECIFIED)
+    // call it. Note that if command line arguments or Directives
+    // over-ride this choice, then the specialpurpose function that is
+    // called must deal with this.
+    if (knowndrives[i].specialpurpose)
       (*knowndrives[i].specialpurpose)(con);
   }
   
diff --git a/sm5/smartctl.8.in b/sm5/smartctl.8.in
index aa883f9bd0914e375fc158f24159cf0c67708f02..88df97bdfa802358a1460f242de37645e57ad108 100644
--- a/sm5/smartctl.8.in
+++ b/sm5/smartctl.8.in
@@ -1,7 +1,7 @@
 .ig
  Copyright (C) 2002-4 Bruce Allen <smartmontools-support@lists.sourceforge.net>
 
- $Id: smartctl.8.in,v 1.34 2004/03/05 23:06:42 ballen4705 Exp $
+ $Id: smartctl.8.in,v 1.35 2004/03/06 19:43:18 ballen4705 Exp $
  
  This program is free software; you can redistribute it and/or modify it
  under the terms of the GNU General Public License as published by the Free
@@ -734,8 +734,9 @@ value for Attribute 123 in this form.
 .TP
 .B \-F TYPE, \-\-firmwarebug=TYPE
 Modifies the behavior of \fBsmartctl\fP to compensate for some known
-and understood device firmware bug.  The valid arguments to this
-option are:
+and understood device firmware bug.  The arguments to this option are
+exclusive, so that only the final option given is used.  The valid
+values are:
 
 .I none
 \- Assume that the device firmware obeys the ATA specifications.  This
@@ -1075,4 +1076,4 @@ these documents may be found in the References section of the
 
 .SH
 CVS ID OF THIS PAGE:
-$Id: smartctl.8.in,v 1.34 2004/03/05 23:06:42 ballen4705 Exp $
+$Id: smartctl.8.in,v 1.35 2004/03/06 19:43:18 ballen4705 Exp $
diff --git a/sm5/smartd.8.in b/sm5/smartd.8.in
index 8286293db728fe273f4ad5e01a2777720c3be154..217782ceaaf76ba2a3987700e6991e2f89eabb50 100644
--- a/sm5/smartd.8.in
+++ b/sm5/smartd.8.in
@@ -1,7 +1,7 @@
 .ig
 Copyright (C) 2002-4 Bruce Allen <smartmontools-support@lists.sourceforge.net>
  
-$Id: smartd.8.in,v 1.45 2004/03/05 18:00:00 ballen4705 Exp $
+$Id: smartd.8.in,v 1.46 2004/03/06 19:43:18 ballen4705 Exp $
 
 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
@@ -1058,11 +1058,11 @@ different types of system behavior affects the values of certain
 Attributes.
 
 .TP
-.B \-F TYPE, \-\-firmwarebug=TYPE
-Modifies the behavior of
-.B smartctl
-to compensate for some known and understood device firmware bug.  The
-valid arguments to this option are:
+.B \-F TYPE
+Modifies the behavior of \fBsmartd\fP to compensate for some known and
+understood device firmware bug.  The arguments to this Directive are
+exclusive, so that only the final Directive given is used.  The valid
+values are:
 
 .I none
 \- Assume that the device firmware obeys the ATA specifications.  This is
@@ -1073,7 +1073,7 @@ database.
 \- In some Samsung disks (example: model SV4012H Firmware Version:
 RM100-08) some of the two- and four-byte quantities in the SMART data
 structures are byte-swapped (relative to the ATA specification).
-Enabling this option tells \fBsmartctl\fP to evaluate these quantities
+Enabling this option tells \fBsmartd\fP to evaluate these quantities
 in byte-reversed order.  Some signs that your disk needs this option
 are (1) no self-test log printed, even though you have run self-tests;
 (2) very large numbers of ATA errors reported in the ATA error log;
@@ -1082,7 +1082,7 @@ are (1) no self-test log printed, even though you have run self-tests;
 .I samsung2
 \- In more recent Samsung disks (firmware revisions ending in "\-23") the
 number of ATA errors reported is byte swapped.  Enabling this option
-tells \fBsmartctl\fP to evaluate this quantity in byte-reversed order.
+tells \fBsmartd\fP to evaluate this quantity in byte-reversed order.
 
 Note that an explicit \'\-F\' Directive will over-ride any preset
 values for \'\-F\' (see the \'\-P\' option below).
@@ -1524,4 +1524,4 @@ smartmontools home page at \fBhttp://smartmontools.sourceforge.net/\fP .
 
 .SH
 CVS ID OF THIS PAGE:
-$Id: smartd.8.in,v 1.45 2004/03/05 18:00:00 ballen4705 Exp $
+$Id: smartd.8.in,v 1.46 2004/03/06 19:43:18 ballen4705 Exp $
diff --git a/sm5/smartd.conf.5.in b/sm5/smartd.conf.5.in
index 1b06ead92344cde39913de76fded6cda92f7a212..e3128a8c659a11acb0d6bce5e4075624690a7c96 100644
--- a/sm5/smartd.conf.5.in
+++ b/sm5/smartd.conf.5.in
@@ -1,7 +1,7 @@
 .ig
 Copyright (C) 2002-4 Bruce Allen <smartmontools-support@lists.sourceforge.net>
 
-$Id: smartd.conf.5.in,v 1.35 2004/03/05 18:00:00 ballen4705 Exp $
+$Id: smartd.conf.5.in,v 1.36 2004/03/06 19:43:19 ballen4705 Exp $
 
 This program is free software; you can redistribute it and/or modify it
 under the terms of the GNU General Public License as published by the Free
@@ -779,11 +779,11 @@ different types of system behavior affects the values of certain
 Attributes.
 
 .TP
-.B \-F TYPE, \-\-firmwarebug=TYPE
-Modifies the behavior of
-.B smartctl
-to compensate for some known and understood device firmware bug.  The
-valid arguments to this option are:
+.B \-F TYPE
+Modifies the behavior of \fBsmartd\fP to compensate for some known and
+understood device firmware bug.  The arguments to this Directive are
+exclusive, so that only the final Directive given is used.  The valid
+values are:
 
 .I none
 \- Assume that the device firmware obeys the ATA specifications.  This is
@@ -794,7 +794,7 @@ database.
 \- In some Samsung disks (example: model SV4012H Firmware Version:
 RM100-08) some of the two- and four-byte quantities in the SMART data
 structures are byte-swapped (relative to the ATA specification).
-Enabling this option tells \fBsmartctl\fP to evaluate these quantities
+Enabling this option tells \fBsmartd\fP to evaluate these quantities
 in byte-reversed order.  Some signs that your disk needs this option
 are (1) no self-test log printed, even though you have run self-tests;
 (2) very large numbers of ATA errors reported in the ATA error log;
@@ -803,7 +803,7 @@ are (1) no self-test log printed, even though you have run self-tests;
 .I samsung2
 \- In more recent Samsung disks (firmware revisions ending in "\-23") the
 number of ATA errors reported is byte swapped.  Enabling this option
-tells \fBsmartctl\fP to evaluate this quantity in byte-reversed order.
+tells \fBsmartd\fP to evaluate this quantity in byte-reversed order.
 
 Note that an explicit \'\-F\' Directive will over-ride any preset
 values for \'\-F\' (see the \'\-P\' option below).
@@ -1099,4 +1099,4 @@ SEE ALSO:
 
 .SH
 CVS ID OF THIS PAGE:
-$Id: smartd.conf.5.in,v 1.35 2004/03/05 18:00:00 ballen4705 Exp $
+$Id: smartd.conf.5.in,v 1.36 2004/03/06 19:43:19 ballen4705 Exp $
diff --git a/sm5/smartmontools.spec b/sm5/smartmontools.spec
index 4e81606a0bd37a1f58e0446bcb905e1c0b51ae67..62b18efdd64cbbeaccc4ba9e86d5fd23e458c692 100644
--- a/sm5/smartmontools.spec
+++ b/sm5/smartmontools.spec
@@ -35,7 +35,7 @@ Packager:       Bruce Allen <smartmontools-support@lists.sourceforge.net>
 # http://ftp1.sourceforge.net/smartmontools/smartmontools-%{version}-%{release}.tar.gz
 
 # CVS ID of this file is:
-# $Id: smartmontools.spec,v 1.152 2004/03/05 14:09:53 ballen4705 Exp $
+# $Id: smartmontools.spec,v 1.153 2004/03/06 19:43:22 ballen4705 Exp $
 
 # Copyright (C) 2002-4 Bruce Allen <smartmontools-support@lists.sourceforge.net>
 # Home page: http://smartmontools.sourceforge.net/
@@ -311,14 +311,54 @@ fi
 # [SB] Stanislav Brabec
 # [PC] Peter Cassidy
 # [CD] Capser Dik
-# [DK] David Kirkby
+# [CF] Christian Franke
+# [GF] Guilhem Fr�zou
 # [DG] Douglas Gilbert
 # [GG] Guido Guenther
+# [DK] David Kirkby
 # [KM] Kai M�kisarai
+# [EM] Eduard Martinescu
 # [FM] Fr�d�ric L. W. Meunier
+# [KS] Keiji Sawada
+# [SS] Sergey Svishchev
 # [PW] Phil Williams
 
 %changelog
+
+* Sat Mar 6 2004 Bruce Allen  <smartmontools-support@lists.sourceforge.net>
+  [PW] Added QUANTUM FIREBALLlct15 30, QUANTUM FIREBALLlct20 40, and
+       Maxtor 6Y060P0 (DiamondMax Plus 9 60GB) to knowndrives table.
+  [PW] Added Maxtor MaXLine II family to knowndrives table (thanks to
+       Brett Russ for submitting the patch).
+  [BA] Added remaining read/write commands to detailed list of
+       error log commands that have text descriptions of problem
+       printed.  For commands that support it, print number of failed
+       sectors at problem LBA.
+  [BA] Made SuSE section of smartd init script more SuSE 9 compatible.
+       Thanks to Hans-Peter Jansen.
+  [CF] Windows smartd: Added IDE/ATA device scan
+       Added windows device names to smartctl.8.in, smartd.8.in
+  [BA] smartctl/smartd: user-provided '-F samsung' and '-F samsung2'
+       command line options/Directives did NOT over-ride preset values
+       unless user specified '-P ignore'.  Now they will always over-ride
+       preset values from the database.
+  [BA] Added error decoding for a few more READ and WRITE commands.
+  [PW] Added Maxtor MaXLine Plus II, Western Digital Caviar SE (Serial ATA)
+       series, Hitachi Deskstar 7K250 series, and Ultra ATA 66 models of
+       the Maxtor DiamondMax Plus 40 series to knowndrives table.
+  [BA] Added Maxtor Diamondmax 250 GB drives to database.  Note that
+       these model numbers are not listed in Maxtor documentation, but
+       they exist.
+  [BA] Removed the 'contact developers' phrase from the Samsung disk
+       warning messages.
+  [PW] Added TOSHIBA MK2017GAP, IBM Deskstar 14GXP and 16GP series,
+       Fujitsu MPC series, Seagate Barracuda ATA III family, and missing
+       Seagate Barracuda U Series drives to knowndrives table
+  [BA] smartd: wrong loglevel for message: Configuration file
+       /etc/smartd.conf parsed.  Changed to LOG_INFO from LOG_CRIT.
+       Thanks to  Emmanuel CHANTREAU for the report.
+  [CF] Checked in development version of windows code base.
+
 * Tue Feb 24 2004 Bruce Allen  <smartmontools-support@lists.sourceforge.net>
   [BA] smartd: configure script did not set correct directory to search for
        smartd.conf based on --prefix argument to ./configure.  Thanks to