The AcceptOnceFileListFilter was intentionally left simple to make simple things work, the scanning and filtering options were added to make complex things possible. From the view point of Spring Integration (being file system agnostic) it is impossible to deal with files transactionally, period.

That doesn't mean you can't DIY though .

The problem with making the inbound adapter responsible for removing the files is that this adapter doesn't necessarily know when a file was processed, so you'd have to give it a callback (i.e. routing a message back to it). If it decided on its own you'd risk losing files, when I came to realize that, I decided that duplication was the better option.

You could think of opening an issue to make the callback functionality a first class citizen again, but if Gary's approach is good enough I'd say that we should wait for some people that are stuck in a multithreaded scenario before reconsidering this.