Index: /trunk/src/org/openstreetmap/josm/Main.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/Main.java	(revision 8958)
+++ /trunk/src/org/openstreetmap/josm/Main.java	(revision 8959)
@@ -265,4 +265,12 @@
 
     /**
+     * Clears the list of last error and warning messages.
+     * @since 8959
+     */
+    public static void clearLastErrorAndWarnings() {
+        ERRORS_AND_WARNINGS.clear();
+    }
+
+    /**
      * Prints an error message if logging is on.
      * @param msg The message to print.
Index: /trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java	(revision 8958)
+++ /trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java	(revision 8959)
@@ -196,5 +196,5 @@
                     });
                 } else {
-                    Main.warn(PRESET_ICON_ERROR_MSG_PREFIX + iconName);
+                    Main.warn(TaggingPreset.this + ": " + PRESET_ICON_ERROR_MSG_PREFIX + iconName);
                 }
             }
Index: /trunk/test/unit/org/openstreetmap/josm/gui/preferences/map/TaggingPresetPreferenceTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/gui/preferences/map/TaggingPresetPreferenceTest.java	(revision 8958)
+++ /trunk/test/unit/org/openstreetmap/josm/gui/preferences/map/TaggingPresetPreferenceTest.java	(revision 8959)
@@ -4,5 +4,4 @@
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
 
 import java.io.IOException;
@@ -47,9 +46,16 @@
             System.out.println(source.url);
             try {
-                Collection<TaggingPreset> presets = TaggingPresetReader.readAll(source.url, true);
-                assertFalse(presets.isEmpty());
-                System.out.println(" => OK");
-                allMessages.addAll(Main.getLastErrorAndWarnings());
-            } catch (SAXException | IOException e) {
+                testPresets(allMessages, source);
+            } catch (IOException e) {
+                try {
+                    Main.warn(e);
+                    // try again in case of temporary network error
+                    testPresets(allMessages, source);
+                } catch (SAXException | IOException e1) {
+                    e.printStackTrace();
+                    allErrors.add(e1);
+                    System.out.println(" => KO");
+                }
+            } catch (SAXException e) {
                 e.printStackTrace();
                 allErrors.add(e);
@@ -58,8 +64,21 @@
         }
         assertTrue(allErrors.isEmpty());
-        for (String message : allMessages) {
+        assertTrue(allMessages.isEmpty());
+    }
+
+    private static void testPresets(Set<String> allMessages, ExtendedSourceEntry source) throws SAXException, IOException {
+        Collection<TaggingPreset> presets = TaggingPresetReader.readAll(source.url, true);
+        assertFalse(presets.isEmpty());
+        Collection<String> errorsAndWarnings = Main.getLastErrorAndWarnings();
+        boolean error = false;
+        for (String message : errorsAndWarnings) {
             if (message.contains(TaggingPreset.PRESET_ICON_ERROR_MSG_PREFIX)) {
-                fail(message);
+                error = true;
+                allMessages.add(message);
             }
+        }
+        System.out.println(error ? " => KO" : " => OK");
+        if (error) {
+            Main.clearLastErrorAndWarnings();
         }
     }
