diff --git a/src/common/evsched.c b/src/common/evsched.c
index 51035347d297dc8625103e423692a2012a63ba68..5e2073af2f4d3efc09858d0c29d57f62c99e9638 100644
--- a/src/common/evsched.c
+++ b/src/common/evsched.c
@@ -185,6 +185,7 @@ event_t* evsched_next(evsched_t *s)
 			/* Immediately return. */
 			if (timercmp_ge(&dt, &next_ev->tv)) {
 				s->cur = next_ev;
+                heap_delmin(&s->heap);
 				pthread_mutex_unlock(&s->mx);
 				pthread_mutex_lock(&s->rl);
 
@@ -193,10 +194,7 @@ event_t* evsched_next(evsched_t *s)
 					pthread_mutex_unlock(&s->rl);
 					pthread_mutex_lock(&s->mx);
 					continue;
-				} else {
-					/* Valid, remove from waitlist. */
-					heap_delmin(&s->heap);
-				}
+                }
 				
 				return next_ev;
 			}
@@ -326,9 +324,7 @@ int evsched_cancel(evsched_t *s, event_t *ev)
 	 */
 	if (s->cur == ev) {
 		s->cur = NULL; /* Invalidate */
-		pthread_mutex_unlock(&s->mx);
-		pthread_mutex_unlock(&s->rl);
-		return found;
+        found = 1; /* Mark as found (although not in heap). */
 	}
 
 	/* Unlock calendar. */