diff -Naurp a/modules/md/md_curl.c b/modules/md/md_curl.c
--- a/modules/md/md_curl.c	2021-05-12 12:14:42.000000000 +0200
+++ b/modules/md/md_curl.c	2021-09-15 15:37:32.716291831 +0200
@@ -493,7 +493,7 @@ static apr_status_t md_curl_multi_perfor
             else if (APR_STATUS_IS_ENOENT(rv)) {
                 md_log_perror(MD_LOG_MARK, MD_LOG_TRACE3, 0, p, 
                               "multi_perform[%d reqs]: no more requests", requests->nelts);
-                if (!running) {
+                if (!requests->nelts) {
                     goto leave;
                 }
                 break;
@@ -526,13 +526,13 @@ static apr_status_t md_curl_multi_perfor
         }
 
         /* process status messages, e.g. that a request is done */
-        while (1) {
+        while (running < requests->nelts) {
             curlmsg = curl_multi_info_read(curlm, &msgcount);
             if (!curlmsg) break;
             if (curlmsg->msg == CURLMSG_DONE) {
                 req = find_curl_request(requests, curlmsg->easy_handle);
                 if (req) {
-                    md_log_perror(MD_LOG_MARK, MD_LOG_TRACE3, 0, p, 
+                    md_log_perror(MD_LOG_MARK, MD_LOG_TRACE2, 0, p,
                                   "multi_perform[%d reqs]: req[%d] done", 
                                   requests->nelts, req->id);
                     update_status(req);
@@ -548,7 +548,6 @@ static apr_status_t md_curl_multi_perfor
                 }
             }
         }
-        assert(running == requests->nelts);
     };
 
 leave:
diff -Naurp a/modules/md/md_ocsp.c b/modules/md/md_ocsp.c
--- a/modules/md/md_ocsp.c	2021-05-12 12:14:42.000000000 +0200
+++ b/modules/md/md_ocsp.c	2021-09-15 15:37:32.717291832 +0200
@@ -633,7 +633,11 @@ static apr_status_t ostat_on_resp(const
     if (NULL == (ocsp_resp = d2i_OCSP_RESPONSE(NULL, (const unsigned char**)&der.data, 
                                                (long)der.len))) {
         rv = APR_EINVAL;
-        md_result_set(update->result, rv, "response body does not parse as OCSP response");
+
+        md_result_set(update->result, rv,
+                      apr_psprintf(req->pool, "req[%d] response body does not parse as "
+                                   "OCSP response, status=%d, body brigade length=%ld",
+                                   resp->req->id, resp->status, (long)der.len));
         md_result_log(update->result, MD_LOG_DEBUG);
         goto cleanup;
     }
@@ -659,7 +663,7 @@ static apr_status_t ostat_on_resp(const
      * to accept it. */
     switch ((n = OCSP_check_nonce(ostat->ocsp_req, basic_resp))) {
         case 1:
-            md_log_perror(MD_LOG_MARK, MD_LOG_DEBUG, 0, req->pool, 
+            md_log_perror(MD_LOG_MARK, MD_LOG_TRACE3, 0, req->pool,
                           "req[%d]: OCSP respoonse nonce does match", req->id);
             break;
         case 0:
@@ -669,7 +673,7 @@ static apr_status_t ostat_on_resp(const
             goto cleanup;
             
         case -1:
-            md_log_perror(MD_LOG_MARK, MD_LOG_TRACE1, 0, req->pool, 
+            md_log_perror(MD_LOG_MARK, MD_LOG_TRACE3, 0, req->pool,
                           "req[%d]: OCSP respoonse did not return the nonce", req->id);
             break;
         default:
@@ -827,6 +831,9 @@ static apr_status_t next_todo(md_http_re
             md_http_set_on_status_cb(req, ostat_on_req_status, update);
             md_http_set_on_response_cb(req, ostat_on_resp, update);
             rv = APR_SUCCESS;
+            md_log_perror(MD_LOG_MARK, MD_LOG_TRACE2, 0, req->pool,
+                          "scheduling OCSP request for %s, %d request in flight",
+                          ostat->md_name, in_flight);
         }
     }
 cleanup: