diff --git a/VersionNum b/VersionNum
index 1775272e67172be60e1fcff796a7c1ec08658eb8..66d88dc7f2822fefaecf1f35aaf6d448225832fe 100644
--- a/VersionNum
+++ b/VersionNum
@@ -1,23 +1,23 @@
-/* (0.22)
+/* (0.23)
  *
  * This file is automatically maintained by srccommit, do not edit manually.
- * Last processed by srccommit version: 1.2.
+ * Last processed by srccommit version: 1.68.
  *
  */
-#define Module_MajorVersion_CMHG        0.22
+#define Module_MajorVersion_CMHG        0.23
 #define Module_MinorVersion_CMHG        
-#define Module_Date_CMHG                21 Jan 2004
+#define Module_Date_CMHG                16 Feb 2004
 
-#define Module_MajorVersion             "0.22"
-#define Module_Version                  22
+#define Module_MajorVersion             "0.23"
+#define Module_Version                  23
 #define Module_MinorVersion             ""
-#define Module_Date                     "21 Jan 2004"
+#define Module_Date                     "16 Feb 2004"
 
-#define Module_ApplicationDate          "21-Jan-04"
+#define Module_ApplicationDate          "16-Feb-04"
 
 #define Module_ComponentName            "NetBSD"
 #define Module_ComponentPath            "RiscOS/Sources/HWSupport/USB/NetBSD"
 
-#define Module_FullVersion              "0.22"
-#define Module_HelpVersion              "0.22 (21 Jan 2004)"
-#define Module_LibraryVersionInfo       "0:22"
+#define Module_FullVersion              "0.23"
+#define Module_HelpVersion              "0.23 (16 Feb 2004)"
+#define Module_LibraryVersionInfo       "0:23"
diff --git a/build/Makefile b/build/Makefile
index e0d3b3d8ce5d5a1b624c25c452991385084ca750..b5f0700c259a8425a63411f9f7d5f6502b58a193 100644
--- a/build/Makefile
+++ b/build/Makefile
@@ -21,7 +21,8 @@ TARGET          = ${COMPONENT}
 DIRS            = o._dirs
 MSGLOC          = Resources.${COMPONENT}.Messages
 DEVICELIST      = Resources.<Locale>.USBDevs
-LIBS            = ${DEBUGLIB} ${NET5LIBS} ${CALLXLIB} ${ASMUTILS} ${TBOXLIBS}
+#LIBS		= ${DEBUGLIB} ${NET5LIBS} ${CALLXLIB} ${ASMUTILS} ${TBOXLIBS}
+LIBS            = ${DEBUGLIB} ${MODMALLOCLIB} ${WILDLIB} ${DDTLIB} ${DESKLIB}  ${NET5LIBS} ${CALLXLIB} ${ASMUTILS} ${TBOXLIBS}
 RDIR            = ${RESDIR}.${COMPONENT}
 USBDIR          = <Lib$Dir>.USB
 
@@ -150,3 +151,554 @@ listing: i.ohci i.ohcimodule i.usb i.usbdi i.usbdi_util i.usb_subr i.ugen i.usbm
 
 
 # Dynamic dependencies:
