@alex-wajam I finally kept the mutable set. This set is emptied as the iterator is read. The caller is not keeping a reference to the set (a rather weak contract I know). The deal breaker with immutable set is that it can never be garbage collected since it will remain in scope for the lifetime of the anonymous `LogQueueReader` (i.e. the entire time the BWL service is Up). I can solve this by extracting the anonymous `LogQueueReader` in a private inner class and declaring the set as a `var` (realized this when writing this comment). 

One thing I like with the mutable set is that the `taskItems` iterator can be filtered with a single `collect`. An immutable set requires `collect` + `withFilter` and two calls to the set (i.e. `contains` and `-=`). 

I don't mind to do the changes for using a mutable set. @alex-wajam + @coderunner what is your take on this?