Index: trunk/src/org/openstreetmap/josm/data/preferences/sources/ExtendedSourceEntry.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/preferences/sources/ExtendedSourceEntry.java	(revision 15210)
+++ trunk/src/org/openstreetmap/josm/data/preferences/sources/ExtendedSourceEntry.java	(revision 15211)
@@ -4,4 +4,5 @@
 import static org.openstreetmap.josm.tools.I18n.tr;
 
+import org.openstreetmap.josm.tools.ImageResource;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -17,4 +18,6 @@
     /** author name used for display */
     public String author;
+    /** icon used for display */
+    public ImageResource icon;
     /** webpage link used for display */
     public String link;
Index: trunk/src/org/openstreetmap/josm/data/preferences/sources/MapPaintPrefHelper.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/preferences/sources/MapPaintPrefHelper.java	(revision 15210)
+++ trunk/src/org/openstreetmap/josm/data/preferences/sources/MapPaintPrefHelper.java	(revision 15211)
@@ -7,5 +7,4 @@
 import java.util.Arrays;
 import java.util.Collection;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -14,4 +13,5 @@
 
 import org.openstreetmap.josm.spi.preferences.Config;
+import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -84,4 +84,5 @@
         defJosmMapcss.active = true;
         defJosmMapcss.name = "standard";
+        defJosmMapcss.icon = new ImageProvider("logo").getResource();
         defJosmMapcss.title = tr("JOSM default (MapCSS)");
         defJosmMapcss.description = tr("Internal style to be used as base for runtime switchable overlay styles");
@@ -89,4 +90,5 @@
         defPL2.active = false;
         defPL2.name = "standard";
+        defPL2.icon = new ImageProvider("dialogs/mappaint", "pl2_small").getResource();
         defPL2.title = tr("Potlatch 2");
         defPL2.description = tr("the main Potlatch 2 style");