+o.usb:	^.dev.usb.c.usb
+o.usb:	TCPIPLibs:sys.h.cdefs
+o.usb:	TCPIPLibs:sys.h.param
+o.usb:	TCPIPLibs:sys.h.types
+o.usb:	TCPIPLibs:sys.h.cdefs
+o.usb:	TCPIPLibs:machine.h.endian
+o.usb:	TCPIPLibs:machine.h.ansi
+o.usb:	TCPIPLibs:machine.h.types
+o.usb:	TCPIPLibs:sys.h.syslimits
+o.usb:	TCPIPLibs:sys.h.cdefs
+o.usb:	TCPIPLibs:sys.h.errno
+o.usb:	TCPIPLibs:sys.h.time
+o.usb:	TCPIPLibs:sys.h.resource
+o.usb:	TCPIPLibs:sys.h.types
+o.usb:	TCPIPLibs:sys.h.ucred
+o.usb:	TCPIPLibs:sys.h.uio
+o.usb:	TCPIPLibs:sys.h.rtprio
+o.usb:	TCPIPLibs:sys.h.signal
+o.usb:	TCPIPLibs:machine.h.signal
+o.usb:	TCPIPLibs:machine.h.param
+o.usb:	TCPIPLibs:machine.h.limits
+o.usb:	TCPIPLibs:sys.h.systm
+o.usb:	TCPIPLibs:machine.h.cpufunc
+o.usb:	TCPIPLibs:machine.h.stdarg
+o.usb:	TCPIPLibs:sys.h.callout
+o.usb:	TCPIPLibs:sys.h.queue
+o.usb:	TCPIPLibs:sys.h.kernel
+o.usb:	TCPIPLibs:sys.h.linker_set
+o.usb:	TCPIPLibs:sys.h.malloc
+o.usb:	^.sys.h.device
+o.usb:	TCPIPLibs:sys.h.queue
+o.usb:	TCPIPLibs:sys.h.proc
+o.usb:	TCPIPLibs:machine.h.proc
+o.usb:	TCPIPLibs:sys.h.queue
+o.usb:	TCPIPLibs:sys.h.rtprio
+o.usb:	TCPIPLibs:sys.h.select
+o.usb:	TCPIPLibs:sys.h.time
+o.usb:	TCPIPLibs:sys.h.conf
+o.usb:	TCPIPLibs:sys.h.fcntl
+o.usb:	^.sys.h.poll
+o.usb:	TCPIPLibs:sys.h.select
+o.usb:	TCPIPLibs:sys.h.vnode
+o.usb:	TCPIPLibs:sys.h.queue
+o.usb:	TCPIPLibs:sys.h.signalvar
+o.usb:	^.dev.usb.h.usb
+o.usb:	TCPIPLibs:sys.h.types
+o.usb:	TCPIPLibs:sys.h.time
+o.usb:	^.dev.usb.h.usb_port
+o.usb:	h.opt_usbverbose
+o.usb:	^.sys.h.device
+o.usb:	TCPIPLibs:h.errno
+o.usb:	TCPIPLibs:sys.h.ioccom
+o.usb:	^.dev.usb.h.usbdi
+o.usb:	^.dev.usb.h.usbdi_util
+o.usb:	^.machine.h.bus
+o.usb:	TCPIPLibs:sys.h.types
+o.usb:	^.dev.usb.h.usbdivar
+o.usb:	^.dev.usb.h.usb_quirks
+o.usbdi:	^.dev.usb.c.usbdi
+o.usbdi:	TCPIPLibs:sys.h.cdefs
+o.usbdi:	TCPIPLibs:sys.h.param
+o.usbdi:	TCPIPLibs:sys.h.types
+o.usbdi:	TCPIPLibs:sys.h.cdefs
+o.usbdi:	TCPIPLibs:machine.h.endian
+o.usbdi:	TCPIPLibs:machine.h.ansi
+o.usbdi:	TCPIPLibs:machine.h.types
+o.usbdi:	TCPIPLibs:sys.h.syslimits
+o.usbdi:	TCPIPLibs:sys.h.cdefs
+o.usbdi:	TCPIPLibs:sys.h.errno
+o.usbdi:	TCPIPLibs:sys.h.time
+o.usbdi:	TCPIPLibs:sys.h.resource
+o.usbdi:	TCPIPLibs:sys.h.types
+o.usbdi:	TCPIPLibs:sys.h.ucred
+o.usbdi:	TCPIPLibs:sys.h.uio
+o.usbdi:	TCPIPLibs:sys.h.rtprio
+o.usbdi:	TCPIPLibs:sys.h.signal
+o.usbdi:	TCPIPLibs:machine.h.signal
+o.usbdi:	TCPIPLibs:machine.h.param
+o.usbdi:	TCPIPLibs:machine.h.limits
+o.usbdi:	TCPIPLibs:sys.h.systm
+o.usbdi:	TCPIPLibs:machine.h.cpufunc
+o.usbdi:	TCPIPLibs:machine.h.stdarg
+o.usbdi:	TCPIPLibs:sys.h.callout
+o.usbdi:	TCPIPLibs:sys.h.queue
+o.usbdi:	TCPIPLibs:sys.h.malloc
+o.usbdi:	TCPIPLibs:sys.h.proc
+o.usbdi:	TCPIPLibs:machine.h.proc
+o.usbdi:	TCPIPLibs:sys.h.queue
+o.usbdi:	TCPIPLibs:sys.h.rtprio
+o.usbdi:	TCPIPLibs:sys.h.select
+o.usbdi:	TCPIPLibs:sys.h.time
+o.usbdi:	^.machine.h.bus
+o.usbdi:	TCPIPLibs:sys.h.types
+o.usbdi:	^.dev.usb.h.usb
+o.usbdi:	TCPIPLibs:sys.h.types
+o.usbdi:	TCPIPLibs:sys.h.time
+o.usbdi:	^.dev.usb.h.usb_port
+o.usbdi:	h.opt_usbverbose
+o.usbdi:	^.sys.h.device
+o.usbdi:	TCPIPLibs:sys.h.queue
+o.usbdi:	TCPIPLibs:h.errno
+o.usbdi:	TCPIPLibs:sys.h.ioccom
+o.usbdi:	^.dev.usb.h.usbdi
+o.usbdi:	^.dev.usb.h.usbdi_util
+o.usbdi:	^.dev.usb.h.usbdivar
+o.usbdi:	^.dev.usb.h.usb_mem
+o.usb_subr:	^.dev.usb.c.usb_subr
+o.usb_subr:	TCPIPLibs:sys.h.cdefs
+o.usb_subr:	TCPIPLibs:sys.h.param
+o.usb_subr:	TCPIPLibs:sys.h.types
+o.usb_subr:	TCPIPLibs:sys.h.cdefs
+o.usb_subr:	TCPIPLibs:machine.h.endian
+o.usb_subr:	TCPIPLibs:machine.h.ansi
+o.usb_subr:	TCPIPLibs:machine.h.types
+o.usb_subr:	TCPIPLibs:sys.h.syslimits
+o.usb_subr:	TCPIPLibs:sys.h.cdefs
+o.usb_subr:	TCPIPLibs:sys.h.errno
+o.usb_subr:	TCPIPLibs:sys.h.time
+o.usb_subr:	TCPIPLibs:sys.h.resource
+o.usb_subr:	TCPIPLibs:sys.h.types
+o.usb_subr:	TCPIPLibs:sys.h.ucred
+o.usb_subr:	TCPIPLibs:sys.h.uio
+o.usb_subr:	TCPIPLibs:sys.h.rtprio
+o.usb_subr:	TCPIPLibs:sys.h.signal
+o.usb_subr:	TCPIPLibs:machine.h.signal
+o.usb_subr:	TCPIPLibs:machine.h.param
+o.usb_subr:	TCPIPLibs:machine.h.limits
+o.usb_subr:	TCPIPLibs:sys.h.systm
+o.usb_subr:	TCPIPLibs:machine.h.cpufunc
+o.usb_subr:	TCPIPLibs:machine.h.stdarg
+o.usb_subr:	TCPIPLibs:sys.h.callout
+o.usb_subr:	TCPIPLibs:sys.h.queue
+o.usb_subr:	TCPIPLibs:sys.h.kernel
+o.usb_subr:	TCPIPLibs:sys.h.linker_set
+o.usb_subr:	TCPIPLibs:sys.h.malloc
+o.usb_subr:	TCPIPLibs:sys.h.proc
+o.usb_subr:	TCPIPLibs:machine.h.proc
+o.usb_subr:	TCPIPLibs:sys.h.queue
+o.usb_subr:	TCPIPLibs:sys.h.rtprio
+o.usb_subr:	TCPIPLibs:sys.h.select
+o.usb_subr:	TCPIPLibs:sys.h.time
+o.usb_subr:	^.machine.h.bus
+o.usb_subr:	TCPIPLibs:sys.h.types
+o.usb_subr:	^.dev.usb.h.usb
+o.usb_subr:	TCPIPLibs:sys.h.types
+o.usb_subr:	TCPIPLibs:sys.h.time
+o.usb_subr:	^.dev.usb.h.usb_port
+o.usb_subr:	h.opt_usbverbose
+o.usb_subr:	^.sys.h.device
+o.usb_subr:	TCPIPLibs:sys.h.queue
+o.usb_subr:	TCPIPLibs:h.errno
+o.usb_subr:	TCPIPLibs:sys.h.ioccom
+o.usb_subr:	^.dev.usb.h.usbdi
+o.usb_subr:	^.dev.usb.h.usbdi_util
+o.usb_subr:	^.dev.usb.h.usbdivar
+o.usb_subr:	^.dev.usb.h.usbdevs
+o.usb_subr:	^.dev.usb.h.usb_quirks
+o.usbdi_util:	^.dev.usb.c.usbdi_util
+o.usbdi_util:	TCPIPLibs:sys.h.cdefs
+o.usbdi_util:	TCPIPLibs:sys.h.param
+o.usbdi_util:	TCPIPLibs:sys.h.types
+o.usbdi_util:	TCPIPLibs:sys.h.cdefs
+o.usbdi_util:	TCPIPLibs:machine.h.endian
+o.usbdi_util:	TCPIPLibs:machine.h.ansi
+o.usbdi_util:	TCPIPLibs:machine.h.types
+o.usbdi_util:	TCPIPLibs:sys.h.syslimits
+o.usbdi_util:	TCPIPLibs:sys.h.cdefs
+o.usbdi_util:	TCPIPLibs:sys.h.errno
+o.usbdi_util:	TCPIPLibs:sys.h.time
+o.usbdi_util:	TCPIPLibs:sys.h.resource
+o.usbdi_util:	TCPIPLibs:sys.h.types
+o.usbdi_util:	TCPIPLibs:sys.h.ucred
+o.usbdi_util:	TCPIPLibs:sys.h.uio
+o.usbdi_util:	TCPIPLibs:sys.h.rtprio
+o.usbdi_util:	TCPIPLibs:sys.h.signal
+o.usbdi_util:	TCPIPLibs:machine.h.signal
+o.usbdi_util:	TCPIPLibs:machine.h.param
+o.usbdi_util:	TCPIPLibs:machine.h.limits
+o.usbdi_util:	TCPIPLibs:sys.h.systm
+o.usbdi_util:	TCPIPLibs:machine.h.cpufunc
+o.usbdi_util:	TCPIPLibs:machine.h.stdarg
+o.usbdi_util:	TCPIPLibs:sys.h.callout
+o.usbdi_util:	TCPIPLibs:sys.h.queue
+o.usbdi_util:	TCPIPLibs:sys.h.kernel
+o.usbdi_util:	TCPIPLibs:sys.h.linker_set
+o.usbdi_util:	TCPIPLibs:sys.h.malloc
+o.usbdi_util:	TCPIPLibs:sys.h.proc
+o.usbdi_util:	TCPIPLibs:machine.h.proc
+o.usbdi_util:	TCPIPLibs:sys.h.queue
+o.usbdi_util:	TCPIPLibs:sys.h.rtprio
+o.usbdi_util:	TCPIPLibs:sys.h.select
+o.usbdi_util:	TCPIPLibs:sys.h.time
+o.usbdi_util:	^.sys.h.device
+o.usbdi_util:	TCPIPLibs:sys.h.queue
+o.usbdi_util:	^.dev.usb.h.usb
+o.usbdi_util:	TCPIPLibs:sys.h.types
+o.usbdi_util:	TCPIPLibs:sys.h.time
+o.usbdi_util:	^.dev.usb.h.usb_port
+o.usbdi_util:	h.opt_usbverbose
+o.usbdi_util:	^.sys.h.device
+o.usbdi_util:	TCPIPLibs:h.errno
+o.usbdi_util:	TCPIPLibs:sys.h.ioccom
+o.usbdi_util:	^.dev.usb.h.usbhid
+o.usbdi_util:	^.dev.usb.h.usbdi
+o.usbdi_util:	^.dev.usb.h.usbdi_util
+o.uhub:	^.dev.usb.c.uhub
+o.uhub:	TCPIPLibs:sys.h.cdefs
+o.uhub:	TCPIPLibs:sys.h.param
+o.uhub:	TCPIPLibs:sys.h.types
+o.uhub:	TCPIPLibs:sys.h.cdefs
+o.uhub:	TCPIPLibs:machine.h.endian
+o.uhub:	TCPIPLibs:machine.h.ansi
+o.uhub:	TCPIPLibs:machine.h.types
+o.uhub:	TCPIPLibs:sys.h.syslimits
+o.uhub:	TCPIPLibs:sys.h.cdefs
+o.uhub:	TCPIPLibs:sys.h.errno
+o.uhub:	TCPIPLibs:sys.h.time
+o.uhub:	TCPIPLibs:sys.h.resource
+o.uhub:	TCPIPLibs:sys.h.types
+o.uhub:	TCPIPLibs:sys.h.ucred
+o.uhub:	TCPIPLibs:sys.h.uio
+o.uhub:	TCPIPLibs:sys.h.rtprio
+o.uhub:	TCPIPLibs:sys.h.signal
+o.uhub:	TCPIPLibs:machine.h.signal
+o.uhub:	TCPIPLibs:machine.h.param
+o.uhub:	TCPIPLibs:machine.h.limits
+o.uhub:	TCPIPLibs:sys.h.systm
+o.uhub:	TCPIPLibs:machine.h.cpufunc
+o.uhub:	TCPIPLibs:machine.h.stdarg
+o.uhub:	TCPIPLibs:sys.h.callout
+o.uhub:	TCPIPLibs:sys.h.queue
+o.uhub:	TCPIPLibs:sys.h.kernel
+o.uhub:	TCPIPLibs:sys.h.linker_set
+o.uhub:	TCPIPLibs:sys.h.malloc
+o.uhub:	^.machine.h.bus
+o.uhub:	TCPIPLibs:sys.h.types
+o.uhub:	^.dev.usb.h.usb
+o.uhub:	TCPIPLibs:sys.h.types
+o.uhub:	TCPIPLibs:sys.h.time
+o.uhub:	^.dev.usb.h.usb_port
+o.uhub:	h.opt_usbverbose
+o.uhub:	^.sys.h.device
+o.uhub:	TCPIPLibs:sys.h.queue
+o.uhub:	TCPIPLibs:h.errno
+o.uhub:	TCPIPLibs:sys.h.ioccom
+o.uhub:	^.dev.usb.h.usbdi
+o.uhub:	^.dev.usb.h.usbdi_util
+o.uhub:	^.dev.usb.h.usbdivar
+o.usbmodhead:	cmhg.usbmodhead
+o.usbmodhead:	C:Global.h.Services
+o.usbmodhead:	cmhg.^.Version
+o.ohcimodhead:	cmhg.ohcimodhead
+o.ohcimodhead:	C:Global.h.RISCOS
+o.ohcimodhead:	C:Global.h.Services
+o.ohcimodhead:	cmhg.^.Version
+o.ohci:	^.dev.usb.c.ohci
+o.ohci:	TCPIPLibs:sys.h.cdefs
+o.ohci:	TCPIPLibs:sys.h.param
+o.ohci:	TCPIPLibs:sys.h.types
+o.ohci:	TCPIPLibs:sys.h.cdefs
+o.ohci:	TCPIPLibs:machine.h.endian
+o.ohci:	TCPIPLibs:machine.h.ansi
+o.ohci:	TCPIPLibs:machine.h.types
+o.ohci:	TCPIPLibs:sys.h.syslimits
+o.ohci:	TCPIPLibs:sys.h.cdefs
+o.ohci:	TCPIPLibs:sys.h.errno
+o.ohci:	TCPIPLibs:sys.h.time
+o.ohci:	TCPIPLibs:sys.h.resource
+o.ohci:	TCPIPLibs:sys.h.types
+o.ohci:	TCPIPLibs:sys.h.ucred
+o.ohci:	TCPIPLibs:sys.h.uio
+o.ohci:	TCPIPLibs:sys.h.rtprio
+o.ohci:	TCPIPLibs:sys.h.signal
+o.ohci:	TCPIPLibs:machine.h.signal
+o.ohci:	TCPIPLibs:machine.h.param
+o.ohci:	TCPIPLibs:machine.h.limits
+o.ohci:	TCPIPLibs:sys.h.systm
+o.ohci:	TCPIPLibs:machine.h.cpufunc
+o.ohci:	TCPIPLibs:machine.h.stdarg
+o.ohci:	TCPIPLibs:sys.h.callout
+o.ohci:	TCPIPLibs:sys.h.queue
+o.ohci:	TCPIPLibs:sys.h.malloc
+o.ohci:	TCPIPLibs:sys.h.proc
+o.ohci:	TCPIPLibs:machine.h.proc
+o.ohci:	TCPIPLibs:sys.h.queue
+o.ohci:	TCPIPLibs:sys.h.rtprio
+o.ohci:	TCPIPLibs:sys.h.select
+o.ohci:	TCPIPLibs:sys.h.time
+o.ohci:	TCPIPLibs:sys.h.queue
+o.ohci:	^.machine.h.bus
+o.ohci:	TCPIPLibs:sys.h.types
+o.ohci:	TCPIPLibs:machine.h.endian
+o.ohci:	^.dev.usb.h.usb
+o.ohci:	TCPIPLibs:sys.h.types
+o.ohci:	TCPIPLibs:sys.h.time
+o.ohci:	^.dev.usb.h.usb_port
+o.ohci:	h.opt_usbverbose
+o.ohci:	^.sys.h.device
+o.ohci:	TCPIPLibs:sys.h.queue
+o.ohci:	TCPIPLibs:h.errno
+o.ohci:	TCPIPLibs:sys.h.ioccom
+o.ohci:	^.dev.usb.h.usbdi
+o.ohci:	^.dev.usb.h.usbdivar
+o.ohci:	^.dev.usb.h.usb_mem
+o.ohci:	^.dev.usb.h.usb_quirks
+o.ohci:	^.dev.usb.h.ohcireg
+o.ohci:	^.dev.usb.h.ohcivar
+o.call_veneer: s.call_veneer
+o.call_veneer: Hdr:ListOpts
+o.call_veneer: Hdr:Macros
+o.call_veneer: Hdr:System
+o.call_veneer: Hdr:SWIs
+o.call_veneer: Hdr:CPU.Generic26
+o.call_veneer: Hdr:Machine.<Machine>
+o.call_veneer: Hdr:Machine.Machine
+o.call_veneer: Hdr:CPU.Generic32
+o.call_veneer: Hdr:IO.GenericIO
+o.call_veneer: Hdr:RISCOS
+o.ehci:	^.dev.usb.c.ehci
+o.ehci:	TCPIPLibs:sys.h.cdefs
+o.ehci:	TCPIPLibs:sys.h.param
+o.ehci:	TCPIPLibs:sys.h.types
+o.ehci:	TCPIPLibs:sys.h.cdefs
+o.ehci:	TCPIPLibs:machine.h.endian
+o.ehci:	TCPIPLibs:machine.h.ansi
+o.ehci:	TCPIPLibs:machine.h.types
+o.ehci:	TCPIPLibs:sys.h.syslimits
+o.ehci:	TCPIPLibs:sys.h.cdefs
+o.ehci:	TCPIPLibs:sys.h.errno
+o.ehci:	TCPIPLibs:sys.h.time
+o.ehci:	TCPIPLibs:sys.h.resource
+o.ehci:	TCPIPLibs:sys.h.types
+o.ehci:	TCPIPLibs:sys.h.ucred
+o.ehci:	TCPIPLibs:sys.h.uio
+o.ehci:	TCPIPLibs:sys.h.rtprio
+o.ehci:	TCPIPLibs:sys.h.signal
+o.ehci:	TCPIPLibs:machine.h.signal
+o.ehci:	TCPIPLibs:machine.h.param
+o.ehci:	TCPIPLibs:machine.h.limits
+o.ehci:	TCPIPLibs:sys.h.systm
+o.ehci:	TCPIPLibs:machine.h.cpufunc
+o.ehci:	TCPIPLibs:machine.h.stdarg
+o.ehci:	TCPIPLibs:sys.h.callout
+o.ehci:	TCPIPLibs:sys.h.queue
+o.ehci:	TCPIPLibs:sys.h.kernel
+o.ehci:	TCPIPLibs:sys.h.linker_set
+o.ehci:	TCPIPLibs:sys.h.malloc
+o.ehci:	^.sys.h.device
+o.ehci:	TCPIPLibs:sys.h.queue
+o.ehci:	TCPIPLibs:sys.h.select
+o.ehci:	TCPIPLibs:sys.h.proc
+o.ehci:	TCPIPLibs:machine.h.proc
+o.ehci:	TCPIPLibs:sys.h.queue
+o.ehci:	TCPIPLibs:sys.h.rtprio
+o.ehci:	TCPIPLibs:sys.h.select
+o.ehci:	TCPIPLibs:sys.h.time
+o.ehci:	TCPIPLibs:sys.h.queue
+o.ehci:	^.machine.h.bus
+o.ehci:	TCPIPLibs:sys.h.types
+o.ehci:	TCPIPLibs:machine.h.endian
+o.ehci:	^.dev.usb.h.usb
+o.ehci:	TCPIPLibs:sys.h.types
+o.ehci:	TCPIPLibs:sys.h.time
+o.ehci:	^.dev.usb.h.usb_port
+o.ehci:	h.opt_usbverbose
+o.ehci:	^.sys.h.device
+o.ehci:	TCPIPLibs:h.errno
+o.ehci:	TCPIPLibs:sys.h.ioccom
+o.ehci:	^.dev.usb.h.usbdi
+o.ehci:	^.dev.usb.h.usbdivar
+o.ehci:	^.dev.usb.h.usb_mem
+o.ehci:	^.dev.usb.h.usb_quirks
+o.ehci:	^.dev.usb.h.ehcireg
+o.ehci:	^.dev.usb.h.ehcivar
+o.usbmodule:	c.usbmodule
+o.usbmodule:	h.usbmodhead
+o.usbmodule:	C:h.kernel
+o.usbmodule:	h.bufman
+o.usbmodule:	C:h.kernel
+o.usbmodule:	C:Global.h.RISCOS
+o.usbmodule:	C:Global.h.Services
+o.usbmodule:	TCPIPLibs:sys.h.callout
+o.usbmodule:	TCPIPLibs:sys.h.queue
+o.usbmodule:	TCPIPLibs:sys.h.ioctl
+o.usbmodule:	TCPIPLibs:sys.h.ttycom
+o.usbmodule:	TCPIPLibs:sys.h.ioccom
+o.usbmodule:	TCPIPLibs:sys.h.ioccom
+o.usbmodule:	TCPIPLibs:sys.h.filio
+o.usbmodule:	TCPIPLibs:sys.h.ioccom
+o.usbmodule:	TCPIPLibs:sys.h.sockio
+o.usbmodule:	TCPIPLibs:sys.h.ioccom
+o.usbmodule:	TCPIPLibs:sys.h.time
+o.usbmodule:	^.dev.usb.h.usb
+o.usbmodule:	TCPIPLibs:sys.h.types
+o.usbmodule:	TCPIPLibs:sys.h.cdefs
+o.usbmodule:	TCPIPLibs:machine.h.endian
+o.usbmodule:	TCPIPLibs:machine.h.ansi
+o.usbmodule:	TCPIPLibs:machine.h.types
+o.usbmodule:	TCPIPLibs:sys.h.time
+o.usbmodule:	^.dev.usb.h.usb_port
+o.usbmodule:	h.opt_usbverbose
+o.usbmodule:	^.sys.h.device
+o.usbmodule:	TCPIPLibs:sys.h.queue
+o.usbmodule:	TCPIPLibs:h.errno
+o.usbmodule:	TCPIPLibs:sys.h.errno
+o.usbmodule:	TCPIPLibs:sys.h.ioccom
+o.usbmodule:	^.dev.usb.h.usbdi
+o.usbmodule:	^.dev.usb.h.usbdi_util
+o.usbmodule:	^.dev.usb.h.usbdivar
+o.usbmodule:	^.dev.usb.h.usbhid
+o.usbmodule:	C:h.swis
+o.usbmodule:	C:debuglib.h.debuglib
+o.usbmodule:	C:callx.h.callx
+o.usbmodule:	C:h.kernel
+o.usbmodule:	OS:oslib.h.devicefs
+o.usbmodule:	OS:oslib.h.types
+o.usbmodule:	OS:oslib.h.os
+o.usbmodule:	OS:oslib.h.buffer
+o.usbmodule:	tbox:h.toolbox
+o.usbmodule:	tbox:h.wimp
+o.usbmodule:	h.usbmouse
+o.usbmodule:	h.usbkboard
+o.usbmodule:	h.service
+o.usbmodule:	^.dev.usb.h.usb
+o.usbkboard:	c.usbkboard
+o.usbkboard:	C:Global.h.RISCOS
+o.usbkboard:	C:Global.h.Keyboard
+o.usbkboard:	C:Global.h.Pointer
+o.usbkboard:	C:callx.h.callx
+o.usbkboard:	C:h.kernel
+o.usbkboard:	h.usbmodhead
+o.usbkboard:	C:h.swis
+o.usbkboard:	C:debuglib.h.debuglib
+o.usbkboard:	TCPIPLibs:sys.h.callout
+o.usbkboard:	TCPIPLibs:sys.h.queue
+o.usbkboard:	TCPIPLibs:sys.h.ioctl
+o.usbkboard:	TCPIPLibs:sys.h.ttycom
+o.usbkboard:	TCPIPLibs:sys.h.ioccom
+o.usbkboard:	TCPIPLibs:sys.h.ioccom
+o.usbkboard:	TCPIPLibs:sys.h.filio
+o.usbkboard:	TCPIPLibs:sys.h.ioccom
+o.usbkboard:	TCPIPLibs:sys.h.sockio
+o.usbkboard:	TCPIPLibs:sys.h.ioccom
+o.usbkboard:	^.dev.usb.h.usb
+o.usbkboard:	TCPIPLibs:sys.h.types
+o.usbkboard:	TCPIPLibs:sys.h.cdefs
+o.usbkboard:	TCPIPLibs:machine.h.endian
+o.usbkboard:	TCPIPLibs:machine.h.ansi
+o.usbkboard:	TCPIPLibs:machine.h.types
+o.usbkboard:	TCPIPLibs:sys.h.time
+o.usbkboard:	^.dev.usb.h.usb_port
+o.usbkboard:	h.opt_usbverbose
+o.usbkboard:	^.sys.h.device
+o.usbkboard:	TCPIPLibs:sys.h.queue
+o.usbkboard:	TCPIPLibs:h.errno
+o.usbkboard:	TCPIPLibs:sys.h.errno
+o.usbkboard:	TCPIPLibs:sys.h.ioccom
+o.usbkboard:	^.dev.usb.h.usbdi
+o.usbkboard:	^.dev.usb.h.usbdi_util
+o.usbkboard:	^.dev.usb.h.usbdivar
+o.usbkboard:	^.dev.usb.h.usbhid
+o.usbkboard:	h.usbkboard
+o.usbkboard:	tbox:h.wimplib
+o.usbkboard:	tbox:h.wimp
+o.ohcimodule:	c.ohcimodule
+o.ohcimodule:	h.ohcimodhead
+o.ohcimodule:	C:h.kernel
+o.ohcimodule:	h.USBDriver
+o.ohcimodule:	C:h.swis
+o.ohcimodule:	^.machine.h.bus
+o.ohcimodule:	TCPIPLibs:sys.h.types
+o.ohcimodule:	TCPIPLibs:sys.h.cdefs
+o.ohcimodule:	TCPIPLibs:machine.h.endian
+o.ohcimodule:	TCPIPLibs:machine.h.ansi
+o.ohcimodule:	TCPIPLibs:machine.h.types
+o.ohcimodule:	TCPIPLibs:sys.h.queue
+o.ohcimodule:	TCPIPLibs:sys.h.types
+o.ohcimodule:	TCPIPLibs:sys.h.systm
+o.ohcimodule:	TCPIPLibs:machine.h.cpufunc
+o.ohcimodule:	TCPIPLibs:machine.h.stdarg
+o.ohcimodule:	TCPIPLibs:sys.h.callout
+o.ohcimodule:	TCPIPLibs:sys.h.queue
+o.ohcimodule:	^.dev.usb.h.usb
+o.ohcimodule:	TCPIPLibs:sys.h.types
+o.ohcimodule:	TCPIPLibs:sys.h.time
+o.ohcimodule:	^.dev.usb.h.usb_port
+o.ohcimodule:	h.opt_usbverbose
+o.ohcimodule:	^.sys.h.device
+o.ohcimodule:	TCPIPLibs:sys.h.queue
+o.ohcimodule:	TCPIPLibs:h.errno
+o.ohcimodule:	TCPIPLibs:sys.h.errno
+o.ohcimodule:	TCPIPLibs:sys.h.ioccom
+o.ohcimodule:	^.dev.usb.h.usbdi
+o.ohcimodule:	^.dev.usb.h.usbdivar
+o.ohcimodule:	^.dev.usb.h.ohcireg
+o.ohcimodule:	^.dev.usb.h.ohcivar
+o.ohcimodule:	C:Global.h.RISCOS
+o.ohcimodule:	C:Global.h.Services
+o.ohcimodule:	C:Global.h.HALEntries
+o.ohcimodule:	C:Interface.h.PCI
+o.ohcimodule:	C:callx.h.callx
+o.ohcimodule:	C:h.kernel
+o.ohcimodule:	tbox:h.toolbox
+o.ohcimodule:	tbox:h.wimp
+o.ohcimodule:	C:DebugLib.h.DebugLib
+o.ohcimodule:	h.service
+o.ohcimodule:	^.dev.usb.h.usb
+o.ehcimodule:	c.ehcimodule
+o.ehcimodule:	h.ehcimodhead
+o.ehcimodule:	C:h.kernel
+o.ehcimodule:	h.USBDriver
+o.ehcimodule:	C:h.swis
+o.ehcimodule:	^.machine.h.bus
+o.ehcimodule:	TCPIPLibs:sys.h.types
+o.ehcimodule:	TCPIPLibs:sys.h.cdefs
+o.ehcimodule:	TCPIPLibs:machine.h.endian
+o.ehcimodule:	TCPIPLibs:machine.h.ansi
+o.ehcimodule:	TCPIPLibs:machine.h.types
+o.ehcimodule:	TCPIPLibs:sys.h.queue
+o.ehcimodule:	TCPIPLibs:sys.h.types
+o.ehcimodule:	TCPIPLibs:sys.h.systm
+o.ehcimodule:	TCPIPLibs:machine.h.cpufunc
+o.ehcimodule:	TCPIPLibs:machine.h.stdarg
+o.ehcimodule:	TCPIPLibs:sys.h.callout
+o.ehcimodule:	TCPIPLibs:sys.h.queue
+o.ehcimodule:	^.dev.usb.h.usb
+o.ehcimodule:	TCPIPLibs:sys.h.types
+o.ehcimodule:	TCPIPLibs:sys.h.time
+o.ehcimodule:	^.dev.usb.h.usb_port
+o.ehcimodule:	h.opt_usbverbose
+o.ehcimodule:	^.sys.h.device
+o.ehcimodule:	TCPIPLibs:sys.h.queue
+o.ehcimodule:	TCPIPLibs:h.errno
+o.ehcimodule:	TCPIPLibs:sys.h.errno
+o.ehcimodule:	TCPIPLibs:sys.h.ioccom
+o.ehcimodule:	^.dev.usb.h.usbdi
+o.ehcimodule:	^.dev.usb.h.usbdivar
+o.ehcimodule:	^.dev.usb.h.ehcireg
+o.ehcimodule:	^.dev.usb.h.ehcivar
+o.ehcimodule:	C:Global.h.RISCOS
+o.ehcimodule:	C:Global.h.HALEntries
+o.ehcimodule:	C:Interface.h.PCI
+o.ehcimodule:	C:callx.h.callx
+o.ehcimodule:	C:h.kernel
+o.ehcimodule:	C:DebugLib.h.DebugLib
+o.ehcimodule:	h.service
+o.ehcimodule:	^.dev.usb.h.usb
+o.ehcimodule:	OS:oslib.h.devicefs
+o.ehcimodule:	OS:oslib.h.types
+o.ehcimodule:	OS:oslib.h.os
+o.ehcimodule:	OS:oslib.h.buffer
diff --git a/build/Resources/UK/OHCIMessages b/build/Resources/UK/OHCIMessages
index a3655a03495ff05e3a78f3cbeb12bbe0ce334e7a..efc53d1a40d149a179f14c48e5668d4bb1447797 100644
Binary files a/build/Resources/UK/OHCIMessages and b/build/Resources/UK/OHCIMessages differ
diff --git a/build/Resources/UK/USBMessages b/build/Resources/UK/USBMessages
index cdf23b64ef8ad12e99eeebe7bca62e740817ed37..142f8054fdce4c7e4c570fc4ae032fbbd4f2378a 100644
Binary files a/build/Resources/UK/USBMessages and b/build/Resources/UK/USBMessages differ
diff --git a/build/c/usbmodule b/build/c/usbmodule
index d4fe2b961ba1b3f0f53d1da49da3ab6db4e88308..bf70435a122ffa6eea42c800aff37a1af1d6ad78 100644
--- a/build/c/usbmodule
+++ b/build/c/usbmodule
@@ -140,6 +140,7 @@ struct iface_softc {
 #define E_BadXfer       "\x06\x90\x81\x00" "BadXfer"
 #define E_NoStream      "\x07\x90\x81\x00" "NoStream"
 #define E_BadRequest    "\x08\x90\x81\x00" "BadRequest"
+#define E_NotRootP      "\x09\x90\x81\x00" "NotRootP"
 #define E_XferFailed    "\x20\x90\x81\x00" "XferFailed"
 
 #define USBDEV_MESSAGES "Resources:$.Resources.USBDriver.USBDevs"
@@ -199,7 +200,7 @@ extern struct cfattach uhub_uhub_ca;
 
 /* for debugging */
 #ifdef USB_DEBUG
-extern int usbdebug, uhubdebug, umsdebug;
+extern int usbdebug, uhubdebug;
 extern int total_sleep;
 #endif
 #ifdef DEBUGLIB
@@ -227,7 +228,7 @@ char* ccodes []= {
 
 extern int cold;
 void* private_word = 0;
-int mouseactive = 0;
+//int mouseactive = 0;
 
 struct sysvar_callback {
     struct sysvar_callback* next;
@@ -288,7 +289,7 @@ _kernel_oserror *module_init(const char *cmd_tail, int podule_base, void *pw)
     private_word = pw;
     /* set up debugging */
     debug_initialise ("USBDriver", "", 0);
-    debug_set_device(TML_OUTPUT);
+    debug_set_device(DEBUGIT_OUTPUT);
     debug_set_unbuffered_files (TRUE);
     debug_set_stamp_debug (TRUE);
 
@@ -318,8 +319,8 @@ _kernel_oserror *module_init(const char *cmd_tail, int podule_base, void *pw)
 
     _swix (OS_Claim, _INR(0,2), PointerV, pointerv_entry, pw);
 
-    /* turn on the hourglass until the mouse is active */
-    _swix (Hourglass_On, 0);
+//    /* turn on the hourglass until the mouse is active */
+//    _swix (Hourglass_On, 0);
 
     return 0;
 #ifndef STANDALONE
@@ -518,9 +519,16 @@ _kernel_oserror* command_reset (int n)
     struct usbd_port * port = udev->powersrc;
     usbd_device_handle parent = port->parent;
 
+    if (parent == NULL)
+    {
+        return uerror (E_NotRootP);
+    }
+
     usb_disconnect_port (port, (device_ptr_t) parent->hub);
-    usbd_set_port_feature(parent, port->portno, UHF_PORT_RESET);
-    command_discover ();
+    usbd_clear_port_feature(parent, port->portno, UHF_PORT_POWER);
+    usbd_delay_ms(parent, USB_PORT_RESET_DELAY);
+    usbd_set_port_feature(parent, port->portno, UHF_PORT_POWER);
+
     return NULL;
 }
 
@@ -919,11 +927,11 @@ struct device* riscos_usb_attach
     {
         if ((ret = (*f) (parent, aux)) != NULL)
         {
-          if (!mouseactive)
-          {
-             mouseactive = 1;
-             _swix (Hourglass_Off, 0);
-          }
+//          if (!mouseactive)
+//          {
+//             mouseactive = 1;
+//             _swix (Hourglass_Off, 0);
+//          }
           return ret;
         }
     }
@@ -1494,18 +1502,18 @@ _kernel_oserror* discover_callback (_kernel_swi_regs* r, void* pw, void* sc)
     return NULL;
 
 valid:
-    _swix (Hourglass_On, 0);
+//    _swix (Hourglass_On, 0);
     do {
-        _swix (Hourglass_LEDs, _INR(0,1), 1, 0);
+//        _swix (Hourglass_LEDs, _INR(0,1), 1, 0);
         usb_discover (bus->usbctl);
-        _swix (Hourglass_LEDs, _INR(0,1), 2, 0);
+//        _swix (Hourglass_LEDs, _INR(0,1), 2, 0);
     } while (--bus->callbacks);
     #ifdef USB_DEBUG
     dprintf (("", "finished callbacks, total sleep = %d\n", total_sleep));
     #else
     dprintf (("", "finished callbacks\n"));
     #endif
-    _swix (Hourglass_Off, 0);
+//    _swix (Hourglass_Off, 0);
     return NULL;
 }
 
@@ -1578,8 +1586,8 @@ void bufins (void* dma, void* x)
     }
 
     str->count += actlen;
