Index: trunk/test/unit/org/openstreetmap/josm/actions/SimplifyWayActionTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/actions/SimplifyWayActionTest.java	(revision 15428)
+++ trunk/test/unit/org/openstreetmap/josm/actions/SimplifyWayActionTest.java	(revision 15431)
@@ -4,8 +4,14 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
 
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -13,4 +19,5 @@
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.command.DeleteCommand;
 import org.openstreetmap.josm.command.SequenceCommand;
@@ -20,5 +27,6 @@
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.gui.MainApplication;
-import org.openstreetmap.josm.gui.layer.OsmDataLayer;
+import org.openstreetmap.josm.io.IllegalDataException;
+import org.openstreetmap.josm.io.OsmReader;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 import org.openstreetmap.josm.tools.Utils;
@@ -52,67 +60,30 @@
     }
 
-    private static Way createWaySelected(DataSet ds, double latStart) {
-        Node n1 = new Node(new LatLon(latStart, 1.0));
-        ds.addPrimitive(n1);
-        Node n2 = new Node(new LatLon(latStart+1.0, 1.0));
-        ds.addPrimitive(n2);
-        Way w = new Way();
-        w.addNode(n1);
-        w.addNode(n2);
-        ds.addPrimitive(w);
-        ds.addSelected(w);
-        return w;
+    private DataSet getDs(String file) throws IllegalDataException, IOException {
+        return OsmReader.parseDataSet(Files.newInputStream(Paths.get(TestUtils.getTestDataRoot(), "tracks/" + file + ".osm")), null);
     }
 
     /**
-     * Test without any selection.
+     * Tests simplification
+     * @throws IOException
+     * @throws IllegalDataException
      */
     @Test
-    public void testSelectionEmpty() {
-        DataSet ds = new DataSet();
-        OsmDataLayer layer = new OsmDataLayer(ds, "", null);
-        try {
-            MainApplication.getLayerManager().addLayer(layer);
-            assertTrue(ds.getSelected().isEmpty());
-            action.actionPerformed(null);
-        } finally {
-            MainApplication.getLayerManager().removeLayer(layer);
-        }
-    }
-
-    /**
-     * Test with a single way.
-     */
-    @Test
-    public void testSingleWay() {
-        DataSet ds = new DataSet();
-        createWaySelected(ds, 0.0);
-        OsmDataLayer layer = new OsmDataLayer(ds, "", null);
-        try {
-            MainApplication.getLayerManager().addLayer(layer);
-            assertEquals(1, ds.getSelected().size());
-            action.actionPerformed(null);
-        } finally {
-            MainApplication.getLayerManager().removeLayer(layer);
-        }
-    }
-
-    /**
-     * Test with more than 10 ways.
-     */
-    @Test
-    public void testMoreThanTenWays() {
-        DataSet ds = new DataSet();
-        for (int i = 0; i < 11; i++) {
-            createWaySelected(ds, i);
-        }
-        OsmDataLayer layer = new OsmDataLayer(ds, "", null);
-        try {
-            MainApplication.getLayerManager().addLayer(layer);
-            assertEquals(11, ds.getSelected().size());
-            action.actionPerformed(null);
-        } finally {
-            MainApplication.getLayerManager().removeLayer(layer);
-        }
+    public void testSimplify() throws IllegalDataException, IOException {
+        DataSet DsSimplify = getDs("tracks");
+        DataSet DsExpected = getDs("tracks-simplify15");
+        SimplifyWayAction.simplifyWays(new ArrayList<>(DsSimplify.getWays()), 15);
+        DsSimplify.cleanupDeletedPrimitives();
+        //compare sorted Coordinates and total amount of primitives, because IDs and order will vary after reload
+        List<LatLon> CoorSimplify = DsSimplify.getNodes().stream()
+                .map(Node::getCoor)
+                .sorted(Comparator.comparing(LatLon::hashCode))
+                .collect(Collectors.toList());
+        List<LatLon> CoorExpected = DsExpected.getNodes().stream()
+                .map(Node::getCoor)
+                .sorted(Comparator.comparing(LatLon::hashCode))
+                .collect(Collectors.toList());
+        assertEquals(CoorExpected, CoorSimplify);
+        assertEquals(DsExpected.allPrimitives().size(), DsSimplify.allPrimitives().size());
     }
 
Index: trunk/test/unit/org/openstreetmap/josm/data/gpx/GpxImageCorrelationTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/data/gpx/GpxImageCorrelationTest.java	(revision 15428)
+++ trunk/test/unit/org/openstreetmap/josm/data/gpx/GpxImageCorrelationTest.java	(revision 15431)
@@ -52,5 +52,5 @@
     public void testMatchGpxTrack() throws Exception {
         IPreferences s = Config.getPref();
-        final GpxData gpx = GpxReaderTest.parseGpxData(TestUtils.getTestDataRoot() + "ImageCorrelationTest.gpx");
+        final GpxData gpx = GpxReaderTest.parseGpxData(TestUtils.getTestDataRoot() + "tracks/tracks.gpx");
         assertEquals(5, gpx.tracks.size());
         assertEquals(1, gpx.tracks.iterator().next().getSegments().size());
Index: trunk/test/unit/org/openstreetmap/josm/gui/layer/gpx/ConvertToDataLayerActionTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/gui/layer/gpx/ConvertToDataLayerActionTest.java	(revision 15428)
+++ trunk/test/unit/org/openstreetmap/josm/gui/layer/gpx/ConvertToDataLayerActionTest.java	(revision 15431)
@@ -6,13 +6,27 @@
 
 import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 import org.junit.Rule;
 import org.junit.Test;
 import org.openstreetmap.josm.TestUtils;
+import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.gpx.GpxData;
 import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.TagMap;
+import org.openstreetmap.josm.gui.layer.GpxLayer;
 import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer;
 import org.openstreetmap.josm.io.GpxReaderTest;
+import org.openstreetmap.josm.io.IllegalDataException;
+import org.openstreetmap.josm.io.OsmReader;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 import org.xml.sax.SAXException;
@@ -47,4 +61,69 @@
 
     /**
+     * Tests conversions from GPX tracks to OSM datasets
+     * @throws Exception if the parsing fails
+     */
+    @Test
+    public void testFromTrack() throws Exception {
+        Config.getPref().put("gpx.convert-tags", "no");
+        testFromTrack("tracks");
+
+        Config.getPref().put("gpx.convert-tags", "yes");
+        testFromTrack("tracks-ele-time");
+
+        Config.getPref().put("gpx.convert-tags", "list");
+        Config.getPref().putList("gpx.convert-tags.list.yes", Arrays.asList("ele"));
+        Config.getPref().putList("gpx.convert-tags.list.no", Arrays.asList("time"));
+        testFromTrack("tracks-ele");
+
+
+        Config.getPref().putList("gpx.convert-tags.list.yes", Arrays.asList("time"));
+        Config.getPref().putList("gpx.convert-tags.list.no", Arrays.asList("ele"));
+        testFromTrack("tracks-time");
+    }
+
+    private class genericNode {
+        public genericNode(Node n) {
+            coor = n.getCoor().getRoundedToOsmPrecision();
+            tags = n.getKeys();
+        }
+        public LatLon coor;
+        public Map<String, String> tags;
+        @Override
+        public boolean equals(Object obj) {
+            if (!(obj instanceof genericNode)) {
+                return false;
+            }
+            genericNode other = (genericNode) obj;
+            return coor.equals(other.coor) && tags.equals(other.tags);
+        }
+        @Override
+        public int hashCode() {
+            return Objects.hash(coor, tags);
+        }
+    }
+
+    private void testFromTrack(String expected) throws IOException, SAXException, IllegalDataException {
+        final GpxData data = GpxReaderTest.parseGpxData(TestUtils.getTestDataRoot() + "tracks/tracks.gpx");
+        final DataSet osmExpected = OsmReader.parseDataSet(Files.newInputStream(Paths.get(TestUtils.getTestDataRoot(), "tracks/" + expected + ".osm")), null);
+        final GpxLayer layer = new GpxLayer(data);
+        final DataSet osm = new ConvertFromGpxLayerAction(layer).convert();
+        //compare sorted coordinates/tags and total amount of primitives, because IDs and order will vary after reload
+
+        List<genericNode> nodes = osm.getNodes().stream()
+                .map(genericNode::new)
+                .sorted(Comparator.comparing(g -> g.coor.hashCode()))
+                .collect(Collectors.toList());
+
+        List<genericNode> nodesExpected = osmExpected.getNodes().stream()
+                .map(genericNode::new)
+                .sorted(Comparator.comparing(g -> g.coor.hashCode()))
+                .collect(Collectors.toList());
+
+        assertEquals(nodesExpected, nodes);
+        assertEquals(osmExpected.allPrimitives().size(), osm.allPrimitives().size());
+    }
+
+    /**
      * Non-regression test for ticket <a href="https://josm.openstreetmap.de/ticket/14275">#14275</a>
      * @throws IOException if an error occurs during reading
