Index: applications/editors/josm/plugins/reverter/.project
===================================================================
--- applications/editors/josm/plugins/reverter/.project	(revision 29287)
+++ applications/editors/josm/plugins/reverter/.project	(revision 29296)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <projectDescription>
-	<name>reverter</name>
+	<name>JOSM-Reverter</name>
 	<comment></comment>
 	<projects>
Index: applications/editors/josm/plugins/reverter/.settings/org.eclipse.jdt.core.prefs
===================================================================
--- applications/editors/josm/plugins/reverter/.settings/org.eclipse.jdt.core.prefs	(revision 29296)
+++ applications/editors/josm/plugins/reverter/.settings/org.eclipse.jdt.core.prefs	(revision 29296)
@@ -0,0 +1,11 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
Index: applications/editors/josm/plugins/reverter/src/reverter/ChangesetIdQuery.java
===================================================================
--- applications/editors/josm/plugins/reverter/src/reverter/ChangesetIdQuery.java	(revision 29287)
+++ applications/editors/josm/plugins/reverter/src/reverter/ChangesetIdQuery.java	(revision 29296)
@@ -9,4 +9,5 @@
 
 import javax.swing.ButtonGroup;
+import javax.swing.JCheckBox;
 import javax.swing.JFormattedTextField;
 import javax.swing.JLabel;
@@ -21,17 +22,26 @@
 @SuppressWarnings("serial")
 public class ChangesetIdQuery extends ExtendedDialog {
-    private JFormattedTextField tcid = new JFormattedTextField(NumberFormat.getInstance());
-    private ButtonGroup bgRevertType = new ButtonGroup();
-    private JRadioButton rbFull = new JRadioButton(tr("Revert changeset fully"));
-    private JRadioButton rbSelection = new JRadioButton(tr("Revert selection only"));
-    private JRadioButton rbSelectionUndelete =
-        new JRadioButton(tr("Revert selection and restore deleted objects"));
+    private final JFormattedTextField tcid = new JFormattedTextField(NumberFormat.getInstance());
+    private final ButtonGroup bgRevertType = new ButtonGroup();
+    private final JRadioButton rbFull = new JRadioButton(tr("Revert changeset fully"));
+    private final JRadioButton rbSelection = new JRadioButton(tr("Revert selection only"));
+    private final JRadioButton rbSelectionUndelete = new JRadioButton(tr("Revert selection and restore deleted objects"));
+    private final JCheckBox cbNewLayer = new JCheckBox(tr("Download as new layer"));
 
     public int getChangesetId() {
         try {
-          return NumberFormat.getInstance().parse(tcid.getText()).intValue();
+            return NumberFormat.getInstance().parse(tcid.getText()).intValue();
         } catch (ParseException e) {
-          return 0;
+            return 0;
         }
+    }
+    
+    /**
+     * Replies true if the user requires to download into a new layer
+     *
+     * @return true if the user requires to download into a new layer
+     */
+    public boolean isNewLayerRequired() {
+        return cbNewLayer.isSelected();
     }
 
@@ -60,4 +70,8 @@
         panel.add(rbSelectionUndelete, GBC.eol().fill(GBC.HORIZONTAL));
 
+        cbNewLayer.setToolTipText(tr("<html>Select to download data into a new data layer.<br>"
+                +"Unselect to download into the currently active data layer.</html>"));
+        panel.add(cbNewLayer, GBC.eol().fill(GBC.HORIZONTAL));
+
         setContent(panel);
         setupDialog();
Index: applications/editors/josm/plugins/reverter/src/reverter/ChangesetReverter.java
===================================================================
--- applications/editors/josm/plugins/reverter/src/reverter/ChangesetReverter.java	(revision 29287)
+++ applications/editors/josm/plugins/reverter/src/reverter/ChangesetReverter.java	(revision 29296)
@@ -119,9 +119,14 @@
      * @throws OsmTransferException
      */
-    public ChangesetReverter(int changesetId, RevertType revertType, ProgressMonitor monitor)
+    public ChangesetReverter(int changesetId, RevertType revertType, boolean newLayer, ProgressMonitor monitor)
             throws OsmTransferException {
         this.changesetId = changesetId;
-        this.layer = Main.main.getEditLayer();
-        this.ds = layer.data;
+        if (newLayer) {
+            this.ds = new DataSet();
+            this.layer = new OsmDataLayer(this.ds, tr("Reverted changeset") + tr(" [id: {0}]", changesetId), null);
+        } else {
+            this.layer = Main.main.getEditLayer();
+            this.ds = layer.data;
+        }
         this.revertType = revertType;
 
@@ -133,4 +138,7 @@
         } finally {
             monitor.finishTask();
+            if (newLayer) {
+                Main.main.addLayer(layer);
+            }
         }
 
@@ -186,6 +194,9 @@
                         switch (p.getType()) {
                         case NODE: ds.addPrimitive(new Node(p.getUniqueId())); break;
+                        case CLOSEDWAY:
                         case WAY: ds.addPrimitive(new Way(p.getUniqueId())); break;
+                        case MULTIPOLYGON:
                         case RELATION: ds.addPrimitive(new Relation(p.getUniqueId())); break;
+                        default: throw new AssertionError();
                         }
                     }