-    dprintf (("", "inserting %d bytes, total %d\n",
-        actlen, str->count));
+//    dprintf (("", "inserting %d bytes, total %d\n",
+//        actlen, str->count));
 
     _kernel_swi_regs r;
     r.r[0] = BM_InsertBlock;
@@ -1621,7 +1629,7 @@ void usbd_devinfo_vp(usbd_device_handle dev, char* v, char* p, int usedev)
             255,
             &vendor, &len);
         dprintf (("", "lookup '%s' returned '%s' e = %s\n",
-            str, vendor, e? e->errmess: "NULL"));
+            str, vendor? vendor: "(null)", e? e->errmess: "NULL"));
         if (!e) v[len] = '\0';
     }
 
@@ -1638,7 +1646,7 @@ void usbd_devinfo_vp(usbd_device_handle dev, char* v, char* p, int usedev)
             255,
             &product, &len);
         dprintf (("", "lookup '%s' returned '%s' e = %s\n",
-            str, vendor, e? e->errmess: "NULL"));
+            str, product? product: "(null)", e? e->errmess: "NULL"));
         if (!e) p[len] = '\0';
     }
 
@@ -1805,6 +1813,10 @@ static _kernel_oserror* device_initialise
     /* usb timeout, used for transfers */
     str->timeout = valid->timeout;
 
