Index: /applications/editors/josm/plugins/remotecontrol/src/org/openstreetmap/josm/plugins/remotecontrol/RemoteControlPreferences.java
===================================================================
--- /applications/editors/josm/plugins/remotecontrol/src/org/openstreetmap/josm/plugins/remotecontrol/RemoteControlPreferences.java	(revision 17589)
+++ /applications/editors/josm/plugins/remotecontrol/src/org/openstreetmap/josm/plugins/remotecontrol/RemoteControlPreferences.java	(revision 17590)
@@ -25,4 +25,5 @@
 {
     private JCheckBox permissionLoadData = new JCheckBox(tr("load data from API"));
+    private JCheckBox permissionCreateObjects = new JCheckBox(tr("create new objects"));
     private JCheckBox permissionChangeSelection = new JCheckBox(tr("change the selection"));
     private JCheckBox permissionChangeViewport = new JCheckBox(tr("change the viewport"));
@@ -51,4 +52,5 @@
         permissionChangeSelection.setSelected(Main.pref.getBoolean("remotecontrol.permission.change-selection", true));
         permissionChangeViewport.setSelected(Main.pref.getBoolean("remotecontrol.permission.change-viewport", true));
+        permissionCreateObjects.setSelected(Main.pref.getBoolean("remotecontrol.permission.create-objects", true));
         alwaysAskUserConfirm.setSelected(Main.pref.getBoolean("remotecontrol.always-confirm", false));
 
@@ -59,4 +61,5 @@
         Main.pref.put("remotecontrol.permission.change-selection", permissionChangeSelection.isSelected());
         Main.pref.put("remotecontrol.permission.change-viewport", permissionChangeViewport.isSelected());
+        Main.pref.put("remotecontrol.permission.create-objects", permissionCreateObjects.isSelected());
         Main.pref.put("remotecontrol.always-confirm", alwaysAskUserConfirm.isSelected());
         // FIXME confirm return value - really no restart needed?
Index: /applications/editors/josm/plugins/remotecontrol/src/org/openstreetmap/josm/plugins/remotecontrol/RequestProcessor.java
===================================================================
--- /applications/editors/josm/plugins/remotecontrol/src/org/openstreetmap/josm/plugins/remotecontrol/RequestProcessor.java	(revision 17589)
+++ /applications/editors/josm/plugins/remotecontrol/src/org/openstreetmap/josm/plugins/remotecontrol/RequestProcessor.java	(revision 17590)
@@ -25,4 +25,5 @@
 import org.openstreetmap.josm.actions.AutoScaleAction;
 import org.openstreetmap.josm.actions.downloadtasks.DownloadOsmTask;
+import org.openstreetmap.josm.command.AddCommand;
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.coor.LatLon;
@@ -216,4 +217,20 @@
                     });
                 }
+            } else if (command.equals("/add_node")) {
+                if (!Main.pref.getBoolean("remotecontrol.permission.create-objects", true)) {
+                    sendForbidden(out);
+                    return;
+                }
+                if (Main.pref.getBoolean("remotecontrol.always-confirm", false)) {
+                    if (JOptionPane.showConfirmDialog(Main.parent,
+                        "<html>" + tr("Remote Control has been asked to create a new node.") +
+                        "<br>" + tr("Do you want to allow this?"),
+                        tr("Confirm Remote Control action"),
+                        JOptionPane.YES_NO_OPTION) != JOptionPane.YES_OPTION) {
+                            sendForbidden(out);
+                            return;
+                    }
+                }
+                addNode(args, out);
             } else if (command.equals("/import")) {
                 if (Main.pref.getBoolean("remotecontrol.always-confirm", false)) {
@@ -269,4 +286,32 @@
 
     /**
+     * Adds a node, reacts to the GET /add_node?lon=...&amp;lat=... request.
+     * @param args
+     * @param out 
+     * @throws IOException 
+     */
+    private void addNode(HashMap<String, String> args, Writer out) throws IOException {
+        if(!args.containsKey("lat") || !args.containsKey("lon")) {
+            sendBadRequest(out);
+            return;
+        }
+        
+        // Parse the arguments
+        double lat = Double.parseDouble(args.get("lat"));
+        double lon = Double.parseDouble(args.get("lon"));
+        System.out.println("Adding node at (" + lat + ", " + lon + ")");
+        
+        // Create a new node
+        LatLon ll = new LatLon(lat, lon);
+        Node nnew = new Node(ll);
+        
+        // Now execute the commands to add this node.
+        Main.main.undoRedo.add(new AddCommand(nnew));
+        Main.main.getCurrentDataSet().setSelected(nnew);
+        Main.map.mapView.repaint();
+        
+    }
+
+    /**
      * Sends a 500 error: server error
      * @param out The writer where the error is written
