diff --git a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/EiffelEventHubImpl.java b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/EiffelEventHubImpl.java
index 8db4ce8..96e4093 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/EiffelEventHubImpl.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/EiffelEventHubImpl.java
@@ -205,22 +205,36 @@
     final ReentrantLock takeLock = this.takeLock;
     final ReentrantLock idLookupLock = this.idLookupLock;
     int previousCount = -1;
-    takeLock.lock();
-    idLookupLock.lock();
     try {
-      taken = null;
-      previousCount = count.get();
-      for (EiffelEvent event : events) {
-        idCache.putId(event);
-        EventKey key = EventKey.fromEvent(event);
-        eventsInQueue.remove(key);
-        count.decrementAndGet();
-        logger.atFine().log("Event %s have been ack:ed by publisher", key);
+      takeLock.lockInterruptibly();
+      idLookupLock.lockInterruptibly();
+      try {
+        taken = null;
+        previousCount = count.get();
+        for (EiffelEvent event : events) {
+          idCache.putId(event);
+          EventKey key = EventKey.fromEvent(event);
+          eventsInQueue.remove(key);
+          count.decrementAndGet();
+          logger.atFine().log("Event %s have been ack:ed by publisher", key);
+        }
+        readyForTake.signal();
+      } finally {
+        takeLock.unlock();
+        idLookupLock.unlock();
       }
-      readyForTake.signal();
-    } finally {
-      takeLock.unlock();
-      idLookupLock.unlock();
+    } catch (InterruptedException ie) {
+      logger.atWarning().log("Interupted while ack:ing events, attempting to clean up.");
+      for (EiffelEvent event : events) {
+        EventKey key = EventKey.fromEvent(event);
+        if (eventsInQueue.containsKey(key)) {
+          idCache.putId(event);
+          eventsInQueue.remove(key);
+          count.decrementAndGet();
+          logger.atFine().log("Event %s have been ack:ed by publisher", key);
+        }
+      }
+      logger.atInfo().log("Cleanup complete.");
     }
     if (previousCount == MAX_SIZE) {
       signalReadyForPut();
diff --git a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/PublishEventWorker.java b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/PublishEventWorker.java
index b192bb3..34f4e5d 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/PublishEventWorker.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/PublishEventWorker.java
@@ -41,10 +41,10 @@
     try {
       while (running) {
         events = eventQueue.take(publisher.maxBatchSize());
-        boolean unpublishedEvent = !events.isEmpty();
-        while (running && unpublishedEvent) {
-          unpublishedEvent = !publisher.publish(events);
-          if (!unpublishedEvent) {
+        boolean unpublishedEvents = !events.isEmpty();
+        while (running && unpublishedEvents) {
+          unpublishedEvents = !publisher.publish(events);
+          if (!unpublishedEvents) {
             eventQueue.ack(events);
             events = null;
           } else {
@@ -83,7 +83,11 @@
   public void stop() {
     logger.atInfo().log("Stopping publisher thread");
     this.running = false;
-    thread.interrupt();
+    try {
+      thread.join(5000);
+    } catch (InterruptedException e) {
+      // Do nothing
+    }
   }
 
   @Override
diff --git a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/mq/RabbitMqPublisher.java b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/mq/RabbitMqPublisher.java
index 564c91e..7d45b66 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/mq/RabbitMqPublisher.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/mq/RabbitMqPublisher.java
@@ -26,6 +26,7 @@
 import com.rabbitmq.client.Connection;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.concurrent.TimeoutException;
 
@@ -63,9 +64,20 @@
       if (config.confirmsEnabled()) {
         try {
           return channel.waitForConfirms(config.waitForConfirms());
-        } catch (InterruptedException | TimeoutException e) {
-          logger.atWarning().withCause(e).log("Failed to confirm delivery");
+        } catch (TimeoutException te) {
+          logger.atWarning().withCause(te).log("Failed to confirm delivery");
           return false;
+        } catch (InterruptedException ie) {
+          logger.atWarning().log("Interupted while waiting for confirms, new attempt");
+          try {
+            channel.waitForConfirms(2000);
+            return true;
+          } catch (InterruptedException | TimeoutException e) {
+            logger.atSevere().withCause(e).log(
+                "Failed to confirm pushed events before cleanup: %s",
+                Arrays.toString(events.toArray()));
+            return false;
+          }
         }
       }
       return true;
