Index: trunk/src/org/openstreetmap/josm/data/validation/tests/MultipolygonTest.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/tests/MultipolygonTest.java	(revision 16075)
+++ trunk/src/org/openstreetmap/josm/data/validation/tests/MultipolygonTest.java	(revision 16076)
@@ -164,5 +164,5 @@
                         if (!area.equals(areaOuter)) {
                             String message = !areaStyle ? tr("Style for outer way mismatches")
-                                    : tr("With the currently used mappaint style(s) the style for outer way mismatches the area style");
+                                    : tr("With the currently used mappaint style the style for outer way mismatches the area style");
                             errors.add(TestError.builder(this, Severity.OTHER, OUTER_STYLE_MISMATCH)
                                     .message(message)
@@ -379,5 +379,5 @@
             if (errorCode == RINGS_SHARE_NODES) {
                 errors.add(TestError.builder(this, Severity.OTHER, errorCode)
-                        .message(tr("Multipolygon rings share node(s)"))
+                        .message(tr("Multipolygon rings share nodes"))
                         .primitives(prims)
                         .highlight(sharedByPolygons)
@@ -578,5 +578,5 @@
                         String msg = loop == 0 ? tr("Intersection between multipolygon ways")
                                 : samePoly ? tr("Multipolygon ring contains segments twice")
-                                        : tr("Multipolygon outer way shares segment(s) with other ring");
+                                        : tr("Multipolygon outer way shares segments with other ring");
                         errors.add(TestError.builder(this, Severity.ERROR, CROSSING_WAYS)
                                 .message(msg)
@@ -693,6 +693,6 @@
     /**
      * Check for:<ul>
-     * <li>{@link #REPEATED_MEMBER_DIFF_ROLE}: Multipolygon member(s) repeated with different role</li>
-     * <li>{@link #REPEATED_MEMBER_SAME_ROLE}: Multipolygon member(s) repeated with same role</li>
+     * <li>{@link #REPEATED_MEMBER_DIFF_ROLE}: Multipolygon members repeated with different role</li>
+     * <li>{@link #REPEATED_MEMBER_SAME_ROLE}: Multipolygon members repeated with same role</li>
      * </ul>
      * @param r relation
@@ -738,6 +738,6 @@
                 }
             }
-            addRepeatedMemberError(r, repeatedDiffRole, REPEATED_MEMBER_DIFF_ROLE, tr("Multipolygon member(s) repeated with different role"));
-            addRepeatedMemberError(r, repeatedSameRole, REPEATED_MEMBER_SAME_ROLE, tr("Multipolygon member(s) repeated with same role"));
+            addRepeatedMemberError(r, repeatedDiffRole, REPEATED_MEMBER_DIFF_ROLE, tr("Multipolygon members repeated with different role"));
+            addRepeatedMemberError(r, repeatedSameRole, REPEATED_MEMBER_SAME_ROLE, tr("Multipolygon members repeated with same role"));
         }
         return hasDups;
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/properties/CopyKeyValueAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/properties/CopyKeyValueAction.java	(revision 16075)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/properties/CopyKeyValueAction.java	(revision 16076)
@@ -32,5 +32,5 @@
         super(tagTable, keyFn, objectSp);
         setName(0);
-        putValue(SHORT_DESCRIPTION, tr("Copy the key and value of the selected tag(s) to clipboard"));
+        putValue(SHORT_DESCRIPTION, tr("Copy the key and value of the selected tags to clipboard"));
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java	(revision 16075)
+++ trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java	(revision 16076)
@@ -290,6 +290,6 @@
     private class ImageRemoveAction extends JosmAction {
         ImageRemoveAction() {
-            super(null, new ImageProvider("dialogs", "delete"), tr("Remove photo(s) from layer"), Shortcut.registerShortcut(
-                    "geoimage:deleteimagefromlayer", tr("Geoimage: {0}", tr("Remove photo(s) from layer")), KeyEvent.VK_DELETE, Shortcut.SHIFT),
+            super(null, new ImageProvider("dialogs", "delete"), tr("Remove photo from layer"), Shortcut.registerShortcut(
+                    "geoimage:deleteimagefromlayer", tr("Geoimage: {0}", tr("Remove photo from layer")), KeyEvent.VK_DELETE, Shortcut.SHIFT),
                   false, null, false);
         }
@@ -305,7 +305,7 @@
     private class ImageRemoveFromDiskAction extends JosmAction {
         ImageRemoveFromDiskAction() {
-            super(null, new ImageProvider("dialogs", "geoimage/deletefromdisk"), tr("Delete photo file(s) from disk"),
+            super(null, new ImageProvider("dialogs", "geoimage/deletefromdisk"), tr("Delete photo file from disk"),
                   Shortcut.registerShortcut(
-                    "geoimage:deletefilefromdisk", tr("Geoimage: {0}", tr("Delete file(s) from disk")), KeyEvent.VK_DELETE, Shortcut.CTRL_SHIFT),
+                    "geoimage:deletefilefromdisk", tr("Geoimage: {0}", tr("Delete photo file from disk")), KeyEvent.VK_DELETE, Shortcut.CTRL_SHIFT),
                   false, null, false);
         }
