Many user-facing public APIs make use of a map for passing in additional parameters. This map is also used internally. The API contract for this is mostly that the map passed in is not altered. But occasionally, the framework augments or changes the map internally. This causes failures if a user passes in a non-modifiable map, or depends on the map having the same contents when the method it was passed into , returns. Most places in the UIMA Framework code already copy the map if they're going to modify it. Find the places where this is not yet done, and make those places also copy it.