diff --git a/sm5/CHANGELOG b/sm5/CHANGELOG
index f0cbb9ad2ddc091122534db819ded50c13a5dfc2..c125ea308be2ffed47370857a9242a5f22906a24 100644
--- a/sm5/CHANGELOG
+++ b/sm5/CHANGELOG
@@ -1,6 +1,6 @@
 CHANGELOG for smartmontools
 
-$Id: CHANGELOG,v 1.813 2009/06/26 20:37:35 chrfranke Exp $
+$Id: CHANGELOG,v 1.814 2009/06/29 19:56:19 chrfranke Exp $
 
 The most recent version of this file is:
 http://smartmontools.cvs.sourceforge.net/smartmontools/sm5/CHANGELOG?view=markup
@@ -41,6 +41,11 @@ NOTES FOR FUTURE RELEASES: see TODO file.
 
 <DEVELOPERS: ADDITIONS TO THE CHANGE LOG GO JUST BELOW HERE, PLEASE>
 
+  [CF] Disable 48-bit ATA commands for JMicron USB bridges by default
+       because these commands do not work with all devices.
+       Add '-d usbjmicron,x' to enable 48-bit commands.
+       Thanks to Alexander Shaduri for the problem report.
+
   [CF] smartd: Don't ignore the '-n' directive when a self-test is
        scheduled. Start the self-test later when the disk is active
        again.
diff --git a/sm5/scsiata.cpp b/sm5/scsiata.cpp
index b970a82b76c03d6142258b4eff67b22c82940571..663de593c14ea92ea40565545dbbb27ed627e5f9 100644
--- a/sm5/scsiata.cpp
+++ b/sm5/scsiata.cpp
@@ -51,7 +51,7 @@
 #include "dev_ata_cmd_set.h" // ata_device_with_command_set
 #include "dev_tunnelled.h" // tunnelled_device<>
 
-const char *scsiata_c_cvsid="$Id: scsiata.cpp,v 1.37 2009/06/12 12:10:07 chrfranke Exp $"
+const char *scsiata_c_cvsid="$Id: scsiata.cpp,v 1.38 2009/06/29 19:56:19 chrfranke Exp $"
 CONFIG_H_CVSID EXTERN_H_CVSID INT64_H_CVSID SCSICMDS_H_CVSID SCSIATA_H_CVSID UTILITY_H_CVSID;
 
 /* for passing global control variables */
@@ -829,7 +829,7 @@ class usbjmicron_device
 {
 public:
   usbjmicron_device(smart_interface * intf, scsi_device * scsidev,
-                    const char * req_type, int port);
+                    const char * req_type, bool ata_48bit_support, int port);
 
   virtual ~usbjmicron_device() throw();
 
@@ -840,15 +840,16 @@ public:
 private:
   bool get_registers(unsigned short addr, unsigned char * buf, unsigned short size);
 
+  bool m_ata_48bit_support;
   int m_port;
 };
 
 
 usbjmicron_device::usbjmicron_device(smart_interface * intf, scsi_device * scsidev,
-                                     const char * req_type, int port)
+                                     const char * req_type, bool ata_48bit_support, int port)
 : smart_device(intf, scsidev->get_dev_name(), "usbjmicron", req_type),
   tunnelled_device<ata_device, scsi_device>(scsidev),
-  m_port(port)
+  m_ata_48bit_support(ata_48bit_support), m_port(port)
 {
   set_info().info_name = strprintf("%s [USB JMicron]", scsidev->get_info_name());
 }
@@ -891,7 +892,7 @@ bool usbjmicron_device::ata_pass_through(const ata_cmd_in & in, ata_cmd_out & ou
   if (!ata_cmd_is_ok(in,
     true,  // data_out_support
     false, // !multi_sector_support
-    true)  // ata_48bit_support (limited, see below)
+    m_ata_48bit_support) // limited, see below
   )
     return false;
 
