I realize that you guys probably have a good reason for S3AFileSystem to cleanup "fake" folders when a file is written to S3. That said, that fact that it silently does this feels like a separation of concerns issue. It also leads to weird behavior issues where calls to AmazonS3Client.getObjectMetadata for folders work before calling S3AFileSystem.create but not after. Also, there seems to be no mention in the javadoc that the deleteUnnecessaryFakeDirectories method is automatically invoked. Lastly, it seems like the goal of FileSystem should be to ensure that code built on top of it is portable to different implementations. This behavior is an example of a case where this can break down.