Index: trunk/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java	(revision 8934)
+++ trunk/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java	(revision 8936)
@@ -234,5 +234,26 @@
     final MultiMap<String, TagCheck> checks = new MultiMap<>();
 
-    static class TagCheck implements Predicate<OsmPrimitive> {
+    /**
+     * Result of {@link TagCheck#readMapCSS}
+     * @since 8936
+     */
+    public static class ParseResult {
+        /** Checks successfully parsed */
+        public final List<TagCheck> parseChecks;
+        /** Errors that occured during parsing */
+        public final Collection<Throwable> parseErrors;
+
+        /**
+         * Constructs a new {@code ParseResult}.
+         * @param parseChecks Checks successfully parsed
+         * @param parseErrors Errors that occured during parsing
+         */
+        public ParseResult(List<TagCheck> parseChecks, Collection<Throwable> parseErrors) {
+            this.parseChecks = parseChecks;
+            this.parseErrors = parseErrors;
+        }
+    }
+
+    public static class TagCheck implements Predicate<OsmPrimitive> {
         protected final GroupedMapCSSRule rule;
         protected final List<FixCommand> fixCommands = new ArrayList<>();
@@ -320,5 +341,5 @@
         }
 
-        static List<TagCheck> readMapCSS(Reader css) throws ParseException {
+        static ParseResult readMapCSS(Reader css) throws ParseException {
             CheckParameterUtil.ensureParameterNotNull(css, "css");
 
@@ -329,5 +350,6 @@
             final MapCSSParser parser = new MapCSSParser(css, MapCSSParser.LexicalState.DEFAULT);
             parser.sheet(source);
-            assert source.getErrors().isEmpty();
+            Collection<Throwable> parseErrors = source.getErrors();
+            assert parseErrors.isEmpty();
             // Ignore "meta" rule(s) from external rules of JOSM wiki
             removeMetaRules(source);
@@ -343,14 +365,15 @@
                 }
             }
-            List<TagCheck> result = new ArrayList<>();
+            List<TagCheck> parseChecks = new ArrayList<>();
             for (Map.Entry<Declaration, List<Selector>> map : g.entrySet()) {
                 try {
-                    result.add(TagCheck.ofMapCSSRule(
+                    parseChecks.add(TagCheck.ofMapCSSRule(
                             new GroupedMapCSSRule(map.getValue(), map.getKey())));
                 } catch (IllegalDataException e) {
                     Main.error("Cannot add MapCss rule: "+e.getMessage());
-                }
-            }
-            return result;
+                    parseErrors.add(e);
+                }
+            }
+            return new ParseResult(parseChecks, parseErrors);
         }
 
@@ -669,23 +692,26 @@
      * Adds a new MapCSS config file from the given URL.
      * @param url The unique URL of the MapCSS config file
+     * @return List of tag checks and parsing errors, or null
      * @throws ParseException if the config file does not match MapCSS syntax
      * @throws IOException if any I/O error occurs
      * @since 7275
      */
-    public synchronized void addMapCSS(String url) throws ParseException, IOException {
+    public synchronized ParseResult addMapCSS(String url) throws ParseException, IOException {
         CheckParameterUtil.ensureParameterNotNull(url, "url");
         CachedFile cache = new CachedFile(url);
         InputStream zip = cache.findZipEntryInputStream("validator.mapcss", "");
+        ParseResult result;
         try (InputStream s = zip != null ? zip : cache.getInputStream()) {
-            List<TagCheck> tagchecks = TagCheck.readMapCSS(new BufferedReader(UTFInputStreamReader.create(s)));
+            result = TagCheck.readMapCSS(new BufferedReader(UTFInputStreamReader.create(s)));
             checks.remove(url);
-            checks.putAll(url, tagchecks);
+            checks.putAll(url, result.parseChecks);
             // Check assertions, useful for development of local files
             if (Main.pref.getBoolean("validator.check_assert_local_rules", false) && Utils.isLocalUrl(url)) {
-                for (String msg : checkAsserts(tagchecks)) {
+                for (String msg : checkAsserts(result.parseChecks)) {
                     Main.warn(msg);
                 }
             }
         }
+        return result;
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java	(revision 8934)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java	(revision 8936)
@@ -447,6 +447,7 @@
     /**
      * Synchronously loads available sources and returns the parsed list.
+     * @return list of available sources
      */
-    Collection<ExtendedSourceEntry> loadAndGetAvailableSources() {
+    public final Collection<ExtendedSourceEntry> loadAndGetAvailableSources() {
         try {
             final SourceLoader loader = new SourceLoader(availableSourcesUrl, sourceProviders);
@@ -466,4 +467,7 @@
     }
 
+    /**
+     * Performs the initial loading of source providers. Does nothing if already done.
+     */
     public void initiallyLoadAvailableSources() {
         if (!sourcesInitiallyLoaded) {
