What happens if I call delete() then call getOutputStream()?
Nothing special.
The (inner class) MuffinOutputStream deletes the muffin anyways (tries to - actually [since there won’t be a muffin in first place]), then creates the muffin and then writes (in the close() method, because we don’t know the final size before).
I could have choosen another way… like checking the size and if it’s big enough open it with overwrite enabled and delete/recreate otherwise, but y’know there won’t be any benefit doing so. Like there’s a muffin with 100 bytes… and the new one is only 90… the remaining bytes would contain junk then (which could be annoying).
[Eventually that stuff is handled automatically, but I really can’t be arsed to try that just for ending up with a more complex method which does the same]
So… just nuke it all and rebuild. Simple, pain free and relyable 
I take it the tags are the ones that I defined within the JNLP lib?
Yes, PersistenceService.TEMPORARY, PersistenceService.CACHED and PersistenceService.DIRTY. The javadoc comments will of course explain that 
The unofficial jnlp faq said that those tags are only used by webstart to determine, in which order the muffins should be deleted if it runs out of space. First temp, then cache and then dirty. So if you want to keep em as long as possible (eg forever) then “dirty” would be the one you should pick.
I’m really starting to like that style of using static
methods on a class to get the collection, its really
intuitive, at least for me 
Yea, I thought it would be silly if you would have to create a dummy muffin just for getting the already stored muffins.
It would be like ordering random food in a restaurant for getting the bill of fare 
What could be added is a getFileContents and a getRandomAcessFile method. Well, I won’t have time to do any changes on that thing within the next 48 hours… I think I should have a pretty good idea then what’s missing. Suggestions are of course still welcome.