diff --git a/nut/drivers/libusb.c b/nut/drivers/libusb.c
index b6f5fb5..5a519ba 100644
--- a/nut/drivers/libusb.c
+++ b/nut/drivers/libusb.c
@@ -208,7 +208,10 @@ static int libusb_open(usb_dev_handle **udevp, USBDevice_t *curDevice, USBDevice
 #endif
 			
 			/* set default interface */
-			usb_set_altinterface(udev, 0);
+			if (usb_set_altinterface(udev, 0) < 0) {
+				upsdebugx(2, " Couldn't set default interface");
+				goto next_device;
+			}
 			
 			if (!callback) {
 				return 1;
diff --git a/nut/drivers/usbhid-ups.c b/nut/drivers/usbhid-ups.c
index 4824189..3ffa1e2 100644
--- a/nut/drivers/usbhid-ups.c
+++ b/nut/drivers/usbhid-ups.c
@@ -84,7 +84,7 @@ static int pollfreq = DEFAULT_POLLFREQ;
 static int ups_status = 0;
 static bool_t data_has_changed = FALSE; /* for SEMI_STATIC data polling */
 static time_t lastpoll; /* Timestamp the last polling */
-hid_dev_handle_t udev;
+hid_dev_handle_t udev = NULL;
 
 /* support functions */
 static hid_info_t *find_nut_info(const char *varname);
@@ -1360,7 +1360,9 @@ static int reconnect_ups(void)
 	upsdebugx(4, "==================================================");
 	upsdebugx(4, "= device has been disconnected, try to reconnect =");
 	upsdebugx(4, "==================================================");
-
+	if (udev)
+		comm_driver->close(udev);
+	
 	ret = comm_driver->open(&udev, &curDevice, subdriver_matcher,
 #ifdef SHUT_MODE
 		NULL);