Index: applications/editors/josm/plugins/comfort0/src/net/simon04/comfort0/Comfort0Plugin.java
===================================================================
--- applications/editors/josm/plugins/comfort0/src/net/simon04/comfort0/Comfort0Plugin.java	(revision 35621)
+++ applications/editors/josm/plugins/comfort0/src/net/simon04/comfort0/Comfort0Plugin.java	(revision 35622)
@@ -23,4 +23,5 @@
         MainMenu.add(menu.editMenu, new EditLevel0LAction());
         MainMenu.addAfter(menu.editMenu, new CopyLevel0LAction(), false, menu.copy);
+        MainMenu.addAfter(menu.editMenu, new PasteLevel0LAction(), false, menu.paste);
 
     }
Index: applications/editors/josm/plugins/comfort0/src/net/simon04/comfort0/EditLevel0LAction.java
===================================================================
--- applications/editors/josm/plugins/comfort0/src/net/simon04/comfort0/EditLevel0LAction.java	(revision 35621)
+++ applications/editors/josm/plugins/comfort0/src/net/simon04/comfort0/EditLevel0LAction.java	(revision 35622)
@@ -7,4 +7,5 @@
 import java.io.BufferedReader;
 import java.io.IOException;
+import java.io.Reader;
 import java.nio.charset.Charset;
 import java.nio.file.Files;
@@ -98,14 +99,17 @@
 
     private void readLevel0(Path path, final DataSet dataSet) throws IOException, ParseException {
-        final List<PrimitiveData> primitives;
         try (BufferedReader reader = Files.newBufferedReader(path, CHARSET)) {
-            primitives = new Level0LParser(reader).primitives();
+            final List<PrimitiveData> primitives = readLevel0(reader, dataSet);
+            Logging.info("Comfort0: Reading file {0} yielded {1} primitives", path, primitives.size());
         }
-        Logging.info("Comfort0: Reading file {0} yielded {1} primitives", path, primitives.size());
-
-        buildChangeCommands(dataSet, primitives);
     }
 
-    private void buildChangeCommands(DataSet dataSet, List<PrimitiveData> primitives) {
+    static List<PrimitiveData> readLevel0(Reader reader, final DataSet dataSet) throws ParseException {
+        final List<PrimitiveData> primitives = new Level0LParser(reader).primitives();
+        buildChangeCommands(dataSet, primitives);
+        return primitives;
+    }
+
+    static void buildChangeCommands(DataSet dataSet, List<PrimitiveData> primitives) {
         final List<Command> commands = new ArrayList<>();
         for (PrimitiveData fromLevel0L : primitives) {
Index: applications/editors/josm/plugins/comfort0/src/net/simon04/comfort0/PasteLevel0LAction.java
===================================================================
--- applications/editors/josm/plugins/comfort0/src/net/simon04/comfort0/PasteLevel0LAction.java	(revision 35622)
+++ applications/editors/josm/plugins/comfort0/src/net/simon04/comfort0/PasteLevel0LAction.java	(revision 35622)
@@ -0,0 +1,74 @@
+package net.simon04.comfort0;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+import static org.openstreetmap.josm.tools.I18n.trn;
+
+import java.awt.event.ActionEvent;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.Reader;
+import java.io.StringReader;
+import java.nio.charset.Charset;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Objects;
+
+import org.openstreetmap.josm.actions.JosmAction;
+import org.openstreetmap.josm.command.ChangePropertyCommand;
+import org.openstreetmap.josm.command.Command;
+import org.openstreetmap.josm.command.SequenceCommand;
+import org.openstreetmap.josm.data.UndoRedoHandler;
+import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.osm.PrimitiveData;
+import org.openstreetmap.josm.data.osm.RelationData;
+import org.openstreetmap.josm.data.osm.WayData;
+import org.openstreetmap.josm.gui.MainApplication;
+import org.openstreetmap.josm.gui.Notification;
+import org.openstreetmap.josm.gui.datatransfer.ClipboardUtils;
+import org.openstreetmap.josm.gui.util.GuiHelper;
+import org.openstreetmap.josm.tools.Logging;
+
+import net.simon04.comfort0.level0l.parsergen.Level0LParser;
+import net.simon04.comfort0.level0l.parsergen.ParseException;
+
+/**
+ * Pastes Level0L format and updates objects in the dataset.
+ */
+public class PasteLevel0LAction extends JosmAction {
+
+    /**
+     * Constructs a new {@link PasteLevel0LAction}.
+     */
+    public PasteLevel0LAction() {
+        super(tr("Paste Level0L"),
+                "theta",
+                tr("Pastes Level0L format and updates objects in the dataset"),
+                null, false, "PasteLevel0LAction", true);
+    }
+
+    @Override
+    public void actionPerformed(ActionEvent e) {
+        try {
+            final String clipboard = ClipboardUtils.getClipboardStringContent();
+            if (clipboard == null) {
+                return;
+            }
+            try (StringReader reader = new StringReader(clipboard)) {
+                EditLevel0LAction.readLevel0(reader, getLayerManager().getEditDataSet());
+            }
+        } catch (Exception ex) {
+            Logging.error(ex);
+        }
+    }
+
+    @Override
+    protected void updateEnabledState() {
+        setEnabled(getLayerManager().getEditDataSet() != null);
+        updateEnabledStateOnCurrentSelection(true);
+    }
+}
