Index: trunk/src/org/openstreetmap/josm/data/imagery/ImageryInfo.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/imagery/ImageryInfo.java	(revision 15901)
+++ trunk/src/org/openstreetmap/josm/data/imagery/ImageryInfo.java	(revision 15902)
@@ -397,5 +397,5 @@
             min_zoom = i.defaultMinZoom;
             cookies = i.cookies;
-            icon = i.icon;
+            icon = i.icon == null ? null : i.icon.intern();
             description = i.description;
             category = i.category != null ? i.category.getCategoryString() : null;
@@ -568,5 +568,5 @@
         termsOfUseURL = e.terms_of_use_url;
         countryCode = e.country_code;
-        icon = e.icon;
+        icon = e.icon == null ? null : e.icon.intern();
         if (e.noTileHeaders != null) {
             noTileHeaders = e.noTileHeaders.toMap();
@@ -633,5 +633,5 @@
         this.overlay = i.overlay;
         // do not copy field {@code mirrors}
-        this.icon = i.icon;
+        this.icon = i.icon == null ? null : i.icon.intern();
         this.isGeoreferenceValid = i.isGeoreferenceValid;
         this.defaultLayers = i.defaultLayers;
@@ -1190,5 +1190,5 @@
      */
     public void setIcon(String icon) {
-        this.icon = icon;
+        this.icon = icon == null ? null : icon.intern();
     }
 
Index: trunk/src/org/openstreetmap/josm/data/projection/Projections.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/Projections.java	(revision 15901)
+++ trunk/src/org/openstreetmap/josm/data/projection/Projections.java	(revision 15902)
@@ -77,7 +77,7 @@
          */
         public ProjectionDefinition(String code, String name, String definition) {
-            this.code = code;
-            this.name = name;
-            this.definition = definition;
+            this.code = code.intern();
+            this.name = name.intern();
+            this.definition = definition.intern();
         }
     }
Index: trunk/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java	(revision 15901)
+++ trunk/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java	(revision 15902)
@@ -331,5 +331,6 @@
                     try {
                         final String val = ai.val instanceof Expression
-                                ? Optional.ofNullable(((Expression) ai.val).evaluate(new Environment())).map(Object::toString).orElse(null)
+                                ? Optional.ofNullable(((Expression) ai.val).evaluate(new Environment()))
+                                        .map(Object::toString).map(String::intern).orElse(null)
                                 : ai.val instanceof String
                                 ? (String) ai.val
Index: trunk/src/org/openstreetmap/josm/gui/mappaint/Keyword.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/Keyword.java	(revision 15901)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/Keyword.java	(revision 15902)
@@ -24,5 +24,5 @@
      */
     public Keyword(String val) {
-        this.val = val.toLowerCase(Locale.ENGLISH);
+        this.val = val.toLowerCase(Locale.ENGLISH).intern();
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/mappaint/MapPaintStyles.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/MapPaintStyles.java	(revision 15901)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/MapPaintStyles.java	(revision 15902)
@@ -96,5 +96,5 @@
          */
         public TagKeyReference(String key) {
-            this.key = key;
+            this.key = key.intern();
         }
 
Index: trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Instruction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Instruction.java	(revision 15901)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Instruction.java	(revision 15902)
@@ -52,5 +52,5 @@
 
         public AssignmentInstruction(String key, Object val, boolean isSetInstruction) {
-            this.key = key;
+            this.key = key.intern();
             this.isSetInstruction = isSetInstruction;
             if (val instanceof LiteralExpression) {
Index: trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/ComboMultiSelect.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/ComboMultiSelect.java	(revision 15901)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/ComboMultiSelect.java	(revision 15902)
@@ -485,11 +485,13 @@
         for (int i = 0; i < valueArray.length; i++) {
             final PresetListEntry e = new PresetListEntry(valueArray[i]);
-            e.locale_display_value = locale_display_values != null || values_no_i18n
+            final String value = locale_display_values != null || values_no_i18n
                     ? displayArray[i]
                     : trc(values_context, fixPresetString(displayArray[i]));
+            e.locale_display_value = value == null ? null : value.intern();
             if (shortDescriptionsArray != null) {
-                e.locale_short_description = locale_short_descriptions != null
+                final String description = locale_short_descriptions != null
                         ? shortDescriptionsArray[i]
                         : tr(fixPresetString(shortDescriptionsArray[i]));
+                e.locale_short_description = description == null ? null : description.intern();
             }
 
Index: trunk/src/org/openstreetmap/josm/tools/XmlObjectParser.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/XmlObjectParser.java	(revision 15901)
+++ trunk/src/org/openstreetmap/josm/tools/XmlObjectParser.java	(revision 15902)
@@ -138,4 +138,7 @@
 
         private void setValue(Entry entry, String fieldName, String value) throws SAXException {
+            if (value != null) {
+                value = value.intern();
+            }
             CheckParameterUtil.ensureParameterNotNull(entry, "entry");
             if ("class".equals(fieldName) || "default".equals(fieldName) || "throw".equals(fieldName) ||
