Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/OdPlugin.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/OdPlugin.java	(revision 29106)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/OdPlugin.java	(revision 29107)
@@ -60,4 +60,5 @@
 import org.openstreetmap.josm.plugins.opendata.core.modules.ModuleHandler;
 import org.openstreetmap.josm.plugins.opendata.core.modules.ModuleInformation;
+import org.openstreetmap.josm.plugins.opendata.core.util.OdUtils;
 import org.openstreetmap.josm.tools.Pair;
 
@@ -95,4 +96,6 @@
         // Add download task
         Main.main.menu.openLocation.addDownloadTaskClass(DownloadDataTask.class);
+        // Delete previous temp dirs if any (old plugin versions did not remove them correctly)
+        OdUtils.deletePreviousTempDirs();
 	}
 	
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/archive/ZipReader.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/archive/ZipReader.java	(revision 29106)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/archive/ZipReader.java	(revision 29107)
@@ -49,4 +49,5 @@
 import org.openstreetmap.josm.plugins.opendata.core.io.tabular.OdsReader;
 import org.openstreetmap.josm.plugins.opendata.core.io.tabular.XlsReader;
+import org.openstreetmap.josm.plugins.opendata.core.util.OdUtils;
 
 public class ZipReader extends AbstractReader implements OdConstants {
@@ -75,28 +76,7 @@
 	}
 	
-	private static final File createTempDir() throws IOException {
-	    final File temp = File.createTempFile("josm_opendata_temp_", Long.toString(System.nanoTime()));
-
-	    if (!temp.delete()) {
-	        throw new IOException("Could not delete temp file: " + temp.getAbsolutePath());
-	    }
-
-	    if (!temp.mkdir()) {
-	        throw new IOException("Could not create temp directory: " + temp.getAbsolutePath());
-	    }
-	    
-	    return temp;
-	}
-	
-	private static final void deleteDir(File dir) {
-        for (File file : dir.listFiles()) {
-            file.delete();
-        }
-		dir.delete();
-	}
-
 	public DataSet parseDoc(final ProgressMonitor progressMonitor) throws IOException, XMLStreamException, FactoryConfigurationError, JAXBException  {
 		
-	    final File temp = createTempDir();
+	    final File temp = OdUtils.createTempDir();
 	    final List<File> candidates = new ArrayList<File>();
 	    
@@ -217,5 +197,5 @@
 	    	System.err.println(e.getMessage());
 	    } finally {
-	    	deleteDir(temp);
+	        OdUtils.deleteDir(temp);
 	    	if (progressMonitor != null) {
 	    		progressMonitor.finishTask();
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/util/OdUtils.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/util/OdUtils.java	(revision 29106)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/util/OdUtils.java	(revision 29107)
@@ -16,4 +16,7 @@
 package org.openstreetmap.josm.plugins.opendata.core.util;
 
+import java.io.File;
+import java.io.FilenameFilter;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
@@ -31,4 +34,6 @@
 public abstract class OdUtils {
 	
+    private static final String TEMP_DIR_PREFIX = "josm_opendata_temp_";
+    
     public static final boolean isMultipolygon(OsmPrimitive p) {
         return p instanceof Relation && ((Relation) p).isMultipolygon();
@@ -80,3 +85,42 @@
         return degree + convertMinuteSecond(minute, second);
     }
+    
+    public static final File createTempDir() throws IOException {
+        final File temp = File.createTempFile(TEMP_DIR_PREFIX, Long.toString(System.nanoTime()));
+
+        if (!temp.delete()) {
+            throw new IOException("Could not delete temp file: " + temp.getAbsolutePath());
+        }
+
+        if (!temp.mkdir()) {
+            throw new IOException("Could not create temp directory: " + temp.getAbsolutePath());
+        }
+        
+        return temp;
+    }
+    
+    public static final void deleteDir(File dir) {
+        for (File file : dir.listFiles()) {
+            if (!file.delete()) {
+                file.deleteOnExit();
+            }
+        }
+        if (!dir.delete()) {
+            dir.deleteOnExit();
+        }
+    }
+    
+    public static final void deletePreviousTempDirs() {
+        File tmpDir = new File(System.getProperty("java.io.tmpdir"));
+        if (tmpDir.exists() && tmpDir.isDirectory()) {
+            for (File dir : tmpDir.listFiles(new FilenameFilter() {
+                @Override
+                public boolean accept(File dir, String name) {
+                    return name.startsWith(TEMP_DIR_PREFIX);
+                }
+            })) {
+                deleteDir(dir);
+            }
+        }
+    }
 }
