diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 5f506c907..cba3d76bd 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,11 @@
+2007-02-23  Corinna Vinschen  <corinna@vinschen.de>
+
+	* fhandler.cc (fhandler_base::lseek): Drop 9x considerations.
+	* fhandler_disk_file.cc (fhandler_disk_file::lock): Ditto.
+	* wincap.cc: Remove lock_file_highword and has_64bit_file_access
+	throughout.
+	* wincap.h: Ditto.
+
 2007-02-22  Corinna Vinschen  <corinna@vinschen.de>
 
 	* cygheap.h (struct cwdstuff): Remove sync member and keep_in_sync
diff --git a/winsup/cygwin/fhandler.cc b/winsup/cygwin/fhandler.cc
index 6558e5625..348ee0164 100644
--- a/winsup/cygwin/fhandler.cc
+++ b/winsup/cygwin/fhandler.cc
@@ -1031,18 +1031,6 @@ fhandler_base::lseek (_off64_t offset, int whence)
 {
   _off64_t res;
 
-  /* 9x/Me doesn't support 64bit offsets.  We trap that here and return
-     EINVAL.  It doesn't make sense to simulate bigger offsets by a
-     SetFilePointer sequence since FAT and FAT32 don't support file
-     size >= 4GB anyway. */
-  if (!wincap.has_64bit_file_access ()
-      && (offset < LONG_MIN || offset > LONG_MAX))
-    {
-      debug_printf ("Win9x, offset not 32 bit.");
-      set_errno (EINVAL);
-      return (_off64_t)-1;
-    }
-
   /* Seeks on text files is tough, we rewind and read till we get to the
      right place.  */
 
@@ -1059,17 +1047,10 @@ fhandler_base::lseek (_off64_t offset, int whence)
 		       : (whence == SEEK_CUR ? FILE_CURRENT : FILE_END);
 
   LONG off_low = ((__uint64_t) offset) & UINT32_MAX;
-  LONG *poff_high, off_high;
-  if (!wincap.has_64bit_file_access ())
-    poff_high = NULL;
-  else
-    {
-      off_high =  ((__uint64_t) offset) >> 32LL;
-      poff_high = &off_high;
-    }
+  LONG off_high = ((__uint64_t) offset) >> 32LL;
 
   debug_printf ("setting file pointer to %u (high), %u (low)", off_high, off_low);
-  res = SetFilePointer (get_handle (), off_low, poff_high, win32_whence);
+  res = SetFilePointer (get_handle (), off_low, &off_high, win32_whence);
   if (res == INVALID_SET_FILE_POINTER && GetLastError ())
     {
       __seterrno ();
@@ -1077,11 +1058,10 @@ fhandler_base::lseek (_off64_t offset, int whence)
     }
   else
     {
-      if (poff_high)
-	res += (_off64_t) *poff_high << 32;
+      res += (_off64_t) off_high << 32;
 
       /* When next we write(), we will check to see if *this* seek went beyond
-	 the end of the file, and back-seek and fill with zeros if so - DJ */
+	 the end of the file and if so, potentially sparsify the file. */
       did_lseek (true);
 
       /* If this was a SEEK_CUR with offset 0, we still might have
diff --git a/winsup/cygwin/fhandler_disk_file.cc b/winsup/cygwin/fhandler_disk_file.cc
index a7b51a2b7..5b70ad281 100644
--- a/winsup/cygwin/fhandler_disk_file.cc
+++ b/winsup/cygwin/fhandler_disk_file.cc
@@ -1264,11 +1264,7 @@ fhandler_disk_file::lock (int cmd, struct __flock64 *fl)
     {
       /* Special case if len == 0 for POSIX means lock to the end of
 	 the entire file (and all future extensions).  */
-      /* CV, 2003-12-03: And yet another Win 9x bugginess.  For some reason
-	 offset + length must be <= 0x100000000.  I'm using 0xffffffff as
-	 upper border here, this should be sufficient. */
-      len_low = UINT32_MAX - (wincap.lock_file_highword () ? 0 : off_low);
-      len_high = wincap.lock_file_highword ();
+      len_low = len_high = UINT32_MAX;
     }
   else
     {
diff --git a/winsup/cygwin/wincap.cc b/winsup/cygwin/wincap.cc
index 9dcf11089..abd274a79 100644
--- a/winsup/cygwin/wincap.cc
+++ b/winsup/cygwin/wincap.cc
@@ -13,7 +13,6 @@ details. */
 
 /* Minimal set of capabilities which is equivalent to NT4. */
 static NO_COPY wincaps wincap_unknown = {
-  lock_file_highword:UINT32_MAX,
   chunksize:0,
   heapslop:0x0,
   is_server:false,
@@ -25,7 +24,6 @@ static NO_COPY wincaps wincap_unknown = {
   has_unreliable_pipes:false,
   has_raw_devices:true,
   has_valid_processorlevel:true,
-  has_64bit_file_access:true,
   has_process_io_counters:false,
   supports_reading_modem_output_lines:true,
   needs_memory_protection:true,
@@ -52,7 +50,6 @@ static NO_COPY wincaps wincap_unknown = {
 };
 
 static NO_COPY wincaps wincap_nt4 = {
-  lock_file_highword:UINT32_MAX,
   chunksize:0,
   heapslop:0x0,
   is_server:false,
@@ -64,7 +61,6 @@ static NO_COPY wincaps wincap_nt4 = {
   has_unreliable_pipes:false,
   has_raw_devices:true,
   has_valid_processorlevel:true,
-  has_64bit_file_access:true,
   has_process_io_counters:false,
   supports_reading_modem_output_lines:true,
   needs_memory_protection:true,
@@ -91,7 +87,6 @@ static NO_COPY wincaps wincap_nt4 = {
 };
 
 static NO_COPY wincaps wincap_nt4sp4 = {
-  lock_file_highword:UINT32_MAX,
   chunksize:0,
   heapslop:0x0,
   is_server:false,
@@ -103,7 +98,6 @@ static NO_COPY wincaps wincap_nt4sp4 = {
   has_unreliable_pipes:false,
   has_raw_devices:true,
   has_valid_processorlevel:true,
-  has_64bit_file_access:true,
   has_process_io_counters:false,
   supports_reading_modem_output_lines:true,
   needs_memory_protection:true,
@@ -130,7 +124,6 @@ static NO_COPY wincaps wincap_nt4sp4 = {
 };
 
 static NO_COPY wincaps wincap_2000 = {
-  lock_file_highword:UINT32_MAX,
   chunksize:0,
   heapslop:0x0,
   is_server:false,
@@ -142,7 +135,6 @@ static NO_COPY wincaps wincap_2000 = {
   has_unreliable_pipes:false,
   has_raw_devices:true,
   has_valid_processorlevel:true,
-  has_64bit_file_access:true,
   has_process_io_counters:true,
   supports_reading_modem_output_lines:true,
   needs_memory_protection:true,
@@ -169,7 +161,6 @@ static NO_COPY wincaps wincap_2000 = {
 };
 
 static NO_COPY wincaps wincap_xp = {
-  lock_file_highword:UINT32_MAX,
   chunksize:0,
   heapslop:0x0,
   is_server:false,
@@ -181,7 +172,6 @@ static NO_COPY wincaps wincap_xp = {
   has_unreliable_pipes:false,
   has_raw_devices:true,
   has_valid_processorlevel:true,
-  has_64bit_file_access:true,
   has_process_io_counters:true,
   supports_reading_modem_output_lines:true,
   needs_memory_protection:true,
@@ -208,7 +198,6 @@ static NO_COPY wincaps wincap_xp = {
 };
 
 static NO_COPY wincaps wincap_2003 = {
-  lock_file_highword:UINT32_MAX,
   chunksize:0,
   heapslop:0x4,
   is_server:true,
@@ -220,7 +209,6 @@ static NO_COPY wincaps wincap_2003 = {
   has_unreliable_pipes:false,
   has_raw_devices:true,
   has_valid_processorlevel:true,
-  has_64bit_file_access:true,
   has_process_io_counters:true,
   supports_reading_modem_output_lines:true,
   needs_memory_protection:true,
@@ -247,7 +235,6 @@ static NO_COPY wincaps wincap_2003 = {
 };
 
 static NO_COPY wincaps wincap_vista = {
-  lock_file_highword:UINT32_MAX,
   chunksize:0,
   heapslop:0x4,
   is_server:false,
@@ -259,7 +246,6 @@ static NO_COPY wincaps wincap_vista = {
   has_unreliable_pipes:false,
   has_raw_devices:true,
   has_valid_processorlevel:true,
-  has_64bit_file_access:true,
   has_process_io_counters:true,
   supports_reading_modem_output_lines:true,
   needs_memory_protection:true,
diff --git a/winsup/cygwin/wincap.h b/winsup/cygwin/wincap.h
index d803f6b18..f4e64a09e 100644
--- a/winsup/cygwin/wincap.h
+++ b/winsup/cygwin/wincap.h
@@ -13,7 +13,6 @@ details. */
 
 struct wincaps
 {
-  DWORD    lock_file_highword;
   DWORD    chunksize;
   DWORD    heapslop;
   unsigned is_server                                    : 1;
@@ -25,7 +24,6 @@ struct wincaps
   unsigned has_unreliable_pipes                         : 1;
   unsigned has_raw_devices				: 1;
   unsigned has_valid_processorlevel			: 1;
-  unsigned has_64bit_file_access			: 1;
   unsigned has_process_io_counters                      : 1;
   unsigned supports_reading_modem_output_lines          : 1;
   unsigned needs_memory_protection			: 1;
@@ -68,7 +66,6 @@ public:
 
 #define IMPLEMENT(cap) cap() const { return ((wincaps *) this->caps)->cap; }
 
-  DWORD IMPLEMENT (lock_file_highword)
   DWORD IMPLEMENT (chunksize)
   DWORD IMPLEMENT (heapslop)
   bool  IMPLEMENT (is_server)
@@ -80,7 +77,6 @@ public:
   bool  IMPLEMENT (has_unreliable_pipes)
   bool  IMPLEMENT (has_raw_devices)
   bool  IMPLEMENT (has_valid_processorlevel)
-  bool  IMPLEMENT (has_64bit_file_access)
   bool  IMPLEMENT (has_process_io_counters)
   bool  IMPLEMENT (supports_reading_modem_output_lines)
   bool  IMPLEMENT (needs_memory_protection)