diff --git a/sm5/CHANGELOG b/sm5/CHANGELOG
index f00ee9f19f5cdcc2c9a9925cb0676d8fde7780e9..d880686daf8dd069c65d0c64978c77b79497f365 100644
--- a/sm5/CHANGELOG
+++ b/sm5/CHANGELOG
@@ -1,6 +1,6 @@
 CHANGELOG for smartmontools
 
-$Id: CHANGELOG,v 1.653 2008/02/17 00:30:47 dpgilbert Exp $
+$Id: CHANGELOG,v 1.654 2008/02/23 06:41:59 ballen4705 Exp $
 
 The most recent version of this file is:
 http://smartmontools.cvs.sourceforge.net/smartmontools/sm5/CHANGELOG?view=markup
@@ -34,6 +34,10 @@ NOTES FOR FUTURE RELEASES: see TODO file.
 
 <DEVELOPERS: ADDITIONS TO THE CHANGE LOG GO JUST BELOW HERE, PLEASE>
 
+  [BA] Fix auto-offline support in FreeBSD.  Thanks to
+       Cyrus Rahman <crahman@gmail.com> for the patch, and
+       Eduard Martinescu for blessing it.
+
   [DG] smartd re-opens "SCSI" devices as ATA devices if a SAT layer is
        detected (smartd bug IMO). In Linux this upsets scsi generic
        device nodes (e.g. /dev/sg0). Detect the re-open in os_linux.cpp
diff --git a/sm5/os_freebsd.cpp b/sm5/os_freebsd.cpp
index 4da7b7f41ad857613ee9dab588c705d04728bb40..1e0dcdc4b03ea8326df9ede162103055f7719999 100644
--- a/sm5/os_freebsd.cpp
+++ b/sm5/os_freebsd.cpp
@@ -44,9 +44,9 @@
 #include "extern.h"
 #include "os_freebsd.h"
 
-static const char *filenameandversion="$Id: os_freebsd.cpp,v 1.55 2007/12/08 17:11:11 shattered Exp $";
+static const char *filenameandversion="$Id: os_freebsd.cpp,v 1.56 2008/02/23 06:41:59 ballen4705 Exp $";
 
-const char *os_XXXX_c_cvsid="$Id: os_freebsd.cpp,v 1.55 2007/12/08 17:11:11 shattered Exp $" \
+const char *os_XXXX_c_cvsid="$Id: os_freebsd.cpp,v 1.56 2008/02/23 06:41:59 ballen4705 Exp $" \
 ATACMDS_H_CVSID CONFIG_H_CVSID INT64_H_CVSID OS_FREEBSD_H_CVSID SCSICMDS_H_CVSID UTILITY_H_CVSID;
 
 // to hold onto exit code for atexit routine
@@ -368,7 +368,8 @@ int ata_command_interface(int fd, smart_command_set command, int select, char *d
   case AUTO_OFFLINE:
     // NOTE: According to ATAPI 4 and UP, this command is obsolete
     request.u.ata.feature=ATA_SMART_AUTO_OFFLINE;
-    request.u.ata.lba=select|(0xc24f<<8);
+    request.u.ata.lba=0xc24f<<8;                                                                                                                                         
+    request.u.ata.count=select;                                                                                                                                          
     request.flags=ATA_CMD_CONTROL;
     break;
   case AUTOSAVE: