Index: /trunk/src/org/openstreetmap/josm/actions/OpenFileAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/OpenFileAction.java	(revision 3678)
+++ /trunk/src/org/openstreetmap/josm/actions/OpenFileAction.java	(revision 3679)
@@ -76,12 +76,18 @@
     static public class OpenFileTask extends PleaseWaitRunnable {
         private List<File> files;
+        private List<File> successfullyOpenedFiles = new ArrayList<File>();
         private FileFilter fileFilter;
         private boolean cancelled;
 
-        public OpenFileTask(List<File> files, FileFilter fileFilter) {
-            super(tr("Opening files"), false /* don't ignore exception */);
+        public OpenFileTask(List<File> files, FileFilter fileFilter, String title) {
+            super(title, false /* don't ignore exception */);
             this.files = new ArrayList<File>(files);
             this.fileFilter = fileFilter;
         }
+
+        public OpenFileTask(List<File> files, FileFilter fileFilter) {
+            this(files, fileFilter, tr("Opening files"));
+        }
+
         @Override
         protected void cancel() {
@@ -240,12 +246,20 @@
                 getProgressMonitor().setCustomText(msg);
                 getProgressMonitor().indeterminateSubTask(msg);
-                importer.importDataHandleExceptions(files, getProgressMonitor().createSubTaskMonitor(files.size(), false));
+                if (importer.importDataHandleExceptions(files, getProgressMonitor().createSubTaskMonitor(files.size(), false))) {
+                    successfullyOpenedFiles.addAll(files);
+                }
             } else {
                 for (File f : files) {
                     if (cancelled) return;
                     getProgressMonitor().indeterminateSubTask(tr("Opening file ''{0}'' ...", f.getAbsolutePath()));
-                    importer.importDataHandleExceptions(f, getProgressMonitor().createSubTaskMonitor(1, false));
-                }
-            }
+                    if (importer.importDataHandleExceptions(f, getProgressMonitor().createSubTaskMonitor(1, false))) {
+                        successfullyOpenedFiles.add(f);
+                    }
+                }
+            }
+        }
+
+        public List<File> getSuccessfullyOpenedFiles() {
+            return successfullyOpenedFiles;
         }
     }
Index: /trunk/src/org/openstreetmap/josm/data/AutosaveTask.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/AutosaveTask.java	(revision 3678)
+++ /trunk/src/org/openstreetmap/josm/data/AutosaveTask.java	(revision 3679)
@@ -5,6 +5,4 @@
 
 import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.util.ArrayList;
@@ -22,4 +20,5 @@
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.actions.OpenFileAction.OpenFileTask;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.event.AbstractDatasetChangedEvent;
@@ -32,9 +31,9 @@
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
-import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
-import org.openstreetmap.josm.io.IllegalDataException;
 import org.openstreetmap.josm.io.OsmExporter;
-import org.openstreetmap.josm.io.OsmReader;
-
+
+/**
+ * Saves data layers periodically so they can be recovered in case of a crash.
+ */
 public class AutosaveTask extends TimerTask implements LayerChangeListener, Listener {
 
@@ -55,6 +54,4 @@
         final Deque<File> backupFiles = new LinkedList<File>();
     }
-
-    //"data layer 1_20100711_1330"
 
     private final DataSetListenerAdapter datasetAdapter = new DataSetListenerAdapter(this);
@@ -261,23 +258,15 @@
     }
 
-    public List<OsmDataLayer> getUnsavedLayers() {
-        List<OsmDataLayer> result = new ArrayList<OsmDataLayer>();
-
-        for (File f: getUnsavedLayersFiles()) {
-            try {
-                DataSet ds = OsmReader.parseDataSet(new FileInputStream(f), NullProgressMonitor.INSTANCE);
-                String layerName = f.getName();
-                layerName = layerName.substring(0, layerName.lastIndexOf('.'));
-                result.add(new OsmDataLayer(ds, layerName, null));
-                moveToDeletedLayersFolder(f);
-            } catch (FileNotFoundException e) {
-                // Should not happen
-                System.err.println("File " + f.getAbsolutePath() + " not found");
-            } catch (IllegalDataException e) {
-                System.err.println(tr("Unable to read autosaved osm data ({0}) - {1}", f.getAbsoluteFile(), e.getMessage()));
-            }
-        }
-
-        return result;
+    public void recoverUnsavedLayers() {
+        List<File> files = getUnsavedLayersFiles();
+        final OpenFileTask openFileTsk = new OpenFileTask(files, null, tr("Restoring files"));
+        Main.worker.submit(openFileTsk);
+        Main.worker.submit(new Runnable() {
+            public void run() {
+                for (File f: openFileTsk.getSuccessfullyOpenedFiles()) {
+                    moveToDeletedLayersFolder(f);
+                }
+            }          
+        });
     }
 
Index: /trunk/src/org/openstreetmap/josm/gui/MainApplication.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/MainApplication.java	(revision 3678)
+++ /trunk/src/org/openstreetmap/josm/gui/MainApplication.java	(revision 3679)
@@ -5,5 +5,4 @@
 import static org.openstreetmap.josm.tools.I18n.trn;
 
-import java.awt.EventQueue;
 import java.awt.GridBagConstraints;
 import java.awt.GridBagLayout;
@@ -30,10 +29,9 @@
 import javax.swing.JPanel;
 import javax.swing.JTextArea;
+import javax.swing.SwingUtilities;
 
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.actions.AutoScaleAction;
 import org.openstreetmap.josm.data.AutosaveTask;
 import org.openstreetmap.josm.data.Preferences;
-import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.preferences.server.OAuthAccessTokenHolder;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
@@ -250,38 +248,34 @@
         }
 
