Index: /applications/editors/josm/plugins/reverter/build.xml
===================================================================
--- /applications/editors/josm/plugins/reverter/build.xml	(revision 21806)
+++ /applications/editors/josm/plugins/reverter/build.xml	(revision 21807)
@@ -33,5 +33,5 @@
 	<property name="commit.message" value="Added image icon" />
 	<!-- enter the *lowest* JOSM version this plugin is currently compatible with -->
-	<property name="plugin.main.version" value="3000" />
+	<property name="plugin.main.version" value="3336" />
 
 
Index: /applications/editors/josm/plugins/reverter/src/reverter/ChangesetReverter.java
===================================================================
--- /applications/editors/josm/plugins/reverter/src/reverter/ChangesetReverter.java	(revision 21806)
+++ /applications/editors/josm/plugins/reverter/src/reverter/ChangesetReverter.java	(revision 21807)
@@ -205,6 +205,4 @@
                 p.setDeleted(true);
                 p.setModified(false);
-                ReverterPlugin.undeletedObjects.addPrimitive(ds,
-                        new PrimitiveIdVersion(p.getPrimitiveId(),(int)p.getVersion()));
             }
         }
Index: /applications/editors/josm/plugins/reverter/src/reverter/DataSetToCmd.java
===================================================================
--- /applications/editors/josm/plugins/reverter/src/reverter/DataSetToCmd.java	(revision 21806)
+++ /applications/editors/josm/plugins/reverter/src/reverter/DataSetToCmd.java	(revision 21807)
@@ -60,4 +60,5 @@
         newTarget.mergeFrom(source);
         newTarget.setOsmId(target.getId(), (int)target.getVersion());
+        newTarget.setVisible(target.isVisible());
         newTarget.setDeleted(false);
         cmds.add(new ChangeCommand(target,newTarget));
Index: /applications/editors/josm/plugins/reverter/src/reverter/ReverterPlugin.java
===================================================================
--- /applications/editors/josm/plugins/reverter/src/reverter/ReverterPlugin.java	(revision 21806)
+++ /applications/editors/josm/plugins/reverter/src/reverter/ReverterPlugin.java	(revision 21807)
@@ -9,12 +9,9 @@
 
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.actions.UploadAction;
 import org.openstreetmap.josm.gui.MainMenu;
-import org.openstreetmap.josm.gui.MapView;
 import org.openstreetmap.josm.plugins.Plugin;
 import org.openstreetmap.josm.plugins.PluginInformation;
 
 public class ReverterPlugin extends Plugin {
-    static UndeletedObjectsStorage undeletedObjects = new UndeletedObjectsStorage();
     public ReverterPlugin(PluginInformation info) {
         super(info);
@@ -23,6 +20,4 @@
         //MainMenu.add(historyMenu, new ObjectsHistoryAction());       
         MainMenu.add(historyMenu, new RevertChangesetAction());
-        MapView.addLayerChangeListener(undeletedObjects);
-        UploadAction.registerUploadHook(new ReverterUploadHook(undeletedObjects));        
     }
 }
