Index: trunk/src/org/openstreetmap/josm/gui/io/UploadDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/io/UploadDialog.java	(revision 15050)
+++ trunk/src/org/openstreetmap/josm/gui/io/UploadDialog.java	(revision 15051)
@@ -599,5 +599,6 @@
         }
 
-        static String validateUploadTag(String uploadValue, String preferencePrefix, List<String> defMandatory, List<String> defForbidden) {
+        static String validateUploadTag(String uploadValue, String preferencePrefix,
+                List<String> defMandatory, List<String> defForbidden, List<String> defException) {
             String uploadValueLc = lower(uploadValue);
             // Check mandatory terms
@@ -608,6 +609,9 @@
             }
             // Check forbidden terms
+            List<String> exceptions = Config.getPref().getList(preferencePrefix+".exception-terms", defException);
             List<String> forbiddenTerms = Config.getPref().getList(preferencePrefix+".forbidden-terms", defForbidden)
-                    .stream().map(UploadAction::lower).filter(uploadValueLc::contains).collect(Collectors.toList());
+                    .stream().map(UploadAction::lower)
+                    .filter(x -> uploadValueLc.contains(x) && !exceptions.stream().anyMatch(uploadValueLc::contains))
+                    .collect(Collectors.toList());
             if (!forbiddenTerms.isEmpty()) {
                 return tr("The following forbidden terms have been found: {0}", forbiddenTerms);
@@ -624,5 +628,5 @@
             final String uploadComment = dialog.getUploadComment();
             final String uploadCommentRejection = validateUploadTag(
-                    uploadComment, "upload.comment", def, def);
+                    uploadComment, "upload.comment", def, def, def);
             if ((isUploadCommentTooShort(uploadComment) && warnUploadComment()) ||
                 (uploadCommentRejection != null && warnRejectedUploadComment(uploadCommentRejection))) {
@@ -633,5 +637,5 @@
             final String uploadSource = dialog.getUploadSource();
             final String uploadSourceRejection = validateUploadTag(
-                    uploadSource, "upload.source", def, def);
+                    uploadSource, "upload.source", def, def, def);
             if ((Utils.isStripEmpty(uploadSource) && warnUploadSource()) ||
                     (uploadSourceRejection != null && warnRejectedUploadSource(uploadSourceRejection))) {