@@ -97,7 +99,5 @@
     @Override
     public Map<String, String> serialize(SourceEntry entry) {
-        Map<String, String> res = new HashMap<>();
-        res.put("url", entry.url == null ? "" : entry.url);
-        res.put("title", entry.title == null ? "" : entry.title);
+        Map<String, String> res = super.serialize(entry);
         res.put("active", Boolean.toString(entry.active));
         if (entry.name != null) {
Index: trunk/src/org/openstreetmap/josm/data/preferences/sources/PresetPrefHelper.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/preferences/sources/PresetPrefHelper.java	(revision 15210)
+++ trunk/src/org/openstreetmap/josm/data/preferences/sources/PresetPrefHelper.java	(revision 15211)
@@ -6,6 +6,6 @@
 import java.util.Collection;
 import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
+
+import org.openstreetmap.josm.tools.ImageProvider;
 
 /**
@@ -31,19 +31,7 @@
         ExtendedSourceEntry i = new ExtendedSourceEntry(type, "defaultpresets.xml", "resource://data/defaultpresets.xml");
         i.title = tr("Internal Preset");
+        i.icon = new ImageProvider("logo").getResource();
         i.description = tr("The default preset for JOSM");
         return Collections.singletonList(i);
     }
-
-    @Override
-    public Map<String, String> serialize(SourceEntry entry) {
-        Map<String, String> res = new HashMap<>();
-        res.put("url", entry.url);
-        res.put("title", entry.title == null ? "" : entry.title);
-        return res;
-    }
-
-    @Override
-    public SourceEntry deserialize(Map<String, String> s) {
-        return new SourceEntry(type, s.get("url"), null, s.get("title"), true);
-    }
 }
Index: trunk/src/org/openstreetmap/josm/data/preferences/sources/SourcePrefHelper.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/preferences/sources/SourcePrefHelper.java	(revision 15210)
+++ trunk/src/org/openstreetmap/josm/data/preferences/sources/SourcePrefHelper.java	(revision 15211)
@@ -8,4 +8,5 @@
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.Set;
 import java.util.stream.Collectors;
@@ -44,5 +45,10 @@
      * @return map (key=value)
      */
-    public abstract Map<String, String> serialize(SourceEntry entry);
+    public Map<String, String> serialize(SourceEntry entry) {
+        Map<String, String> res = new HashMap<>();
+        res.put("url", entry.url);
+        res.put("title", entry.title == null ? "" : entry.title);
+        return res;
+    }
 
     /**
@@ -51,5 +57,11 @@
      * @return source entry
      */
-    public abstract SourceEntry deserialize(Map<String, String> entryStr);
+    public SourceEntry deserialize(Map<String, String> entryStr) {
+        return new SourceEntry(type,
+                entryStr.get("url"),
+                entryStr.get("name"),
+                entryStr.get("title"),
+                Optional.ofNullable(entryStr.get("active")).map(Boolean::parseBoolean).orElse(true));
+    }
 
     /**
Index: trunk/src/org/openstreetmap/josm/data/preferences/sources/ValidatorPrefHelper.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/preferences/sources/ValidatorPrefHelper.java	(revision 15210)
+++ trunk/src/org/openstreetmap/josm/data/preferences/sources/ValidatorPrefHelper.java	(revision 15211)
@@ -6,5 +6,4 @@
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -12,4 +11,5 @@
 import org.openstreetmap.josm.data.preferences.BooleanProperty;
 import org.openstreetmap.josm.data.validation.tests.MapCSSTagChecker;
+import org.openstreetmap.josm.tools.ImageProvider;
 
 /**
@@ -86,4 +86,5 @@
         ExtendedSourceEntry i = new ExtendedSourceEntry(type, filename+".mapcss", "resource://data/validator/"+filename+".mapcss");
         i.title = title;
+        i.icon = new ImageProvider("logo").getResource();
         i.description = description;
         defaults.add(i);
@@ -92,14 +93,7 @@
     @Override
     public Map<String, String> serialize(SourceEntry entry) {
-        Map<String, String> res = new HashMap<>();
-        res.put("url", entry.url);
-        res.put("title", entry.title == null ? "" : entry.title);
+        Map<String, String> res = super.serialize(entry);
         res.put("active", Boolean.toString(entry.active));
         return res;
     }
-
-    @Override
-    public SourceEntry deserialize(Map<String, String> s) {
-        return new SourceEntry(type, s.get("url"), null, s.get("title"), Boolean.parseBoolean(s.get("active")));
-    }
 }
Index: trunk/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java	(revision 15210)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java	(revision 15211)
@@ -3,6 +3,8 @@
 
 import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
+import static org.openstreetmap.josm.tools.I18n.marktr;
 import static org.openstreetmap.josm.tools.I18n.tr;
 
+import java.awt.Color;
 import java.awt.Component;
 import java.awt.Dimension;
@@ -42,5 +44,4 @@
 import javax.swing.DefaultListModel;
 import javax.swing.DefaultListSelectionModel;
-import javax.swing.ImageIcon;
 import javax.swing.JButton;
 import javax.swing.JCheckBox;
@@ -58,4 +59,5 @@
 import javax.swing.ListCellRenderer;
 import javax.swing.ListSelectionModel;
+import javax.swing.UIManager;
 import javax.swing.event.CellEditorListener;
 import javax.swing.event.ChangeEvent;
@@ -74,4 +76,5 @@
 import org.openstreetmap.josm.actions.ExtensionFileFilter;
 import org.openstreetmap.josm.data.Version;
+import org.openstreetmap.josm.data.preferences.NamedColorProperty;
 import org.openstreetmap.josm.data.preferences.sources.ExtendedSourceEntry;
 import org.openstreetmap.josm.data.preferences.sources.SourceEntry;
@@ -1353,6 +1356,11 @@
     static class SourceEntryListCellRenderer extends JLabel implements ListCellRenderer<ExtendedSourceEntry> {
 
-        private final ImageIcon GREEN_CHECK = ImageProvider.getIfAvailable("misc", "green_check");
-        private final ImageIcon GRAY_CHECK = ImageProvider.getIfAvailable("misc", "gray_check");
+        private static final NamedColorProperty SOURCE_ENTRY_ACTIVE_BACKGROUND_COLOR = new NamedColorProperty(
+                marktr("External resource entry: Active"),
+                new Color(200, 255, 200));
+        private static final NamedColorProperty SOURCE_ENTRY_INACTIVE_BACKGROUND_COLOR = new NamedColorProperty(
+                marktr("External resource entry: Inactive"),
+                new Color(200, 200, 200));
+
         private final Map<String, SourceEntry> entryByUrl = new HashMap<>();
 
@@ -1374,6 +1382,11 @@
             setOpaque(true);
             setToolTipText(value.getTooltip());
-            final SourceEntry sourceEntry = entryByUrl.get(value.url);
-            setIcon(sourceEntry == null ? null : sourceEntry.active ? GREEN_CHECK : GRAY_CHECK);
+            if (!isSelected) {
+                final SourceEntry sourceEntry = entryByUrl.get(value.url);
+                GuiHelper.setBackgroundReadable(this, sourceEntry == null ? UIManager.getColor("Table.background") :
+                    sourceEntry.active ? SOURCE_ENTRY_ACTIVE_BACKGROUND_COLOR.get() : SOURCE_ENTRY_INACTIVE_BACKGROUND_COLOR.get());
+            }
+            final ImageSizes size = ImageSizes.TABLE;
+            setIcon(value.icon == null ? ImageProvider.getEmpty(size) : value.icon.getImageIcon(size.getImageDimension()));
             return this;
         }
@@ -1475,4 +1488,6 @@
                             } else if ("version".equals(key)) {
                                 last.version = value;
+                            } else if ("icon".equals(key) && last.icon == null) {
+                                last.icon = new ImageProvider(value).setOptional(true).getResource();
                             } else if ("link".equals(key) && last.link == null) {
                                 last.link = value;
