File transfer doesn't clean up threads it creates

I’m developing against Smack 3.0.4. When accepting an incoming file transfer, FaultTolerantNegotiator.createIncomingStream is called. Here, two NegotiatorServices are created and submitted to an ExecutorCompletionService. A new thread is created and started for each of the NegotiatorServices, but neither thread ever completes. So after 20 accepted file transfers, for example, there are 40 unused threads laying around. As far as I know, I’m using all of the default settings. This occurs when transferring files between two clients on the same machine as well as two clients on different machines. Is there a workaround for this?