-        if (AutosaveTask.PROP_AUTOSAVE_ENABLED.get()) {
-            AutosaveTask autosaveTask = new AutosaveTask();
-            List<File> unsavedLayerFiles = autosaveTask.getUnsavedLayersFiles();
-            if (!unsavedLayerFiles.isEmpty()) {
-                System.err.println("autosave debug: unsavedLayerFiles="+unsavedLayerFiles);
-                ExtendedDialog dialog = new ExtendedDialog(
-                        Main.parent,
-                        tr("Unsaved osm data"),
-                        new String[] {tr("Restore"), tr("Cancel"), tr("Discard")}
-                );
-                dialog.setContent(
-                        trn("JOSM found {0} unsaved osm data layer. ",
-                        "JOSM found {0} unsaved osm data layers. ", unsavedLayerFiles.size(), unsavedLayerFiles.size()) +
-                        tr("It looks like JOSM crashed last time. Do you like to restore the data?"));
-                dialog.setButtonIcons(new String[] {"ok", "cancel", "dialogs/remove"});
-                int selection = dialog.showDialog().getValue();
-                System.err.println("autosave debug: user selection="+selection);
-                if (selection == 1) {
-                    for (OsmDataLayer layer: autosaveTask.getUnsavedLayers()) {
-                        Main.main.addLayer(layer);
+        SwingUtilities.invokeLater(new Runnable() {
+            public void run() {
+                if (AutosaveTask.PROP_AUTOSAVE_ENABLED.get()) {
+                    AutosaveTask autosaveTask = new AutosaveTask();
+                    List<File> unsavedLayerFiles = autosaveTask.getUnsavedLayersFiles();
+                    if (!unsavedLayerFiles.isEmpty()) {
+                        System.err.println("autosave debug: unsavedLayerFiles="+unsavedLayerFiles);
+                        ExtendedDialog dialog = new ExtendedDialog(
+                                Main.parent,
+                                tr("Unsaved osm data"),
+                                new String[] {tr("Restore"), tr("Cancel"), tr("Discard")}
+                        );
+                        dialog.setContent(
+                                trn("JOSM found {0} unsaved osm data layer. ",
+                                "JOSM found {0} unsaved osm data layers. ", unsavedLayerFiles.size(), unsavedLayerFiles.size()) +
+                                tr("It looks like JOSM crashed last time. Do you like to restore the data?"));
+                        dialog.setButtonIcons(new String[] {"ok", "cancel", "dialogs/remove"});
+                        int selection = dialog.showDialog().getValue();
+                        System.err.println("autosave debug: user selection="+selection);
+                        if (selection == 1) {
+                            autosaveTask.recoverUnsavedLayers();
+                        } else if (selection == 3) {
+                            System.err.println("autosave debug: discard autosaved layers");
+                            autosaveTask.dicardUnsavedLayers();
+                            System.err.println("autosave debug: discard autosaved layers [DONE]");
+                        }
                     }
-                    AutoScaleAction.autoScale("data");
-                } else if (selection == 3) {
-                    System.err.println("autosave debug: discard autosaved layers");
-                    autosaveTask.dicardUnsavedLayers();
-                    System.err.println("autosave debug: discard autosaved layers [DONE]");
+                    autosaveTask.schedule();
                 }
-            }
-            autosaveTask.schedule();
-        }
-
-
-        EventQueue.invokeLater(new Runnable() {
-            public void run() {
+                
                 main.postConstructorProcessCmdLine(args);
             }
Index: /trunk/src/org/openstreetmap/josm/io/FileImporter.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/FileImporter.java	(revision 3678)
+++ /trunk/src/org/openstreetmap/josm/io/FileImporter.java	(revision 3679)
@@ -36,5 +36,4 @@
     /**
      * Needs to be implemented if isBatchImporter() returns false.
-     * @throws IllegalDataException
      */
     public void importData(File file, ProgressMonitor progressMonitor) throws IOException, IllegalDataException {
@@ -44,5 +43,4 @@
     /**
      * Needs to be implemented if isBatchImporter() returns true.
-     * @throws IllegalDataException
      */
     public void importData(List<File> files, ProgressMonitor progressMonitor) throws IOException, IllegalDataException {
@@ -52,9 +50,11 @@
     /**
      * Wrapper to give meaningful output if things go wrong.
+     * @return true if data import was successful
      */
-    public void importDataHandleExceptions(File f, ProgressMonitor progressMonitor) {
+    public boolean importDataHandleExceptions(File f, ProgressMonitor progressMonitor) {
         try {
             System.out.println("Open file: " + f.getAbsolutePath() + " (" + f.length() + " bytes)");
             importData(f, progressMonitor);
+            return true;
         } catch (Exception e) {
             e.printStackTrace();
@@ -65,10 +65,12 @@
                     JOptionPane.ERROR_MESSAGE, null
             );
+            return false;
         }
     }
-    public void importDataHandleExceptions(List<File> files, ProgressMonitor progressMonitor) {
+    public boolean importDataHandleExceptions(List<File> files, ProgressMonitor progressMonitor) {
         try {
             System.out.println("Open "+files.size()+" files");
             importData(files, progressMonitor);
+            return true;
         } catch (Exception e) {
             e.printStackTrace();
@@ -79,4 +81,5 @@
                     JOptionPane.ERROR_MESSAGE, null
             );
+            return false;
         }
     }
