Index: trunk/src/org/openstreetmap/josm/tools/Tag2Link.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/Tag2Link.java	(revision 17734)
+++ trunk/src/org/openstreetmap/josm/tools/Tag2Link.java	(revision 17735)
@@ -14,4 +14,5 @@
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Optional;
 import java.util.function.Supplier;
@@ -160,20 +161,25 @@
 
         // Common
-        final String validURL = value.startsWith("http:") || value.startsWith("https:")
-                ? value
-                : value.startsWith("www.")
-                ? "http://" + value
-                : null;
-        if (key.matches("^(.+[:_])?website([:_].+)?$") && validURL != null) {
-            linkConsumer.acceptLink(getLinkName(validURL, key), validURL, imageResource.get());
-        }
-        if (key.matches("^(.+[:_])?source([:_].+)?$") && validURL != null) {
-            linkConsumer.acceptLink(getLinkName(validURL, key), validURL, imageResource.get());
-        }
-        if (key.matches("^(.+[:_])?url([:_].+)?$") && validURL != null) {
-            linkConsumer.acceptLink(getLinkName(validURL, key), validURL, imageResource.get());
-        }
-        if (key.matches("image") && validURL != null) {
-            linkConsumer.acceptLink(tr("View image"), validURL, imageResource.get());
+        final List<String> validURLs = value.startsWith("http:") || value.startsWith("https:") || value.startsWith("www.")
+                ? OsmUtils.splitMultipleValues(value)
+                .map(v -> v.startsWith("http:") || v.startsWith("https:")
+                        ? v
+                        : v.startsWith("www.")
+                        ? "http://" + v
+                        : null)
+                .filter(Objects::nonNull)
+                .collect(Collectors.toList())
+                : Collections.emptyList();
+        if (key.matches("^(.+[:_])?website([:_].+)?$") && !validURLs.isEmpty()) {
+            validURLs.forEach(validURL -> linkConsumer.acceptLink(getLinkName(validURL, key), validURL, imageResource.get()));
+        }
+        if (key.matches("^(.+[:_])?source([:_].+)?$") && !validURLs.isEmpty()) {
+            validURLs.forEach(validURL -> linkConsumer.acceptLink(getLinkName(validURL, key), validURL, imageResource.get()));
+        }
+        if (key.matches("^(.+[:_])?url([:_].+)?$") && !validURLs.isEmpty()) {
+            validURLs.forEach(validURL -> linkConsumer.acceptLink(getLinkName(validURL, key), validURL, imageResource.get()));
+        }
+        if (key.matches("image") && !validURLs.isEmpty()) {
+            validURLs.forEach(validURL -> linkConsumer.acceptLink(tr("View image"), validURL, imageResource.get()));
         }
 
Index: trunk/test/unit/org/openstreetmap/josm/tools/Tag2LinkTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/tools/Tag2LinkTest.java	(revision 17734)
+++ trunk/test/unit/org/openstreetmap/josm/tools/Tag2LinkTest.java	(revision 17735)
@@ -123,3 +123,16 @@
     }
 
+    /**
+     * Unit test of function {@link Tag2Link#getLinksForTag}.
+     *
+     * Non-regression test for https://josm.openstreetmap.de/ticket/19754#comment:9
+     */
+    @Test
+    void testMultipleSources() {
+        Tag2Link.getLinksForTag("source", "https://foo.com/; https://bar.com/; https://baz.com/", this::addLink);
+        checkLinks("Open foo.com // https://foo.com/",
+                "Open bar.com // https://bar.com/",
+                "Open baz.com // https://baz.com/");
+    }
+
 }