+    /* force an interface alternate */
+    if (valid->alternate != 0xdeaddead)
+        usbd_set_interface(str->iface, valid->alternate);
+
     /* see if an interface was specified, if not then look for the interface
        with the endpoint specified */
     find_interface_and_endpoint
@@ -1832,9 +1844,6 @@ static _kernel_oserror* device_initialise
         goto error;
     }
 
-    /* force an interface alternate */
-    if (valid->alternate != 0xdeaddead)
-        usbd_set_interface(str->iface, valid->alternate);
 
     str->ep = ep;
 
@@ -1909,7 +1918,7 @@ detach_done:
 
     if (str->xfer == NULL)
     {
-        if (valid->ep_type == UE_ISOCHRONOUS)
+        if ((str->pipe->endpoint->edesc->bmAttributes & UE_XFERTYPE) == UE_ISOCHRONOUS)
         {
             str->isoc = calloc (sizeof *str->isoc, 2);
             str->isoc[0].xfer = usbd_alloc_xfer (ugen->sc_udev);
@@ -1928,7 +1937,7 @@ detach_done:
         goto error;
     }
 
-    if (valid->ep_type == UE_INTERRUPT)
+    if ((str->pipe->endpoint->edesc->bmAttributes & UE_XFERTYPE) == UE_INTERRUPT)
     {
         str->pipe->repeat = 1;
     }
@@ -2236,23 +2245,42 @@ end:
 
 void terminate_stream (struct ugen_softc* ugen, struct devstream * str, int kill)
 {
-    //dprintf (("", "terminate stream %p, ep %x, kill = %d\n",
-    //    str, str->ep, kill));
+    static int reentry = 0;
+    dprintf (("", "terminate stream %p, ep %x, kill = %d, reentry = %d\n",
+        str, str->ep, kill, reentry));
+    if (reentry)
+      return;
+    reentry = 1;
+
     if (str == NULL)
+    {
+        reentry = 0;
         return;
+    }
 
     int index = UE_GET_ADDR(str->ep) + (UE_GET_DIR(str->ep)? 16: 0);
 
+    /* don't remove stream twice! */
+    if (ugen->str[index] == NULL)
+    {
+      reentry = 0;
+      return;
+    }
+
     /* in case we were a multiply linked HID reporter, don't close the pipe */
     if (ugen->str[index]->next_hid == NULL)
     {
         if (kill)
         {
+            int status;
             /* only close these when the device is removed */
-            usbd_abort_pipe(str->pipe);
-            usbd_close_pipe(str->pipe);
+            status = usbd_abort_pipe(str->pipe);
+            dprintf (("", "status: %s\n", ccodes[status]));
+            status = usbd_close_pipe(str->pipe);
+            dprintf (("", "status: %s\n", ccodes[status]));
             usbd_free_buffer (str->xfer);
-            usbd_free_xfer(str->xfer);
+            status = usbd_free_xfer(str->xfer);
+            dprintf (("", "status: %s\n", ccodes[status]));
             ugen->str[index] = NULL;
         }
         else
@@ -2266,6 +2294,7 @@ void terminate_stream (struct ugen_softc* ugen, struct devstream * str, int kill
             dprintf (("", "fs_stream now 0\n"));
 
             /* return early so we don't free the stream */
+            reentry = 0;
             return;
         }
     }
@@ -2283,6 +2312,7 @@ void terminate_stream (struct ugen_softc* ugen, struct devstream * str, int kill
                 if (s == NULL)
                 {
                     dprintf (("", "*** couldn't find HID stream"));
+                    reentry = 0;
                     return;
                 }
             }
@@ -2301,6 +2331,7 @@ void terminate_stream (struct ugen_softc* ugen, struct devstream * str, int kill
         }
     }
     free (str);
+    reentry = 0;
 }
 
 /*---------------------------------------------------------------------------*/
