Index: /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/PTAssistantPlugin.java
===================================================================
--- /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/PTAssistantPlugin.java	(revision 33460)
+++ /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/PTAssistantPlugin.java	(revision 33461)
@@ -18,4 +18,5 @@
 import org.openstreetmap.josm.plugins.PluginInformation;
 import org.openstreetmap.josm.plugins.pt_assistant.actions.AddStopPositionAction;
+import org.openstreetmap.josm.plugins.pt_assistant.actions.CreatePlatformNodeAction;
 import org.openstreetmap.josm.plugins.pt_assistant.actions.EdgeSelectionAction;
 import org.openstreetmap.josm.plugins.pt_assistant.actions.EditHighlightedRelationsAction;
@@ -68,4 +69,5 @@
         MainMenu.add(Main.main.menu.toolsMenu, new SplitRoundaboutAction());
         MainMenu.add(Main.main.menu.toolsMenu, new SortPTStopsAction());
+        MainMenu.add(Main.main.menu.toolsMenu, new CreatePlatformNodeAction());
     }
 
Index: /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/actions/CreatePlatformNodeAction.java
===================================================================
--- /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/actions/CreatePlatformNodeAction.java	(revision 33460)
+++ /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/actions/CreatePlatformNodeAction.java	(revision 33461)
@@ -4,17 +4,23 @@
 
 import java.awt.event.ActionEvent;
+import java.util.ArrayList;
 import java.util.Collection;
-import java.util.HashMap;
+import java.util.Collections;
 import java.util.List;
-import java.util.Map;
 import java.util.Map.Entry;
 
+import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.JosmAction;
+import org.openstreetmap.josm.command.AddCommand;
+import org.openstreetmap.josm.command.Command;
+import org.openstreetmap.josm.command.DeleteCommand;
+import org.openstreetmap.josm.command.SequenceCommand;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
-import org.openstreetmap.josm.data.osm.Relation;
+import org.openstreetmap.josm.data.osm.TagCollection;
 import org.openstreetmap.josm.data.osm.Way;
-import org.openstreetmap.josm.plugins.pt_assistant.utils.RouteUtils;
+import org.openstreetmap.josm.gui.conflict.tags.CombinePrimitiveResolverDialog;
+import org.openstreetmap.josm.tools.UserCancelException;
 
 /**
@@ -27,4 +33,8 @@
 
     private static final String ACTION_NAME = "Transfer details of stop to platform node";
+
+    private Node dummy1;
+    private Node dummy2;
+    private Node dummy3;
 
     /**
@@ -39,39 +49,95 @@
         Collection<OsmPrimitive> selection = getLayerManager().getEditDataSet().getSelected();
         Node platformNode = null;
-        Node stopPostionNode = null;
-        Way  platformWay = null;
-        Map<String, List<String>> tagsToCompare = new HashMap<>();
+        Node stopPositionNode = null;
+        Way platformWay = null;
+
         for (OsmPrimitive item: selection) {
-            if (item.getType() == OsmPrimitiveType.NODE &&
-                    (item.hasTag("amenity", "shelter") || item.hasTag("public_transport", "pole"))) {
-                platformNode = (Node) item;
-            }
-            if (item.getType() == OsmPrimitiveType.NODE &&
-                    item.hasTag("public_transport", "stop_position")) {
-                stopPostionNode = (Node) item;
-                }
-            if (item.getType() == OsmPrimitiveType.WAY &&
+            if (item.getType() == OsmPrimitiveType.NODE) {
+                if (item.hasTag("public_transport", "stop_position"))
+                    stopPositionNode = (Node) item;
+                else
+                    platformNode = (Node) item;
+            } else if (item.getType() == OsmPrimitiveType.WAY &&
                     item.hasTag("public_transport", "platform")) {
                 platformWay = (Way) item;
             }
         }
-        if (platformNode == null && stopPostionNode == null && platformWay == null) {
+
+        if (platformNode == null || stopPositionNode == null) {
             return;
         }
-    }
-    public void populateMap(OsmPrimitive prim, Map<String, List<String>> tagsToCompare) {
-        for ( Entry<String, String> tag: prim.getKeys().entrySet()) {
-            //tagsToCompare.put(tag.getKey(), tag.getValue());
+
+        dummy1 = new Node(platformNode.getEastNorth());
+        dummy2 = new Node(platformNode.getEastNorth());
+        dummy3 = new Node(platformNode.getEastNorth());
+
+        Main.main.undoRedo.add(new AddCommand(dummy1));
+        Main.main.undoRedo.add(new AddCommand(dummy2));
+        Main.main.undoRedo.add(new AddCommand(dummy3));
+
+        populateMap(stopPositionNode);
+        populateMap(platformNode);
+
+        if (platformWay != null) {
+            populateMap(platformWay);
+            platformWay.removeAll();
+            platformWay.put("public_transport", "platform");
+            platformWay.put(" highway", "platform");
+        }
+
+        stopPositionNode.removeAll();
+        stopPositionNode.put("bus", "yes");
+        stopPositionNode.put("public_transport", "stop_position");
+
+        platformNode.removeAll();
+        platformNode.put("public_transport", "platform");
+        platformNode.put("highway", "bus_stop");
+
+        List<OsmPrimitive> prims = new ArrayList<>();
+        prims.add(platformNode);
+        prims.add(dummy1);
+        prims.add(dummy2);
+        prims.add(dummy3);
+
+        try {
+            TagCollection tagColl = TagCollection.unionOfAllPrimitives(prims);
+            List<Command> cmds = CombinePrimitiveResolverDialog.launchIfNecessary(
+                    tagColl, prims, Collections.singleton(platformNode));
+            Main.main.undoRedo.add(new SequenceCommand("merging", cmds));
+        } catch (UserCancelException ex) {
+            Main.trace(ex);
+        } finally {
+            Main.main.undoRedo.add(new DeleteCommand(dummy1));
+            Main.main.undoRedo.add(new DeleteCommand(dummy2));
+            Main.main.undoRedo.add(new DeleteCommand(dummy3));
         }
     }
+
+    public void populateMap(OsmPrimitive prim) {
+        List<String> unInterestingTags = new ArrayList<>();
+        unInterestingTags.add("public_transport");
+        unInterestingTags.add("highway");
+        unInterestingTags.add("source");
+
+        for (Entry<String, String> tag: prim.getKeys().entrySet()) {
+            if (unInterestingTags.contains(tag.getKey())) {
+                continue;
+            }
+            if (dummy1.get(tag.getKey()) == null) {
+                dummy1.put(tag.getKey(), tag.getValue());
+            } else if (dummy2.get(tag.getKey()) == null) {
+                dummy2.put(tag.getKey(), tag.getValue());
+            } else if (dummy3.get(tag.getKey()) == null) {
+                dummy3.put(tag.getKey(), tag.getValue());
+            }
+        }
+    }
+
     @Override
     protected void updateEnabledState(
             Collection<? extends OsmPrimitive> selection) {
         setEnabled(false);
-        if (selection == null || selection.size() != 1)
-            return;
-        OsmPrimitive selected = selection.iterator().next();
-        if (selected.getType() == OsmPrimitiveType.RELATION &&
-                RouteUtils.isPTRoute((Relation) selected)) {
+
+        if (selection.size() > 1) {
             setEnabled(true);
         }
