diff --git a/lib/libwebsockets.c b/lib/libwebsockets.c
index 43a0527d8140e4daab1e47c5ad80b42c9f35b3f8..42c6c81d1783de2a8ab6fc400f2332daf9729a81 100644
--- a/lib/libwebsockets.c
+++ b/lib/libwebsockets.c
@@ -76,14 +76,17 @@ lws_remove_from_timeout_list(struct lws *wsi)
 {
 	struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi];
 
-	if (!wsi->timeout_list_prev)
+	if (!wsi->timeout_list_prev) /* ie, not part of the list */
 		return;
 
 	lws_pt_lock(pt);
+	/* if we have a next guy, set his prev to our prev */
 	if (wsi->timeout_list)
 		wsi->timeout_list->timeout_list_prev = wsi->timeout_list_prev;
+	/* set our prev guy to our next guy instead of us */
 	*wsi->timeout_list_prev = wsi->timeout_list;
 
+	/* we're out of the list, we should not point anywhere any more */
 	wsi->timeout_list_prev = NULL;
 	wsi->timeout_list = NULL;
 	lws_pt_unlock(pt);
@@ -109,11 +112,15 @@ lws_set_timeout(struct lws *wsi, enum pending_timeout reason, int secs)
 
 	time(&now);
 
-	if (!wsi->pending_timeout && reason) {
+	if (reason && !wsi->timeout_list_prev) {
+		/* our next guy is current first guy */
 		wsi->timeout_list = pt->timeout_list;
+		/* if there is a next guy, set his prev ptr to our next ptr */
 		if (wsi->timeout_list)
 			wsi->timeout_list->timeout_list_prev = &wsi->timeout_list;
+		/* our prev ptr is first ptr */
 		wsi->timeout_list_prev = &pt->timeout_list;
+		/* set the first guy to be us */
 		*wsi->timeout_list_prev = wsi;
 	}
 
diff --git a/lib/parsers.c b/lib/parsers.c
index c78fb92e6640f4335d2c10fc9d311e09537f02f4..0e36eee3bde265c6fe2c30e4210788e011fbbc66 100644
--- a/lib/parsers.c
+++ b/lib/parsers.c
@@ -107,7 +107,7 @@ lws_header_table_attach(struct lws *wsi)
 
 	/* if we are already bound to one, just clear it down */
 	if (wsi->u.hdr.ah) {
-		lwsl_err("cleardown\n");
+		lwsl_info("cleardown\n");
 		goto reset;
 	}
 
@@ -122,8 +122,8 @@ lws_header_table_attach(struct lws *wsi)
 				goto bail;
 			}
 			/* new ah.... remove ourselves from waiting list */
-			*pwsi = wsi->u.hdr.ah_wait_list;
-			wsi->u.hdr.ah_wait_list = NULL;
+			*pwsi = wsi->u.hdr.ah_wait_list; /* set our prev to our next */
+			wsi->u.hdr.ah_wait_list = NULL; /* no next any more */
 			pt->ah_wait_list_length--;
 			break;
 		}
@@ -202,7 +202,7 @@ int lws_header_table_detach(struct lws *wsi)
 	lws_pt_lock(pt);
 
 	pwsi = &pt->ah_wait_list;
-	if (!ah) { /* remove from wait list if that's all */
+	if (!ah) { /* remove from wait list if none attached */
 //		if (wsi->socket_is_permanently_unusable)
 			while (*pwsi) {
 				if (*pwsi == wsi) {
@@ -218,6 +218,7 @@ int lws_header_table_detach(struct lws *wsi)
 
 		goto bail;
 	}
+	/* we did have an ah attached */
 	time(&now);
 	if (now - wsi->u.hdr.ah->assigned > 3) {
 		/*
@@ -239,6 +240,7 @@ int lws_header_table_detach(struct lws *wsi)
 	wsi->u.hdr.ah = NULL;
 	ah->wsi = NULL; /* no owner */
 
+	/* oh there is nobody on the waiting list... leave it at that then */
 	if (!*pwsi) {
 		ah->in_use = 0;
 		pt->ah_count_in_use--;
@@ -246,7 +248,7 @@ int lws_header_table_detach(struct lws *wsi)
 		goto bail;
 	}
 
-	/* somebody else on same tsi is waiting, give it to him */
+	/* somebody else on same tsi is waiting, give it to oldest guy */
 
 	lwsl_info("pt wait list %p\n", *pwsi);
 	while ((*pwsi)->u.hdr.ah_wait_list)
@@ -271,6 +273,7 @@ int lws_header_table_detach(struct lws *wsi)
 
 	/* point prev guy to next guy in list instead */
 	*pwsi = wsi->u.hdr.ah_wait_list;
+	/* the guy who got one is out of the list */
 	wsi->u.hdr.ah_wait_list = NULL;
 	pt->ah_wait_list_length--;