Hi, I've made some improvements. I got the following snippet down from around 16s to 6s. --8<---------------cut here---------------start------------->8--- (statprof (lambda () (map parse-email (call-with-input-file "large-base64-attachment.mbox" mbox->emails)))) --8<---------------cut here---------------end--------------->8--- Specifically, I made the following improvements to guile-email. - I rewrote the base64 decoder from scratch to be a little faster. Earlier, I was using the decoder I had copied from Guix. - I eliminated several unneccessary bytevector<->string conversions. - I rewrote read-bytes-till in (email utils) to process multiple bytes at a time, instead of byte by byte. There is still scope for improvement, but do test and let me know if this serves your purpose for now. Also, I am curious to see your new benchmark of parse-email to compare with the 8s you reported earlier. Cheers!