diff --git a/build/c/usbmouse b/build/c/usbmouse
index e1be7279ba136f15bbf9294e8ec211b08295be29..c035747734579d5ecfe7b3556a2ce411dbfa4bcb 100644
--- a/build/c/usbmouse
+++ b/build/c/usbmouse
@@ -46,7 +46,7 @@
 extern void ums_enable (void*);
 extern void ums_disable (void*);
 
-extern int umsdebug;
+extern int umsdebug = 0;
 
 extern struct messages mod_messages;
 
@@ -84,7 +84,6 @@ struct ums_softc {
 #define MAX_BUTTONS     31      /* chosen because sc_buttons is u_int32_t */
 
         u_int32_t sc_buttons;   /* mouse button status */
-        struct device *sc_wsmousedev;
 
         char                    sc_dying;
 
@@ -365,9 +364,6 @@ int detach_mouse (struct device* ms)
 
     TAILQ_REMOVE (&allums, sc, link_ms);
 
-    /* No need to do reference counting of ums, wsmouse has all the goo. */
-    if (sc->sc_wsmousedev != NULL)
-        rv = config_detach(sc->sc_wsmousedev, 1);
     if (rv == 0) {
         free(sc->sc_loc_btn);
         free(sc->sc_ibuf);
@@ -504,7 +500,7 @@ void ums_intr
 #ifdef USB_DEBUG
     if (umsdebug > 5) dprintf(("",
     "data.relx = %d, data.rely = %d, relx = %d, rely = %d, buttons = %x\n",
-        x, y, relx, rely, b));
+        dx, dy, relx, rely, b));
 #endif
     if ((change = sc->sc_buttons ^ b) != 0) {
         sc->sc_buttons = b;
diff --git a/dev/usb/c/ohci b/dev/usb/c/ohci
index 433f6bfca966ac868e4c1541f9dd6b950612064a..56a5473667224bd3c7ee72e438bb15a97f652e1b 100644
--- a/dev/usb/c/ohci
+++ b/dev/usb/c/ohci
@@ -999,14 +999,14 @@ ohci_freex(struct usbd_bus *bus, usbd_xfer_handle xfer)
 {
 	struct ohci_softc *sc = (struct ohci_softc *)bus;
 
-#ifdef DIAGNOSTIC
-	if (xfer->busy_free != XFER_BUSY) {
-		logprintf("ohci_freex: xfer=%p not busy, 0x%08x\n", xfer,
-		       xfer->busy_free);
-		return;
-	}
-	xfer->busy_free = XFER_FREE;
-#endif
+//#ifdef DIAGNOSTIC
+//	if (xfer->busy_free != XFER_BUSY) {
+//		logprintf("ohci_freex: xfer=%p not busy, 0x%08x\n", xfer,
+//		       xfer->busy_free);
+//		return;
+//	}
+//	xfer->busy_free = XFER_FREE;
+//#endif
 	SIMPLEQ_INSERT_HEAD(&sc->sc_free_xfers, xfer, next);
 }
 
diff --git a/dev/usb/c/usb_subr b/dev/usb/c/usb_subr
index ff5ea495f0cbb65daeda8a1da6dce7f01dcc426d..9f8018b4e1dfd05d99d64010b6be3f98dfc2854a 100644
--- a/dev/usb/c/usb_subr
+++ b/dev/usb/c/usb_subr
@@ -467,10 +467,11 @@ usbd_fill_iface_data(usbd_device_handle dev, int ifaceidx, int altidx)
 	nendpt = ifc->idesc->bNumEndpoints;
 	DPRINTFN(4,("usbd_fill_iface_data: found idesc nendpt=%d\n", nendpt));
 	if (nendpt != 0) {
-		ifc->endpoints = malloc(nendpt * sizeof(struct usbd_endpoint),
-					M_USB, M_NOWAIT);
+	        int epsz = nendpt * sizeof(struct usbd_endpoint);
+		ifc->endpoints = malloc(epsz, M_USB, M_NOWAIT);
 		if (ifc->endpoints == NULL)
 			return (USBD_NOMEM);
+		memset (ifc->endpoints, 0, epsz);
 	} else
 		ifc->endpoints = NULL;
 	ifc->priv = NULL;
diff --git a/dev/usb/h/usbdivar b/dev/usb/h/usbdivar
index 02846d8b4df47d2454791d88bbde5cec0f4c257f..e08331939cba67c28c76426cd84d09728e5a4d44 100644
--- a/dev/usb/h/usbdivar
+++ b/dev/usb/h/usbdivar
@@ -196,12 +196,14 @@ struct usbd_xfer {
 	usbd_status		status;
 	usbd_callback		callback;
 	__volatile char		done;
-#ifdef DIAGNOSTIC
+//#ifdef DIAGNOSTIC
 	u_int32_t		busy_free;
 #define XFER_FREE 0x46524545
 #define XFER_BUSY 0x42555359
 #define XFER_ONQU 0x4f4e5155
-#endif
+//#else
+//	u_int32_t		busy_freespare;
+//#endif
 
 	/* For control pipe */
 	usb_device_request_t	request;