Index: plications/editors/josm/plugins/reverter/src/reverter/ReverterUploadHook.java
===================================================================
--- /applications/editors/josm/plugins/reverter/src/reverter/ReverterUploadHook.java	(revision 21806)
+++ 	(revision )
@@ -1,85 +1,0 @@
-// License: GPL. For details, see LICENSE file.
-package reverter;
-
-import static org.openstreetmap.josm.tools.I18n.tr;
-
-import java.util.Collections;
-import java.util.Comparator;
-
-import javax.swing.JOptionPane;
-
-import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.APIDataSet;
-import org.openstreetmap.josm.data.osm.DataSet;
-import org.openstreetmap.josm.data.osm.Node;
-import org.openstreetmap.josm.data.osm.OsmPrimitive;
-import org.openstreetmap.josm.data.osm.Relation;
-import org.openstreetmap.josm.data.osm.Way;
-
-import org.openstreetmap.josm.actions.upload.UploadHook;
-
-public class ReverterUploadHook implements UploadHook {
-    private UndeletedObjectsStorage undeletedStorage;
-    
-    public ReverterUploadHook(UndeletedObjectsStorage undeletedStorage) {
-        this.undeletedStorage = undeletedStorage;
-    }
-    
-    public boolean checkUpload(APIDataSet apiDataSet) {
-        // Determine DataSet associated with APIDataSet
-        DataSet ds = null;
-        if (!apiDataSet.getPrimitivesToAdd().isEmpty()) {
-            ds = apiDataSet.getPrimitivesToAdd().get(0).getDataSet();
-        } else if (!apiDataSet.getPrimitivesToUpdate().isEmpty()) {
-            ds = apiDataSet.getPrimitivesToUpdate().get(0).getDataSet();
-        } else if (!apiDataSet.getPrimitivesToDelete().isEmpty()) {
-            ds = apiDataSet.getPrimitivesToDelete().get(0).getDataSet();
-        }
-        if (ds == null) return true;
-        
-        /* Sort modified objects before uploading in order: nodes, ways, relations.
-         * It is needed because objects undeleted by reverter is marked as "modified", but they
-         * cannot be referenced as well as deleted objects. Without this the "precondition failed"
-         * error appears when trying to upload objects undeleted by reverter.
-         */
-        if (true) {
-            Collections.sort(
-                    apiDataSet.getPrimitivesToUpdate(),
-                    new Comparator<OsmPrimitive>() {
-                        public int compare(OsmPrimitive o1, OsmPrimitive o2) {
-                            if (o1 instanceof Node && o2 instanceof Node)
-                                return 0;
-                            else if (o1 instanceof Node)
-                                return -1;
-                            else if (o2 instanceof Node)
-                                return 1;
-            
-                            if (o1 instanceof Way && o2 instanceof Way)
-                                return 0;
-                            else if (o1 instanceof Way && o2 instanceof Relation)
-                                return -1;
-                            else if (o2 instanceof Way && o1 instanceof Relation)
-                                return 1;
-            
-                            return 0;
-                        }
-                    }
-                    );
-        }
-        /* Remove primitives that was undeleted and deleted again from list of primitives
-         * to be deleted.
-         */
-        apiDataSet.getPrimitivesToDelete().removeAll(undeletedStorage.getUndeletedObjects(ds));
-
-        if (apiDataSet.isEmpty()) {
-            JOptionPane.showMessageDialog(
-                    Main.parent,
-                    tr("No changes to upload."),
-                    tr("Warning"),
-                    JOptionPane.INFORMATION_MESSAGE
-            );
-            return false;
-        }
-        return true;
-    }
-}
Index: plications/editors/josm/plugins/reverter/src/reverter/UndeletedObjectsStorage.java
===================================================================
--- /applications/editors/josm/plugins/reverter/src/reverter/UndeletedObjectsStorage.java	(revision 21806)
+++ 	(revision )
@@ -1,108 +1,0 @@
-package reverter;
-
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
-
-import org.openstreetmap.josm.data.osm.DataSet;
-import org.openstreetmap.josm.data.osm.OsmPrimitive;
-import org.openstreetmap.josm.gui.MapView.LayerChangeListener;
-import org.openstreetmap.josm.gui.layer.Layer;
-import org.openstreetmap.josm.gui.layer.OsmDataLayer;
-
-public class UndeletedObjectsStorage implements LayerChangeListener, PropertyChangeListener {
-    private final HashMap<DataSet,HashSet<PrimitiveIdVersion>> undeletedPrimitives =
-        new HashMap<DataSet,HashSet<PrimitiveIdVersion>>();
-
-    public boolean haveUndeletedObjects(DataSet dataSet) {
-        return undeletedPrimitives.containsKey(dataSet);
-    }
-    
-    public void addPrimitive(DataSet dataSet,PrimitiveIdVersion id) {
-        HashSet<PrimitiveIdVersion> set = undeletedPrimitives.get(dataSet);
-        if (set == null) {
-            set = new HashSet<PrimitiveIdVersion>();
-            undeletedPrimitives.put(dataSet, set);
-        }
-        set.add(id);
-    }
-    
-    /**
-     * Checks if primitive still should be treated as "undeleted"
-     * @param dataSet DataSet of the primitive
-     * @param id Id and version of the primitive
-     * @return true if primitive is still should be treated as "undeleted"
-     */
-    private boolean checkPrimitive(DataSet dataSet, PrimitiveIdVersion id) {
-        OsmPrimitive p = dataSet.getPrimitiveById(id.getPrimitiveId());
-        if (p == null) return false;
-        if (p.getVersion() != id.getVersion()) return false;
-        return true;
-    }
-    
-    private void pruneEmptyLayers() {
-        for (Iterator<HashSet<PrimitiveIdVersion>> it =
-                undeletedPrimitives.values().iterator();it.hasNext();) {
-            if (it.next().isEmpty()) it.remove();
-        }
-    }
-    
-    private void pruneLayer(DataSet dataSet) {
-        HashSet<PrimitiveIdVersion> idSet = undeletedPrimitives.get(dataSet);
-        for (Iterator<PrimitiveIdVersion> it = idSet.iterator();it.hasNext();) {
-            if (!checkPrimitive(dataSet,it.next())) it.remove();
-        }
-    }
-    
-    public void pruneObsolete() {
-        for (DataSet ds : undeletedPrimitives.keySet()) {
-            pruneLayer(ds);
-        }
-        pruneEmptyLayers();
-    }
-    
-    public Set<OsmPrimitive> getUndeletedObjects(DataSet dataSet) {
-        pruneObsolete();
-        HashSet<PrimitiveIdVersion> idSet = undeletedPrimitives.get(dataSet);
-        HashSet<OsmPrimitive> undeleted = new HashSet<OsmPrimitive>();
-        if (idSet == null) return undeleted;
-        for (PrimitiveIdVersion id : idSet) {
-            undeleted.add(dataSet.getPrimitiveById(id.getPrimitiveId()));
-        }
-        return undeleted;
-    }
-    
-    @Override
-    public void activeLayerChange(Layer oldLayer, Layer newLayer) {
-    }
-
-    @Override
-    public void layerAdded(Layer newLayer) {
-        if (!(newLayer instanceof OsmDataLayer)) return;
-        newLayer.addPropertyChangeListener(this);
-    }
-
-    @Override
-    public void layerRemoved(Layer oldLayer) {
-        if (!(oldLayer instanceof OsmDataLayer)) return;
-        oldLayer.addPropertyChangeListener(this);
-        OsmDataLayer dataLayer = (OsmDataLayer)oldLayer;
-        if (undeletedPrimitives.containsKey(dataLayer.data)) {
-            undeletedPrimitives.remove(dataLayer.data);
-        }
-    }
-
-    @Override
-    public void propertyChange(PropertyChangeEvent evt) {
-        if (evt == null) return;
-        if (evt.getPropertyName() == OsmDataLayer.REQUIRES_UPLOAD_TO_SERVER_PROP &&
-                evt.getOldValue().equals(true) && evt.getNewValue().equals(false)) {
-            pruneObsolete();
-        }
-    }
-}
