diff --git a/src/ChangeLog b/src/ChangeLog
index b6de6c40..6ec4e7c3 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,9 @@
+2003-09-16  Hrvoje Niksic  <hniksic@xemacs.org>
+
+	* utils.c (wtimer_sys_diff): Convert the time difference to signed
+	__int64, then to double.  This works around MS VC++ 6 which can't
+	convert unsigned __int64 to double directly.
+
 2003-09-16  Hrvoje Niksic  <hniksic@xemacs.org>
 
 	* Makefile.in (clean): Also remove the core.<number> files
diff --git a/src/utils.c b/src/utils.c
index 74e4552f..0f443411 100644
--- a/src/utils.c
+++ b/src/utils.c
@@ -1648,7 +1648,10 @@ wtimer_sys_diff (wget_sys_time *wst1, wget_sys_time *wst2)
 #endif
 
 #ifdef WINDOWS
-  return (double)(wst1->QuadPart - wst2->QuadPart) / 10000;
+  /* VC++ 6 doesn't support direct cast of uint64 to double.  To work
+     around this, we subtract, then convert to signed, then finally to
+     double.  */
+  return (double)(signed __int64)(wst1->QuadPart - wst2->QuadPart) / 10000;
 #endif
 }