diff --git a/heater.cpp b/heater.cpp
index ff97ffbbfe46413af429f5554a7b24e1a6e86be6..5d5c2728a6e1b22ce9480aa9cd5a9f00fb4d0804 100644
--- a/heater.cpp
+++ b/heater.cpp
@@ -70,6 +70,12 @@ void Heaters::recoverDevice(int device)
 	devices[device].mutex->lock();
 	coincellhell_disconnect(&devices[device].device);
 	int ret = coincellhell_connect(&devices[device].device, devices[device].serial);
+	if(ret == 0)
+	{
+		coincellhell_reset_bus(&devices[device].device);
+		coincellhell_disconnect(&devices[device].device);
+		ret = coincellhell_connect(&devices[device].device, devices[device].serial);
+	}
 	devices[device].mutex->unlock();
 
 	if(ret == 0)