Index: trunk/test/unit/org/openstreetmap/josm/tools/TextTagParserTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/tools/TextTagParserTest.java	(revision 13520)
+++ trunk/test/unit/org/openstreetmap/josm/tools/TextTagParserTest.java	(revision 13541)
@@ -1,4 +1,6 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.tools;
+
+import static org.junit.Assert.assertEquals;
 
 import java.util.Collections;
@@ -6,5 +8,4 @@
 import java.util.Map;
 
-import org.junit.Assert;
 import org.junit.Rule;
 import org.junit.Test;
@@ -32,17 +33,17 @@
         s = "\"2 3 4\"";
         s1 = "2 3 4";
-        Assert.assertEquals(s1, TextTagParser.unescape(s));
+        assertEquals(s1, TextTagParser.unescape(s));
 
         s = "\"2 \\\"3\\\" 4\"";
         s1 = "2 \"3\" 4";
-        Assert.assertEquals(s1, TextTagParser.unescape(s));
+        assertEquals(s1, TextTagParser.unescape(s));
 
         s = "\"2 3 ===4===\"";
         s1 = "2 3 ===4===";
-        Assert.assertEquals(s1, TextTagParser.unescape(s));
+        assertEquals(s1, TextTagParser.unescape(s));
 
         s = "\"2 3 \\\\\\\\===4===\"";
         s1 = "2 3 \\\\===4===";
-        Assert.assertEquals(s1, TextTagParser.unescape(s));
+        assertEquals(s1, TextTagParser.unescape(s));
     }
 
@@ -57,5 +58,5 @@
         } };
         Map<String, String> tags = TextTagParser.readTagsFromText(txt);
-        Assert.assertEquals(correctTags, tags);
+        assertEquals(correctTags, tags);
     }
 
@@ -71,5 +72,5 @@
         } };
         Map<String, String> tags = TextTagParser.readTagsFromText(txt);
-        Assert.assertEquals(correctTags, tags);
+        assertEquals(correctTags, tags);
     }
 
@@ -84,15 +85,15 @@
         correctTags = new HashMap<String, String>() { { put("a", "1"); put("b", "2 3 4"); } };
         tags = TextTagParser.readTagsFromText(txt);
-        Assert.assertEquals(correctTags, tags);
+        assertEquals(correctTags, tags);
 
         txt = "\"a\"  :     \"1 1 1\", \"b2\"  :\"2 \\\"3 qwe\\\" 4\"";
         correctTags = new HashMap<String, String>() { { put("a", "1 1 1"); put("b2", "2 \"3 qwe\" 4"); } };
         tags = TextTagParser.readTagsFromText(txt);
-        Assert.assertEquals(correctTags, tags);
+        assertEquals(correctTags, tags);
 
         txt = " \"aыыы\"   :    \"val\\\"\\\"\\\"ue1\"";
         correctTags = new HashMap<String, String>() { { put("aыыы", "val\"\"\"ue1"); } };
         tags = TextTagParser.readTagsFromText(txt);
-        Assert.assertEquals(correctTags, tags);
+        assertEquals(correctTags, tags);
     }
 
@@ -107,5 +108,5 @@
         } };
         Map<String, String> tags = TextTagParser.readTagsFromText(txt);
-        Assert.assertEquals(correctTags, tags);
+        assertEquals(correctTags, tags);
     }
 
@@ -117,5 +118,5 @@
         String txt = "a=2 b=3 4";
         Map<String, String> tags = TextTagParser.readTagsFromText(txt);
-        Assert.assertEquals(Collections.EMPTY_MAP, tags);
+        assertEquals(Collections.EMPTY_MAP, tags);
     }
 
@@ -125,8 +126,39 @@
     @Test
     public void testTab() {
-        Assert.assertEquals(TextTagParser.readTagsFromText("shop\tjewelry"), Collections.singletonMap("shop", "jewelry"));
-        Assert.assertEquals(TextTagParser.readTagsFromText("!shop\tjewelry"), Collections.singletonMap("shop", "jewelry"));
-        Assert.assertEquals(TextTagParser.readTagsFromText("!!!shop\tjewelry"), Collections.singletonMap("shop", "jewelry"));
-        Assert.assertEquals(TextTagParser.readTagsFromText("shop\t\t\tjewelry"), Collections.singletonMap("shop", "jewelry"));
+        assertEquals(Collections.singletonMap("shop", "jewelry"), TextTagParser.readTagsFromText("shop\tjewelry"));
+        assertEquals(Collections.singletonMap("shop", "jewelry"), TextTagParser.readTagsFromText("!shop\tjewelry"));
+        assertEquals(Collections.singletonMap("shop", "jewelry"), TextTagParser.readTagsFromText("!!!shop\tjewelry"));
+        assertEquals(Collections.singletonMap("shop", "jewelry"), TextTagParser.readTagsFromText("shop\t\t\tjewelry"));
+    }
+
+    /**
+     * Non-regression test for ticket <a href="https://josm.openstreetmap.de/ticket/16104">#16104</a>
+     */
+    @Test
+    public void testTicket16104() {
+        Map<String, String> expected = new HashMap<>();
+        expected.put("boundary", "national_park");
+        expected.put("name", "Raet nasjonalpark");
+        expected.put("naturbase:iid", "VV00003273");
+        expected.put("naturbase:verneform", "NP");
+        expected.put("operator", "Raet Nasjonalparkstyre");
+        expected.put("protect_class", "2");
+        expected.put("related_law", "https://lovdata.no/forskrift/2016-12-16-1632");
+        expected.put("short_name", "Raet");
+        expected.put("start_date", "2016-12-16");
+        expected.put("type", "boundary");
+        expected.put("url", "http://faktaark.naturbase.no/?id=VV00003273");
+        assertEquals(expected, TextTagParser.readTagsFromText(
+                "boundary=national_park\n" +
+                "name=Raet nasjonalpark\n" +
+                "naturbase:iid=VV00003273\n" +
+                "naturbase:verneform=NP\n" +
+                "operator=Raet Nasjonalparkstyre\n" +
+                "protect_class=2\n" +
+                "related_law=https://lovdata.no/forskrift/2016-12-16-1632\n" +
+                "short_name=Raet\n" +
+                "start_date=2016-12-16\n" +
+                "type=boundary\n" +
+                "url=http://faktaark.naturbase.no/?id=VV00003273"));
     }
 }