@@ -1217,14 +1218,19 @@ ata_device * smart_interface::get_sat_device(const char * type, scsi_device * sc
   }
 
   else if (!strncmp(type, "usbjmicron", 10)) {
-    int port = -1, n1 = -1, n2 = -1;
-    if (!(  (sscanf(type, "usbjmicron%n,%d%n", &n1, &port, &n2) == 1
-             && n2 == (int)strlen(type) && 0 <= port && port <= 1)
-          || n1 == (int)strlen(type))) {
-      set_err(EINVAL, "Option '-d usbmicron,<n>' requires <n> to be 0 or 1");
+    const char * t = type + 10;
+    bool ata_48bit_support = false;
+    if (!strncmp(t, ",x", 2)) {
+      t += 2;
+      ata_48bit_support = true;
+    }
+    int port = -1, n = -1;
+    if (*t && !(  (sscanf(t, ",%d%n", &port, &n) == 1
+                && n == (int)strlen(t) && 0 <= port && port <= 1))) {
+      set_err(EINVAL, "Option '-d usbmicron[,x],<n>' requires <n> to be 0 or 1");
       return 0;
     }
-    return new usbjmicron_device(this, scsidev, type, port);
+    return new usbjmicron_device(this, scsidev, type, ata_48bit_support, port);
   }
 
   else if (!strcmp(type, "usbsunplus")) {
@@ -1296,6 +1302,7 @@ struct usb_id_entry {
 const char d_sat[]     = "sat";
 const char d_cypress[] = "usbcypress";
 const char d_jmicron[] = "usbjmicron";
+const char d_jmicron_x[] = "usbjmicron,x";
 const char d_sunplus[] = "usbsunplus";
 const char d_unsup[]   = "unsupported";
 
@@ -1304,7 +1311,7 @@ const usb_id_entry usb_ids[] = {
   { 0x04b4, 0x6830, 0x0001, d_unsup   }, // Cypress CY7C68300A (AT2)
   { 0x04b4, 0x6830, 0x0240, d_cypress }, // Cypress CY7C68300B/C (AT2LP)
 //{ 0x04b4, 0x6831,     -1, d_cypress }, // Cypress CY7C68310 (ISD-300LP)
-  { 0x04fc, 0x0c15, 0xf615, d_sunplus }, // SunPlus SPDIF...
+  { 0x04fc, 0x0c15, 0xf615, d_sunplus }, // SunPlus SPDIF215
   { 0x04fc, 0x0c25, 0x0103, d_sunplus }, // SunPlus SPDIF225 (USB+SATA->SATA)
   { 0x059f, 0x0651,     -1, d_unsup   }, // LaCie hard disk (FA Porsche design)
   { 0x059f, 0x1018,     -1, d_sat     }, // LaCie hard disk (Neil Poulton design)
@@ -1323,9 +1330,9 @@ const usb_id_entry usb_ids[] = {
   { 0x13fd, 0x1240, 0x0104, d_sat     }, // Initio ? (USB->SATA)
   { 0x13fd, 0x1340, 0x0208, d_sat     }, // Initio ? (USB+SATA->SATA)
   { 0x152d, 0x2329, 0x0100, d_jmicron }, // JMicron JM20329 (USB->SATA)
-  { 0x152d, 0x2336, 0x0100, d_jmicron }, // JMicron JM20336 (USB+SATA->SATA, USB->2xSATA)
+  { 0x152d, 0x2336, 0x0100, d_jmicron_x},// JMicron JM20336 (USB+SATA->SATA, USB->2xSATA)
   { 0x152d, 0x2338, 0x0100, d_jmicron }, // JMicron JM20337/8 (USB->SATA+PATA, USB+SATA->PATA)
-  { 0x152d, 0x2339, 0x0100, d_jmicron }  // JMicron JM20339 (USB->SATA)
+  { 0x152d, 0x2339, 0x0100, d_jmicron_x} // JMicron JM20339 (USB->SATA)
 };
 
 const unsigned num_usb_ids = sizeof(usb_ids)/sizeof(usb_ids[0]);
diff --git a/sm5/smartctl.8.in b/sm5/smartctl.8.in
index f077403368697d0f01e8f8d1953c2dccb8b2264c..3c2f74088461513a6392ce9281ac55ecd0a636bf 100644
--- a/sm5/smartctl.8.in
+++ b/sm5/smartctl.8.in
@@ -1,7 +1,7 @@
 .ig
  Copyright (C) 2002-9 Bruce Allen <smartmontools-support@lists.sourceforge.net>
 
- $Id: smartctl.8.in,v 1.130 2009/06/24 04:10:10 dpgilbert Exp $
+ $Id: smartctl.8.in,v 1.131 2009/06/29 19:56:19 chrfranke 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
@@ -236,10 +236,14 @@ with \'\-d usbcypress,0xn\', where n is the scsi operation code,
 you're running the risk of damage to the device or filesystems on it.
 
 [NEW EXPERIMENTAL SMARTCTL FEATURE] The \'usbjmicron\' device type is for
-SATA disks that are behind a JMicron USB to SATA bridge. The port can be
-specified by \'\-d usbjmicron,PORT\' where PORT is 0 (master) or 1 (slave).
-If no PORT is specified, it is auto-detected. If both ports are connected,
-0 takes precedence.
+SATA disks that are behind a JMicron USB to PATA/SATA bridge. The 48-bit
+ATA commands (required e.g. for \'\-l xerror\', see below) do not work with
+all of these bridges and are therefore disabled by default. These commands
+can be enabled by \'\-d usbjmicron,x\'. CAUTION: Specifying \',x\' for a
+device which do not support it results in I/O errors and may disconnect
+the drive. The port can be specified by \'\-d usbjmicron[,x],PORT\' where
+PORT is 0 (master) or 1 (slave). If no PORT is specified, it is auto-detected.
+If both ports are connected, 0 takes precedence.
 
 [NEW EXPERIMENTAL SMARTCTL FEATURE] The \'usbsunplus\' device type is for
 SATA disks that are behind a SunplusIT USB to SATA bridge.
@@ -1739,7 +1743,7 @@ these documents may be found in the References section of the
 
 .SH
 CVS ID OF THIS PAGE:
-$Id: smartctl.8.in,v 1.130 2009/06/24 04:10:10 dpgilbert Exp $
+$Id: smartctl.8.in,v 1.131 2009/06/29 19:56:19 chrfranke Exp $
 .\" Local Variables:	         
 .\" mode: nroff         
 .\" End: