Let me know if the comments here don't make sense. Basically the joy of using java.util.properties' copy constructor is that it doesn't do a deep copy but holds a reference. getProperty() works but native map operations like remove or containsKey only work on the map( i.e. this property instance) and not the one it wraps. So if someone added tenant ID to properties, great ( we can remove easily) but if someone added it to properties and then wrapped it in another one, then we have to create a new copy and exclude it.