diff --git a/src/org/openstreetmap/josm/data/osm/PrimitiveData.java b/src/org/openstreetmap/josm/data/osm/PrimitiveData.java
index 693d277..7c02278 100644
--- a/src/org/openstreetmap/josm/data/osm/PrimitiveData.java
+++ b/src/org/openstreetmap/josm/data/osm/PrimitiveData.java
@@ -54,7 +54,7 @@ public abstract class PrimitiveData extends AbstractPrimitive implements Seriali
     @Override
     public String toString() {
         StringBuilder builder = new StringBuilder();
-        builder.append(id).append(Arrays.toString(keys)).append(getFlagsAsString());
+        builder.append(id).append(' ').append(Arrays.toString(keys)).append(' ').append(getFlagsAsString());
         return builder.toString();
     }
 
diff --git a/src/org/openstreetmap/josm/gui/datatransfer/data/PrimitiveTransferData.java b/src/org/openstreetmap/josm/gui/datatransfer/data/PrimitiveTransferData.java
index 1acd354..91a235c 100644
--- a/src/org/openstreetmap/josm/gui/datatransfer/data/PrimitiveTransferData.java
+++ b/src/org/openstreetmap/josm/gui/datatransfer/data/PrimitiveTransferData.java
@@ -149,11 +149,6 @@ public final class PrimitiveTransferData implements Serializable {
      * @return <code>true</code> if invalid data is contained in this set.
      */
     public boolean hasIncompleteData() {
-        for (PrimitiveData pd : getAll()) {
-            if (pd.isIncomplete()) {
-                return true;
-            }
-        }
-        return false;
+        return getAll().stream().anyMatch(p -> p.isIncomplete() || !p.isVisible());
     }
 }
diff --git a/src/org/openstreetmap/josm/gui/datatransfer/importers/PrimitiveDataPaster.java b/src/org/openstreetmap/josm/gui/datatransfer/importers/PrimitiveDataPaster.java
index 804b209..a6d0841 100644
--- a/src/org/openstreetmap/josm/gui/datatransfer/importers/PrimitiveDataPaster.java
+++ b/src/org/openstreetmap/josm/gui/datatransfer/importers/PrimitiveDataPaster.java
@@ -25,6 +25,7 @@ import org.openstreetmap.josm.data.osm.WayData;
 import org.openstreetmap.josm.gui.ExtendedDialog;
 import org.openstreetmap.josm.gui.datatransfer.data.PrimitiveTransferData;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
+import org.openstreetmap.josm.tools.bugreport.BugReport;
 
 /**
  * This transfer support allows us to transfer primitives. This is the default paste action when primitives were copied.
@@ -66,13 +67,17 @@ public final class PrimitiveDataPaster extends AbstractOsmDataPaster {
 
         // Update references in copied buffer
         for (PrimitiveData data : bufferCopy) {
-            if (data instanceof NodeData) {
-                NodeData nodeData = (NodeData) data;
-                nodeData.setEastNorth(nodeData.getEastNorth().add(offset));
-            } else if (data instanceof WayData) {
-                updateNodes(newIds.get(OsmPrimitiveType.NODE), data);
-            } else if (data instanceof RelationData) {
-                updateMembers(newIds, data);
+            try {
+                if (data instanceof NodeData) {
+                    NodeData nodeData = (NodeData) data;
+                    nodeData.setEastNorth(nodeData.getEastNorth().add(offset));
+                } else if (data instanceof WayData) {
+                    updateNodes(newIds.get(OsmPrimitiveType.NODE), data);
+                } else if (data instanceof RelationData) {
+                    updateMembers(newIds, data);
+                }
+            } catch (RuntimeException e) {
+                throw BugReport.intercept(e).put("data", data);
             }
         }
         return new AddPrimitivesCommand(bufferCopy, toSelect, layer);
@@ -86,7 +91,7 @@ public final class PrimitiveDataPaster extends AbstractOsmDataPaster {
         newIds.put(OsmPrimitiveType.RELATION, new HashMap<Long, Long>());
 
         for (PrimitiveData data : pasteBuffer.getAll()) {
-            if (data.isIncomplete()) {
+            if (data.isIncomplete() || !data.isVisible()) {
                 continue;
             }
             PrimitiveData copy = data.makeCopy();