@@ -205,7 +216,9 @@
                 rdr.append(new Node(id.getUniqueId()));
                 break;
+            case CLOSEDWAY:
             case WAY:
                 rdr.append(new Way(id.getUniqueId()));
                 break;
+            case MULTIPOLYGON:
             case RELATION:
                 rdr.append(new Relation(id.getUniqueId()));
@@ -229,6 +242,8 @@
         case NODE:
             return new Conflict<Node>((Node)p,new Node((Node)p), isMyDeleted);
+        case CLOSEDWAY:
         case WAY:
             return new Conflict<Way>((Way)p,new Way((Way)p), isMyDeleted);
+        case MULTIPOLYGON:
         case RELATION:
             return new Conflict<Relation>((Relation)p,new Relation((Relation)p), isMyDeleted);
@@ -244,4 +259,5 @@
             LatLon historyCoor = ((HistoryNode)history).getCoords();
             return currentCoor == historyCoor || (currentCoor != null && historyCoor != null && currentCoor.equals(historyCoor));
+        case CLOSEDWAY:
         case WAY:
             List<Node> currentNodes = ((Way)current).getNodes();
@@ -252,4 +268,5 @@
             }
             return true;
+        case MULTIPOLYGON:
         case RELATION:
             List<org.openstreetmap.josm.data.osm.RelationMember> currentMembers =
@@ -367,4 +384,5 @@
         return cmds;
     }
+    
     public boolean hasMissingObjects() {
         return !missing.isEmpty();
Index: applications/editors/josm/plugins/reverter/src/reverter/RevertChangesetAction.java
===================================================================
--- applications/editors/josm/plugins/reverter/src/reverter/RevertChangesetAction.java	(revision 29287)
+++ applications/editors/josm/plugins/reverter/src/reverter/RevertChangesetAction.java	(revision 29296)
@@ -39,5 +39,6 @@
         if (revertType == null) return;
 
-        Main.worker.submit(new RevertChangesetTask(changesetId, revertType));
+        boolean newLayer = dlg.isNewLayerRequired();
+        Main.worker.submit(new RevertChangesetTask(changesetId, revertType, newLayer, newLayer));
     }
 }
Index: applications/editors/josm/plugins/reverter/src/reverter/RevertChangesetTask.java
===================================================================
--- applications/editors/josm/plugins/reverter/src/reverter/RevertChangesetTask.java	(revision 29287)
+++ applications/editors/josm/plugins/reverter/src/reverter/RevertChangesetTask.java	(revision 29296)
@@ -19,18 +19,23 @@
     private final int changesetId;
     private final RevertType revertType;
+    private final boolean newLayer;
 
     private ChangesetReverter rev;
-    private boolean downloadConfirmed = false;
+    private boolean downloadConfirmed;
 
-    public RevertChangesetTask(int changesetId, RevertType revertType)
-    {
+    public RevertChangesetTask(int changesetId, RevertType revertType) {
+        this(changesetId, revertType, false);
+    }
+    
+    public RevertChangesetTask(int changesetId, RevertType revertType, boolean autoConfirmDownload) {
+        this(changesetId, revertType, autoConfirmDownload, false);
+    }
+    
+    public RevertChangesetTask(int changesetId, RevertType revertType, boolean autoConfirmDownload, boolean newLayer) {
         super(tr("Reverting..."));
         this.changesetId = changesetId;
         this.revertType = revertType;
-    }
-    public RevertChangesetTask(int changesetId, RevertType revertType, boolean autoConfirmDownload)
-    {
-        this(changesetId, revertType);
-        downloadConfirmed = autoConfirmDownload;
+        this.downloadConfirmed = autoConfirmDownload;
+        this.newLayer = newLayer;
     }
 
@@ -57,5 +62,5 @@
     protected void realRun() throws OsmTransferException {
         progressMonitor.indeterminateSubTask(tr("Downloading changeset"));
-        rev = new ChangesetReverter(changesetId, revertType,
+        rev = new ChangesetReverter(changesetId, revertType, newLayer,
                 progressMonitor.createSubTaskMonitor(0, true));
         if (progressMonitor.isCanceled()) return;
