Index: trunk/src/org/openstreetmap/josm/data/imagery/ImageryInfo.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/imagery/ImageryInfo.java	(revision 15933)
+++ trunk/src/org/openstreetmap/josm/data/imagery/ImageryInfo.java	(revision 15934)
@@ -397,5 +397,5 @@
             min_zoom = i.defaultMinZoom;
             cookies = i.cookies;
-            icon = i.icon == null ? null : i.icon.intern();
+            icon = intern(i.icon);
             description = i.description;
             category = i.category != null ? i.category.getCategoryString() : null;
@@ -555,7 +555,7 @@
         if (e.projections != null && !e.projections.isEmpty()) {
             // split generates null element on empty string which gives one element Array[null]
-            serverProjections = Arrays.asList(e.projections.split(","));
-        }
-        attributionText = e.attribution_text;
+            setServerProjections(Arrays.asList(e.projections.split(",")));
+        }
+        attributionText = intern(e.attribution_text);
         attributionLinkURL = e.attribution_url;
         permissionReferenceURL = e.permission_reference_url;
@@ -567,6 +567,6 @@
         termsOfUseText = e.terms_of_use_text;
         termsOfUseURL = e.terms_of_use_url;
-        countryCode = e.country_code;
-        icon = e.icon == null ? null : e.icon.intern();
+        countryCode = intern(e.country_code);
+        icon = intern(e.icon);
         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 == null ? null : i.icon.intern();
+        this.icon = intern(i.icon);
         this.isGeoreferenceValid = i.isGeoreferenceValid;
         this.defaultLayers = i.defaultLayers;
@@ -639,5 +639,5 @@
         this.transparent = i.transparent;
         this.minimumTileExpire = i.minimumTileExpire;
-        this.categoryOriginalString = i.categoryOriginalString;
+        this.categoryOriginalString = intern(i.categoryOriginalString);
         this.category = i.category;
     }
@@ -868,5 +868,5 @@
      */
     public void setAttributionText(String text) {
-        attributionText = text;
+        attributionText = intern(text);
     }
 
@@ -955,10 +955,7 @@
 
         if (serverProjections.isEmpty()) {
-            serverProjections = new ArrayList<>();
             Matcher m = Pattern.compile(".*\\{PROJ\\(([^)}]+)\\)\\}.*").matcher(url.toUpperCase(Locale.ENGLISH));
             if (m.matches()) {
-                for (String p : m.group(1).split(",")) {
-                    serverProjections.add(p);
-                }
+                setServerProjections(Arrays.asList(m.group(1).split(",")));
             }
         }
@@ -1064,5 +1061,5 @@
         if (LanguageInfo.isBetterLanguage(langDescription, language)) {
             this.description = isdefault ? tr(description) : description;
-            this.langDescription = language;
+            this.langDescription = intern(language);
         }
     }
@@ -1155,5 +1152,5 @@
      */
     public void setCountryCode(String countryCode) {
-        this.countryCode = countryCode;
+        this.countryCode = intern(countryCode);
     }
 
@@ -1190,5 +1187,5 @@
      */
     public void setIcon(String icon) {
-        this.icon = icon == null ? null : icon.intern();
+        this.icon = intern(icon);
     }
 
@@ -1209,5 +1206,7 @@
     public void setServerProjections(Collection<String> serverProjections) {
         CheckParameterUtil.ensureParameterNotNull(serverProjections, "serverProjections");
-        this.serverProjections = new ArrayList<>(serverProjections);
+        this.serverProjections = serverProjections.stream()
+                .map(String::intern)
+                .collect(Collectors.collectingAndThen(Collectors.toList(), Utils::toUnmodifiableList));
     }
 
@@ -1355,5 +1354,5 @@
      */
     public void setImageryCategoryOriginalString(String categoryOriginalString) {
-        this.categoryOriginalString = categoryOriginalString;
+        this.categoryOriginalString = intern(categoryOriginalString);
     }
 
@@ -1645,3 +1644,7 @@
         }
     }
+
+    private static String intern(String string) {
+        return string == null ? null : string.intern();
+    }
 }
Index: trunk/src/org/openstreetmap/josm/data/osm/RelationMember.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/RelationMember.java	(revision 15933)
+++ trunk/src/org/openstreetmap/josm/data/osm/RelationMember.java	(revision 15934)
@@ -84,5 +84,5 @@
     public RelationMember(String role, OsmPrimitive member) {
         CheckParameterUtil.ensureParameterNotNull(member, "member");
-        this.role = Optional.ofNullable(role).orElse("");
+        this.role = Optional.ofNullable(role).orElse("").intern();
         this.member = member;
     }
Index: trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/ConditionFactory.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/ConditionFactory.java	(revision 15933)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/ConditionFactory.java	(revision 15934)
@@ -259,6 +259,6 @@
          */
         public SimpleKeyValueCondition(String k, String v) {
-            this.k = k;
-            this.v = v;
+            this.k = k.intern();
+            this.v = v.intern();
         }
 
@@ -311,6 +311,6 @@
          */
         public KeyValueCondition(String k, String v, Op op, boolean considerValAsKey) {
-            this.k = k;
-            this.v = v;
+            this.k = k.intern();
+            this.v = v.intern();
             this.op = op;
             this.considerValAsKey = considerValAsKey;
Index: trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/LiteralExpression.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/LiteralExpression.java	(revision 15933)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/LiteralExpression.java	(revision 15934)
@@ -20,5 +20,5 @@
     public LiteralExpression(Object literal) {
         CheckParameterUtil.ensureParameterNotNull(literal);
-        this.literal = literal;
+        this.literal = literal instanceof String ? ((String) literal).intern() : literal;
     }
 
