Index: trunk/src/org/openstreetmap/josm/gui/layer/gpx/ConvertToDataLayerAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/gpx/ConvertToDataLayerAction.java	(revision 11088)
+++ trunk/src/org/openstreetmap/josm/gui/layer/gpx/ConvertToDataLayerAction.java	(revision 11089)
@@ -9,5 +9,9 @@
 import java.io.File;
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Iterator;
 import java.util.List;
+import java.util.Optional;
 
 import javax.swing.AbstractAction;
@@ -33,4 +37,5 @@
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageProvider;
+import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.date.DateUtils;
 
@@ -103,5 +108,18 @@
             for (Marker marker : layer.data) {
                 final Node node = new Node(marker.getCoor());
-                node.put("name", marker.getText());
+                final Collection<String> mapping = Main.pref.getCollection("gpx.to-osm-mapping",
+                        Arrays.asList("name", "name", "desc", "description", "cmt", "note", "sym", "gpxicon"));
+                if (mapping.size() % 2 == 0) {
+                    final Iterator<String> it = mapping.iterator();
+                    while (it.hasNext()) {
+                        final String gpxKey = it.next();
+                        final String osmKey = it.next();
+                        Optional.ofNullable(marker.getTemplateValue(gpxKey, false))
+                                .map(String::valueOf)
+                                .ifPresent(s -> node.put(osmKey, s));
+                    }
+                } else {
+                    Logging.warn("Invalid gpx.to-osm-mapping Einstein setting: expecting even number of entries");
+                }
                 ds.addPrimitive(node);
             }
Index: trunk/test/unit/org/openstreetmap/josm/gui/layer/gpx/ConvertToDataLayerActionTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/gui/layer/gpx/ConvertToDataLayerActionTest.java	(revision 11089)
+++ trunk/test/unit/org/openstreetmap/josm/gui/layer/gpx/ConvertToDataLayerActionTest.java	(revision 11089)
@@ -0,0 +1,42 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.layer.gpx;
+
+import static org.testng.Assert.assertEquals;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.openstreetmap.josm.JOSMFixture;
+import org.openstreetmap.josm.TestUtils;
+import org.openstreetmap.josm.data.gpx.GpxData;
+import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.data.osm.TagMap;
+import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer;
+import org.openstreetmap.josm.io.GpxReaderTest;
+
+/**
+ * Unit tests of {@link ConvertToDataLayerAction} class.
+ */
+public class ConvertToDataLayerActionTest {
+
+    /**
+     * Setup test.
+     */
+    @BeforeClass
+    public static void setUpBeforeClass() {
+        JOSMFixture.createUnitTestFixture().init(false);
+    }
+
+    /**
+     * Tests a conversion from a GPX marker layer to a OSM dataset
+     * @throws Exception if the parsing fails
+     */
+    @Test
+    public void testFromMarkerLayer() throws Exception {
+        final GpxData data = GpxReaderTest.parseGpxData(TestUtils.getTestDataRoot() + "minimal.gpx");
+        final MarkerLayer markers = new MarkerLayer(data, "Markers", data.storageFile, null);
+        final DataSet osm = new ConvertToDataLayerAction.FromMarkerLayer(markers).convert();
+        assertEquals(1, osm.getNodes().size());
+        assertEquals(new TagMap("name", "Schranke", "description", "Pfad", "note", "Pfad", "gpxicon", "Toll Booth"),
+                osm.getNodes().iterator().next().getKeys());
+    }
+}
