diff --git a/sm5/scsicmds.c b/sm5/scsicmds.c
index 8a037b51b57bd144c647336678eb0b614a8b44b4..3eddcddc7df4e68ae03d850d74fb6fbb786ec442 100644
--- a/sm5/scsicmds.c
+++ b/sm5/scsicmds.c
@@ -46,7 +46,7 @@
 #include "utility.h"
 #include "extern.h"
 
-const char *scsicmds_c_cvsid="$Id: scsicmds.c,v 1.63 2003/11/18 13:44:46 dpgilbert Exp $" EXTERN_H_CVSID SCSICMDS_H_CVSID;
+const char *scsicmds_c_cvsid="$Id: scsicmds.c,v 1.64 2003/11/19 06:09:37 dpgilbert Exp $" EXTERN_H_CVSID SCSICMDS_H_CVSID;
 
 /* for passing global control variables */
 extern smartmonctrl *con;
@@ -744,7 +744,7 @@ int scsiFetchIECmpage(int device, struct scsi_iec_mode_page *iecp, int modese_le
     iecp->requestedCurrent = 1;
     if (iecp->modese_len <= 6) {
         if ((err = scsiModeSense(device, INFORMATIONAL_EXCEPTIONS_CONTROL_PAGE, 
-                                 MODE_PAGE_CONTROL_CURRENT, 
+                                 MPAGE_CONTROL_CURRENT, 
                                  iecp->raw_curr, sizeof(iecp->raw_curr)))) {
             if (SIMPLE_ERR_BAD_OPCODE == err)
                 iecp->modese_len = 10;
@@ -757,7 +757,7 @@ int scsiFetchIECmpage(int device, struct scsi_iec_mode_page *iecp, int modese_le
     }
     if (10 == iecp->modese_len) {
         err = scsiModeSense10(device, INFORMATIONAL_EXCEPTIONS_CONTROL_PAGE,
-                              MODE_PAGE_CONTROL_CURRENT, 
+                              MPAGE_CONTROL_CURRENT, 
                               iecp->raw_curr, sizeof(iecp->raw_curr));
         if (err) {
             iecp->modese_len = 0;
@@ -768,11 +768,11 @@ int scsiFetchIECmpage(int device, struct scsi_iec_mode_page *iecp, int modese_le
     iecp->requestedChangeable = 1;
     if (10 == iecp->modese_len)
         err = scsiModeSense10(device, INFORMATIONAL_EXCEPTIONS_CONTROL_PAGE,
-                                 MODE_PAGE_CONTROL_CHANGEABLE,
+                                 MPAGE_CONTROL_CHANGEABLE,
                                  iecp->raw_chg, sizeof(iecp->raw_chg));
     else if (6 == iecp->modese_len)
         err = scsiModeSense(device, INFORMATIONAL_EXCEPTIONS_CONTROL_PAGE, 
-                            MODE_PAGE_CONTROL_CHANGEABLE, 
+                            MPAGE_CONTROL_CHANGEABLE, 
                             iecp->raw_chg, sizeof(iecp->raw_chg));
     if (err)
         return err;
@@ -1565,7 +1565,7 @@ int scsiFetchExtendedSelfTestTime(int device, int * durationSec, int modese_len)
     memset(buff, 0, sizeof(buff));
     if (modese_len <= 6) {
         if ((err = scsiModeSense(device, CONTROL_MODE_PAGE, 
-                                 MODE_PAGE_CONTROL_CURRENT, 
+                                 MPAGE_CONTROL_CURRENT, 
                                  buff, sizeof(buff)))) {
             if (SIMPLE_ERR_BAD_OPCODE == err)
                 modese_len = 10;
@@ -1576,7 +1576,7 @@ int scsiFetchExtendedSelfTestTime(int device, int * durationSec, int modese_len)
     }
     if (10 == modese_len) {
         err = scsiModeSense10(device, CONTROL_MODE_PAGE, 
-                              MODE_PAGE_CONTROL_CURRENT, 
+                              MPAGE_CONTROL_CURRENT, 
                               buff, sizeof(buff));
         if (err)
             return err;
@@ -1736,16 +1736,17 @@ int scsiCountFailedSelfTests(int fd, int noisy)
 
 /* Returns a negative value if failed to fetch Contol mode page or it was
    malformed. Returns 0 if GLTSD bit is zero and returns 1 if the GLTSD
-   bit is set. */
-int scsiFetchControlGLTSD(int device, int modese_len)
+   bit is set. Examines default mode page when current==0 else examines
+   current mode page. */
+int scsiFetchControlGLTSD(int device, int modese_len, int current)
 {
     int err, offset;
     UINT8 buff[64];
+    int pc = current ? MPAGE_CONTROL_CURRENT : MPAGE_CONTROL_DEFAULT;
 
     memset(buff, 0, sizeof(buff));
     if (modese_len <= 6) {
-        if ((err = scsiModeSense(device, CONTROL_MODE_PAGE, 
-                                 MODE_PAGE_CONTROL_CURRENT, 
+        if ((err = scsiModeSense(device, CONTROL_MODE_PAGE, pc, 
                                  buff, sizeof(buff)))) {
             if (SIMPLE_ERR_BAD_OPCODE == err)
                 modese_len = 10;
@@ -1755,8 +1756,7 @@ int scsiFetchControlGLTSD(int device, int modese_len)
             modese_len = 6;
     }
     if (10 == modese_len) {
-        err = scsiModeSense10(device, CONTROL_MODE_PAGE, 
-                              MODE_PAGE_CONTROL_CURRENT, 
+        err = scsiModeSense10(device, CONTROL_MODE_PAGE, pc,
                               buff, sizeof(buff));
         if (err)
             return -EINVAL;
@@ -1767,10 +1767,11 @@ int scsiFetchControlGLTSD(int device, int modese_len)
     return -EINVAL;
 }
 
-/* Attempts to clear GLTSD bit in Control mode page. Returns 0 if
+/* Attempts to set or clear GLTSD bit in Control mode page. If enabled is
+   0 attempts to clear GLTSD otherwise it attempts to set it. Returns 0 if
    successful, negative if low level error, > 0 if higher level error (e.g.
    SIMPLE_ERR_BAD_PARAM if GLTSD bit is not changeable). */
-int scsiClearControlGLTSD(int device, int modese_len)
+int scsiSetControlGLTSD(int device, int enabled, int modese_len)
 {
     int err, offset, resp_len, sp;
     UINT8 buff[64];
@@ -1779,7 +1780,7 @@ int scsiClearControlGLTSD(int device, int modese_len)
     memset(buff, 0, sizeof(buff));
     if (modese_len <= 6) {
         if ((err = scsiModeSense(device, CONTROL_MODE_PAGE, 
-                                 MODE_PAGE_CONTROL_CURRENT, 
+                                 MPAGE_CONTROL_CURRENT, 
                                  buff, sizeof(buff)))) {
             if (SIMPLE_ERR_BAD_OPCODE == err)
                 modese_len = 10;
@@ -1790,7 +1791,7 @@ int scsiClearControlGLTSD(int device, int modese_len)
     }
     if (10 == modese_len) {
         err = scsiModeSense10(device, CONTROL_MODE_PAGE, 
-                              MODE_PAGE_CONTROL_CURRENT, 
+                              MPAGE_CONTROL_CURRENT, 
                               buff, sizeof(buff));
         if (err)
             return err;
@@ -1798,15 +1799,19 @@ int scsiClearControlGLTSD(int device, int modese_len)
     offset = scsiModePageOffset(buff, sizeof(buff), modese_len);
     if ((offset < 0) || (buff[offset + 1] < 0xa))
         return SIMPLE_ERR_BAD_RESP;
-    if (0 == (buff[offset + 2] & 2))
-        return 0;       /* already clear so nothing to do */
+
+    if (enabled)
+        enabled = 2;
+    if (enabled == (buff[offset + 2] & 2))
+        return 0;       /* GLTSD already in wanted state so nothing to do */
+
     if (modese_len == 6)
         err = scsiModeSense(device, CONTROL_MODE_PAGE, 
-                            MODE_PAGE_CONTROL_CHANGEABLE, 
+                            MPAGE_CONTROL_CHANGEABLE, 
                             ch_buff, sizeof(ch_buff));
     else
         err = scsiModeSense10(device, CONTROL_MODE_PAGE, 
-                              MODE_PAGE_CONTROL_CHANGEABLE, 
+                              MPAGE_CONTROL_CHANGEABLE, 
                               ch_buff, sizeof(ch_buff));
     if (err)
         return err;
@@ -1822,7 +1827,10 @@ int scsiClearControlGLTSD(int device, int modese_len)
     }
     sp = (buff[offset] & 0x80) ? 1 : 0; /* PS bit becomes 'SELECT's SP bit */
     buff[offset] &= 0x7f;     /* mask off PS bit */
-    buff[offset + 2] &= 0xfd;   /* clear GLTSD bit in buff */
+    if (enabled)
+        buff[offset + 2] |= 0x2;    /* set GLTSD bit */
+    else
+        buff[offset + 2] &= 0xfd;   /* clear GLTSD bit */
     if (10 == modese_len)
         err = scsiModeSelect10(device, sp, buff, resp_len);
     else if (6 == modese_len)
@@ -1841,7 +1849,7 @@ int scsiFetchTransportProtocol(int device, int modese_len)
     memset(buff, 0, sizeof(buff));
     if (modese_len <= 6) {
         if ((err = scsiModeSense(device, PROTOCOL_SPECIFIC_PORT_PAGE, 
-                                 MODE_PAGE_CONTROL_CURRENT, 
+                                 MPAGE_CONTROL_CURRENT, 
                                  buff, sizeof(buff)))) {
             if (SIMPLE_ERR_BAD_OPCODE == err)
                 modese_len = 10;
@@ -1852,7 +1860,7 @@ int scsiFetchTransportProtocol(int device, int modese_len)
     }
     if (10 == modese_len) {
         err = scsiModeSense10(device, PROTOCOL_SPECIFIC_PORT_PAGE, 
-                              MODE_PAGE_CONTROL_CURRENT, 
+                              MPAGE_CONTROL_CURRENT, 
                               buff, sizeof(buff));
         if (err)
             return -EINVAL;
diff --git a/sm5/scsicmds.cpp b/sm5/scsicmds.cpp
index d3af2bbb6afaaf5aaa1ae94f4dcbc4231b8572d1..941e2dae3767b9ec81638f1d4ae5843751e16348 100644
--- a/sm5/scsicmds.cpp
+++ b/sm5/scsicmds.cpp
@@ -46,7 +46,7 @@
 #include "utility.h"
 #include "extern.h"
 
-const char *scsicmds_c_cvsid="$Id: scsicmds.cpp,v 1.63 2003/11/18 13:44:46 dpgilbert Exp $" EXTERN_H_CVSID SCSICMDS_H_CVSID;
+const char *scsicmds_c_cvsid="$Id: scsicmds.cpp,v 1.64 2003/11/19 06:09:37 dpgilbert Exp $" EXTERN_H_CVSID SCSICMDS_H_CVSID;
 
 /* for passing global control variables */
 extern smartmonctrl *con;
@@ -744,7 +744,7 @@ int scsiFetchIECmpage(int device, struct scsi_iec_mode_page *iecp, int modese_le
     iecp->requestedCurrent = 1;
     if (iecp->modese_len <= 6) {
         if ((err = scsiModeSense(device, INFORMATIONAL_EXCEPTIONS_CONTROL_PAGE, 
-                                 MODE_PAGE_CONTROL_CURRENT, 
+                                 MPAGE_CONTROL_CURRENT, 
                                  iecp->raw_curr, sizeof(iecp->raw_curr)))) {
             if (SIMPLE_ERR_BAD_OPCODE == err)
                 iecp->modese_len = 10;
@@ -757,7 +757,7 @@ int scsiFetchIECmpage(int device, struct scsi_iec_mode_page *iecp, int modese_le
     }
     if (10 == iecp->modese_len) {
         err = scsiModeSense10(device, INFORMATIONAL_EXCEPTIONS_CONTROL_PAGE,
-                              MODE_PAGE_CONTROL_CURRENT, 
+                              MPAGE_CONTROL_CURRENT, 
                               iecp->raw_curr, sizeof(iecp->raw_curr));
         if (err) {
             iecp->modese_len = 0;
@@ -768,11 +768,11 @@ int scsiFetchIECmpage(int device, struct scsi_iec_mode_page *iecp, int modese_le
     iecp->requestedChangeable = 1;
     if (10 == iecp->modese_len)
         err = scsiModeSense10(device, INFORMATIONAL_EXCEPTIONS_CONTROL_PAGE,
-                                 MODE_PAGE_CONTROL_CHANGEABLE,
+                                 MPAGE_CONTROL_CHANGEABLE,
                                  iecp->raw_chg, sizeof(iecp->raw_chg));
     else if (6 == iecp->modese_len)
         err = scsiModeSense(device, INFORMATIONAL_EXCEPTIONS_CONTROL_PAGE, 
-                            MODE_PAGE_CONTROL_CHANGEABLE, 
+                            MPAGE_CONTROL_CHANGEABLE, 
                             iecp->raw_chg, sizeof(iecp->raw_chg));
     if (err)
         return err;
@@ -1565,7 +1565,7 @@ int scsiFetchExtendedSelfTestTime(int device, int * durationSec, int modese_len)
     memset(buff, 0, sizeof(buff));
     if (modese_len <= 6) {
         if ((err = scsiModeSense(device, CONTROL_MODE_PAGE, 
-                                 MODE_PAGE_CONTROL_CURRENT, 
+                                 MPAGE_CONTROL_CURRENT, 
                                  buff, sizeof(buff)))) {
             if (SIMPLE_ERR_BAD_OPCODE == err)
                 modese_len = 10;
@@ -1576,7 +1576,7 @@ int scsiFetchExtendedSelfTestTime(int device, int * durationSec, int modese_len)
     }
     if (10 == modese_len) {
         err = scsiModeSense10(device, CONTROL_MODE_PAGE, 
-                              MODE_PAGE_CONTROL_CURRENT, 
+                              MPAGE_CONTROL_CURRENT, 
                               buff, sizeof(buff));
         if (err)
             return err;
@@ -1736,16 +1736,17 @@ int scsiCountFailedSelfTests(int fd, int noisy)
 
 /* Returns a negative value if failed to fetch Contol mode page or it was
    malformed. Returns 0 if GLTSD bit is zero and returns 1 if the GLTSD
-   bit is set. */
-int scsiFetchControlGLTSD(int device, int modese_len)
+   bit is set. Examines default mode page when current==0 else examines
+   current mode page. */
+int scsiFetchControlGLTSD(int device, int modese_len, int current)
 {
     int err, offset;
     UINT8 buff[64];
+    int pc = current ? MPAGE_CONTROL_CURRENT : MPAGE_CONTROL_DEFAULT;
 
     memset(buff, 0, sizeof(buff));
     if (modese_len <= 6) {
-        if ((err = scsiModeSense(device, CONTROL_MODE_PAGE, 
-                                 MODE_PAGE_CONTROL_CURRENT, 
+        if ((err = scsiModeSense(device, CONTROL_MODE_PAGE, pc, 
                                  buff, sizeof(buff)))) {
             if (SIMPLE_ERR_BAD_OPCODE == err)
                 modese_len = 10;
@@ -1755,8 +1756,7 @@ int scsiFetchControlGLTSD(int device, int modese_len)
             modese_len = 6;
     }
     if (10 == modese_len) {
-        err = scsiModeSense10(device, CONTROL_MODE_PAGE, 
-                              MODE_PAGE_CONTROL_CURRENT, 
+        err = scsiModeSense10(device, CONTROL_MODE_PAGE, pc,
                               buff, sizeof(buff));
         if (err)
             return -EINVAL;
@@ -1767,10 +1767,11 @@ int scsiFetchControlGLTSD(int device, int modese_len)
     return -EINVAL;
 }
 
-/* Attempts to clear GLTSD bit in Control mode page. Returns 0 if
+/* Attempts to set or clear GLTSD bit in Control mode page. If enabled is
+   0 attempts to clear GLTSD otherwise it attempts to set it. Returns 0 if
    successful, negative if low level error, > 0 if higher level error (e.g.
    SIMPLE_ERR_BAD_PARAM if GLTSD bit is not changeable). */
-int scsiClearControlGLTSD(int device, int modese_len)
+int scsiSetControlGLTSD(int device, int enabled, int modese_len)
 {
     int err, offset, resp_len, sp;
     UINT8 buff[64];
@@ -1779,7 +1780,7 @@ int scsiClearControlGLTSD(int device, int modese_len)
     memset(buff, 0, sizeof(buff));
     if (modese_len <= 6) {
         if ((err = scsiModeSense(device, CONTROL_MODE_PAGE, 
-                                 MODE_PAGE_CONTROL_CURRENT, 
+                                 MPAGE_CONTROL_CURRENT, 
                                  buff, sizeof(buff)))) {
             if (SIMPLE_ERR_BAD_OPCODE == err)
                 modese_len = 10;
@@ -1790,7 +1791,7 @@ int scsiClearControlGLTSD(int device, int modese_len)
     }
     if (10 == modese_len) {
         err = scsiModeSense10(device, CONTROL_MODE_PAGE, 
-                              MODE_PAGE_CONTROL_CURRENT, 
+                              MPAGE_CONTROL_CURRENT, 
                               buff, sizeof(buff));
         if (err)
             return err;
@@ -1798,15 +1799,19 @@ int scsiClearControlGLTSD(int device, int modese_len)
     offset = scsiModePageOffset(buff, sizeof(buff), modese_len);
     if ((offset < 0) || (buff[offset + 1] < 0xa))
         return SIMPLE_ERR_BAD_RESP;
-    if (0 == (buff[offset + 2] & 2))
-        return 0;       /* already clear so nothing to do */
+
+    if (enabled)
+        enabled = 2;
+    if (enabled == (buff[offset + 2] & 2))
+        return 0;       /* GLTSD already in wanted state so nothing to do */
+
     if (modese_len == 6)
         err = scsiModeSense(device, CONTROL_MODE_PAGE, 
-                            MODE_PAGE_CONTROL_CHANGEABLE, 
+                            MPAGE_CONTROL_CHANGEABLE, 
                             ch_buff, sizeof(ch_buff));
     else
         err = scsiModeSense10(device, CONTROL_MODE_PAGE, 
-                              MODE_PAGE_CONTROL_CHANGEABLE, 
+                              MPAGE_CONTROL_CHANGEABLE, 
                               ch_buff, sizeof(ch_buff));
     if (err)
         return err;
@@ -1822,7 +1827,10 @@ int scsiClearControlGLTSD(int device, int modese_len)
     }
     sp = (buff[offset] & 0x80) ? 1 : 0; /* PS bit becomes 'SELECT's SP bit */
     buff[offset] &= 0x7f;     /* mask off PS bit */
-    buff[offset + 2] &= 0xfd;   /* clear GLTSD bit in buff */
+    if (enabled)
+        buff[offset + 2] |= 0x2;    /* set GLTSD bit */
+    else
+        buff[offset + 2] &= 0xfd;   /* clear GLTSD bit */
     if (10 == modese_len)
         err = scsiModeSelect10(device, sp, buff, resp_len);
     else if (6 == modese_len)
@@ -1841,7 +1849,7 @@ int scsiFetchTransportProtocol(int device, int modese_len)
     memset(buff, 0, sizeof(buff));
     if (modese_len <= 6) {
         if ((err = scsiModeSense(device, PROTOCOL_SPECIFIC_PORT_PAGE, 
-                                 MODE_PAGE_CONTROL_CURRENT, 
+                                 MPAGE_CONTROL_CURRENT, 
                                  buff, sizeof(buff)))) {
             if (SIMPLE_ERR_BAD_OPCODE == err)
                 modese_len = 10;
@@ -1852,7 +1860,7 @@ int scsiFetchTransportProtocol(int device, int modese_len)
     }
     if (10 == modese_len) {
         err = scsiModeSense10(device, PROTOCOL_SPECIFIC_PORT_PAGE, 
-                              MODE_PAGE_CONTROL_CURRENT, 
+                              MPAGE_CONTROL_CURRENT, 
                               buff, sizeof(buff));
         if (err)
             return -EINVAL;
diff --git a/sm5/scsicmds.h b/sm5/scsicmds.h
index 7bfe8f18aa76c4810dd6419aff1e2e89e833e223..d9a177559340725673dd51d41d2045bf6cec486d 100644
--- a/sm5/scsicmds.h
+++ b/sm5/scsicmds.h
@@ -32,7 +32,7 @@
 #ifndef SCSICMDS_H_
 #define SCSICMDS_H_
 
-#define SCSICMDS_H_CVSID "$Id: scsicmds.h,v 1.41 2003/11/18 13:46:05 dpgilbert Exp $\n"
+#define SCSICMDS_H_CVSID "$Id: scsicmds.h,v 1.42 2003/11/19 06:08:46 dpgilbert Exp $\n"
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -200,8 +200,10 @@ Documentation, see http://www.storage.ibm.com/techsup/hddtech/prodspecs.htm */
 #define ALL_MODE_PAGES                           0x3f
 
 /* Mode page control field */
-#define MODE_PAGE_CONTROL_CURRENT               0
-#define MODE_PAGE_CONTROL_CHANGEABLE            1
+#define MPAGE_CONTROL_CURRENT               0
+#define MPAGE_CONTROL_CHANGEABLE            1
+#define MPAGE_CONTROL_DEFAULT               2
+#define MPAGE_CONTROL_SAVED                 3
 
 /* defines for useful SCSI Status codes */
 #define SCSI_STATUS_CHECK_CONDITION     0x2
@@ -290,8 +292,8 @@ void scsiDecodeNonMediumErrPage(unsigned char * resp,
 int scsiFetchExtendedSelfTestTime(int device, int * durationSec, 
                                   int modese_len);
 int scsiCountFailedSelfTests(int fd, int noisy);
-int scsiFetchControlGLTSD(int device, int modese_len);
-int scsiClearControlGLTSD(int device, int modese_len);
+int scsiFetchControlGLTSD(int device, int modese_len, int current);
+int scsiSetControlGLTSD(int device, int enabled, int modese_len);
 int scsiFetchTransportProtocol(int device, int modese_len);
 
 /* T10 Standard IE Additional Sense Code strings taken from t10.org */
diff --git a/sm5/scsiprint.c b/sm5/scsiprint.c
index 4e0d285cb386cf181057ad75ebaeac080245c764..bdfbcf8f11e5e6d7c3a97447a515ddc24c4de23c 100644
--- a/sm5/scsiprint.c
+++ b/sm5/scsiprint.c
@@ -40,7 +40,7 @@
 
 #define GBUF_SIZE 65535
 
-const char* scsiprint_c_cvsid="$Id: scsiprint.c,v 1.65 2003/11/18 16:53:00 ballen4705 Exp $"
+const char* scsiprint_c_cvsid="$Id: scsiprint.c,v 1.66 2003/11/19 06:11:01 dpgilbert Exp $"
 EXTERN_H_CVSID SCSICMDS_H_CVSID SCSIPRINT_H_CVSID SMARTCTL_H_CVSID UTILITY_H_CVSID;
 
 // control block which points to external global control variables
@@ -834,15 +834,17 @@ int scsiPrintMain(int fd)
     }
     
     if (con->smartautosaveenable) {
-      if (scsiClearControlGLTSD(fd, modese_len)) {
+      if (scsiSetControlGLTSD(fd, 0, modese_len)) {
 	pout("Enable autosave (clear GLTSD bit) failed\n");
 	failuretest(OPTIONAL_CMD,returnval |= FAILSMART);
       }
     }
     
     if (con->smartautosavedisable) {
-      // Doug, this is where we should have a corresponding disable
-      // GLTSD -- mimic structure just above, please
+      if (scsiSetControlGLTSD(fd, 1, modese_len)) {
+	pout("Disbale autosave (set GLTSD bit) failed\n");
+	failuretest(OPTIONAL_CMD,returnval |= FAILSMART);
+      }
     }
     
     if (con->checksmart) {
@@ -878,7 +880,7 @@ int scsiPrintMain(int fd)
     }
     if (con->smarterrorlog) {
         scsiPrintErrorCounterLog(fd);
-        if (1 == scsiFetchControlGLTSD(fd, modese_len))
+        if (1 == scsiFetchControlGLTSD(fd, modese_len, 1))
             pout("\n[GLTSD (global logging target save disable) set. "
                  "Enable save with '-S on']\n");
     }
diff --git a/sm5/scsiprint.cpp b/sm5/scsiprint.cpp
index 5afcd560510e4b686f6752a862e4071ef1503739..29e3f03a862f6ad4792b8e3f5005876866c4c1e0 100644
--- a/sm5/scsiprint.cpp
+++ b/sm5/scsiprint.cpp
@@ -40,7 +40,7 @@
 
 #define GBUF_SIZE 65535
 
-const char* scsiprint_c_cvsid="$Id: scsiprint.cpp,v 1.65 2003/11/18 16:53:00 ballen4705 Exp $"
+const char* scsiprint_c_cvsid="$Id: scsiprint.cpp,v 1.66 2003/11/19 06:11:01 dpgilbert Exp $"
 EXTERN_H_CVSID SCSICMDS_H_CVSID SCSIPRINT_H_CVSID SMARTCTL_H_CVSID UTILITY_H_CVSID;
 
 // control block which points to external global control variables
@@ -834,15 +834,17 @@ int scsiPrintMain(int fd)
     }
     
     if (con->smartautosaveenable) {
-      if (scsiClearControlGLTSD(fd, modese_len)) {
+      if (scsiSetControlGLTSD(fd, 0, modese_len)) {
 	pout("Enable autosave (clear GLTSD bit) failed\n");
 	failuretest(OPTIONAL_CMD,returnval |= FAILSMART);
       }
     }
     
     if (con->smartautosavedisable) {
-      // Doug, this is where we should have a corresponding disable
-      // GLTSD -- mimic structure just above, please
+      if (scsiSetControlGLTSD(fd, 1, modese_len)) {
+	pout("Disbale autosave (set GLTSD bit) failed\n");
+	failuretest(OPTIONAL_CMD,returnval |= FAILSMART);
+      }
     }
     
     if (con->checksmart) {
@@ -878,7 +880,7 @@ int scsiPrintMain(int fd)
     }
     if (con->smarterrorlog) {
         scsiPrintErrorCounterLog(fd);
-        if (1 == scsiFetchControlGLTSD(fd, modese_len))
+        if (1 == scsiFetchControlGLTSD(fd, modese_len, 1))
             pout("\n[GLTSD (global logging target save disable) set. "
                  "Enable save with '-S on']\n");
     }
diff --git a/sm5/smartd.c b/sm5/smartd.c
index ab5f6c59c8057ea30c7f3245cec1e305a770162a..2f35ff5caee22628e875074d818ff1a1f8426a7a 100644
--- a/sm5/smartd.c
+++ b/sm5/smartd.c
@@ -65,7 +65,7 @@
 extern const char *atacmdnames_c_cvsid, *atacmds_c_cvsid, *ataprint_c_cvsid, *escalade_c_cvsid, 
                   *knowndrives_c_cvsid, *os_XXXX_c_cvsid, *scsicmds_c_cvsid, *utility_c_cvsid;
 
-const char *smartd_c_cvsid="$Id: smartd.c,v 1.243 2003/11/18 16:53:00 ballen4705 Exp $" 
+const char *smartd_c_cvsid="$Id: smartd.c,v 1.244 2003/11/19 06:12:40 dpgilbert Exp $" 
                             ATACMDS_H_CVSID ATAPRINT_H_CVSID CONFIG_H_CVSID EXTERN_H_CVSID KNOWNDRIVES_H_CVSID
                             SCSICMDS_H_CVSID SMARTD_H_CVSID UTILITY_H_CVSID; 
 
@@ -1107,12 +1107,15 @@ static int SCSIDeviceScan(cfgfile *cfg) {
   
   // disable autosave (set GLTSD bit)
   if (cfg->autosave==1){
-    // Doug, fill in by following the pattern immediately below
+    if (scsiSetControlGLTSD(fd, 1, cfg->modese_len))
+      PrintOut(LOG_INFO,"Device: %s, could not disable autosave (set GLTSD bit).\n",device);
+    else
+      PrintOut(LOG_INFO,"Device: %s, disabled autosave (set GLTSD bit).\n",device);
   }
 
   // or enable autosave (clear GLTSD bit)
   if (cfg->autosave==2){
-    if (scsiClearControlGLTSD(fd, cfg->modese_len))
+    if (scsiSetControlGLTSD(fd, 0, cfg->modese_len))
       PrintOut(LOG_INFO,"Device: %s, could not enable autosave (clear GLTSD bit).\n",device);
     else
       PrintOut(LOG_INFO,"Device: %s, enabled autosave (clear GLTSD bit).\n",device);
diff --git a/sm5/smartd.cpp b/sm5/smartd.cpp
index 3da0772547e71c76d83cf347314e03bcb7d377a0..e2171aece1c0a3f769cb0ef5d26285bbdf9355c2 100644
--- a/sm5/smartd.cpp
+++ b/sm5/smartd.cpp
@@ -65,7 +65,7 @@
 extern const char *atacmdnames_c_cvsid, *atacmds_c_cvsid, *ataprint_c_cvsid, *escalade_c_cvsid, 
                   *knowndrives_c_cvsid, *os_XXXX_c_cvsid, *scsicmds_c_cvsid, *utility_c_cvsid;
 
-const char *smartd_c_cvsid="$Id: smartd.cpp,v 1.243 2003/11/18 16:53:00 ballen4705 Exp $" 
+const char *smartd_c_cvsid="$Id: smartd.cpp,v 1.244 2003/11/19 06:12:40 dpgilbert Exp $" 
                             ATACMDS_H_CVSID ATAPRINT_H_CVSID CONFIG_H_CVSID EXTERN_H_CVSID KNOWNDRIVES_H_CVSID
                             SCSICMDS_H_CVSID SMARTD_H_CVSID UTILITY_H_CVSID; 
 
@@ -1107,12 +1107,15 @@ static int SCSIDeviceScan(cfgfile *cfg) {
   
   // disable autosave (set GLTSD bit)
   if (cfg->autosave==1){
-    // Doug, fill in by following the pattern immediately below
+    if (scsiSetControlGLTSD(fd, 1, cfg->modese_len))
+      PrintOut(LOG_INFO,"Device: %s, could not disable autosave (set GLTSD bit).\n",device);
+    else
+      PrintOut(LOG_INFO,"Device: %s, disabled autosave (set GLTSD bit).\n",device);
   }
 
   // or enable autosave (clear GLTSD bit)
   if (cfg->autosave==2){
-    if (scsiClearControlGLTSD(fd, cfg->modese_len))
+    if (scsiSetControlGLTSD(fd, 0, cfg->modese_len))
       PrintOut(LOG_INFO,"Device: %s, could not enable autosave (clear GLTSD bit).\n",device);
     else
       PrintOut(LOG_INFO,"Device: %s, enabled autosave (clear GLTSD bit).\n",device);