Index: src/org/openstreetmap/josm/actions/DownloadAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/DownloadAction.java	(revision 157)
+++ src/org/openstreetmap/josm/actions/DownloadAction.java	(revision 158)
@@ -262,5 +262,5 @@
 			else if (!anySelected)
 				JOptionPane.showMessageDialog(Main.parent,tr("Please select at least one download data type."));
-		} while (b == null && anySelected);
+		} while (b == null || !anySelected);
 
 		double minlon = b.latlon[0];
Index: src/org/openstreetmap/josm/actions/mapmode/MoveAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/mapmode/MoveAction.java	(revision 157)
+++ src/org/openstreetmap/josm/actions/mapmode/MoveAction.java	(revision 158)
@@ -83,5 +83,5 @@
 		if (selectionMode)
 			return;
-		
+
 		if (mousePos == null)
 			mousePos = e.getPoint();
@@ -131,12 +131,12 @@
 		OsmPrimitive osm = Main.map.mapView.getNearest(e.getPoint(), (e.getModifiersEx() & MouseEvent.ALT_DOWN_MASK) != 0);
 		if (osm != null) {
-	        if (!sel.contains(osm))
-	        	Main.ds.setSelected(osm);
-	        oldCursor = Main.map.mapView.getCursor();
-	        Main.map.mapView.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
-        } else {
-        	selectionMode = true;
+			if (!sel.contains(osm))
+				Main.ds.setSelected(osm);
+			oldCursor = Main.map.mapView.getCursor();
+			Main.map.mapView.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
+		} else {
+			selectionMode = true;
 			selectionManager.register(Main.map.mapView);
-        }
+		}
 
 		Main.map.mapView.repaint();
@@ -156,7 +156,7 @@
 	}
 
-	
+
 	public void selectionEnded(Rectangle r, boolean alt, boolean shift, boolean ctrl) {
 		SelectionAction.selectEverythingInRectangle(selectionManager, r, alt, shift, ctrl);
-    }
+	}
 }
Index: src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java
===================================================================
--- src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java	(revision 157)
+++ src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java	(revision 158)
@@ -6,4 +6,5 @@
 import java.awt.Component;
 import java.awt.GridLayout;
+import java.awt.Point;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
@@ -49,5 +50,6 @@
 	 */
 	static JList instance;
-
+	private JScrollPane listScrollPane;
+	
 	public final static class DeleteLayerAction extends AbstractAction {
 
@@ -120,5 +122,6 @@
 		super(tr("Layers"), "layerlist", tr("Open a list of all loaded layers."), KeyEvent.VK_L, 100);
 		instance = new JList(model);
-		add(new JScrollPane(instance), BorderLayout.CENTER);
+		listScrollPane = new JScrollPane(instance);
+		add(listScrollPane, BorderLayout.CENTER);
 		instance.setBackground(UIManager.getColor("Button.background"));
 		instance.setCellRenderer(new DefaultListCellRenderer(){
@@ -160,5 +163,6 @@
 				Layer layer = (Layer)instance.getModel().getElementAt(index);
 				LayerListPopup menu = new LayerListPopup(instance, layer);
-				menu.show(LayerListDialog.this, e.getX(), e.getY());
+				Point p = listScrollPane.getMousePosition();
+				menu.show(listScrollPane, p.x, p.y-3);
 			}
 			@Override public void mousePressed(MouseEvent e) {
Index: src/org/openstreetmap/josm/tools/I18n.java
===================================================================
--- src/org/openstreetmap/josm/tools/I18n.java	(revision 157)
+++ src/org/openstreetmap/josm/tools/I18n.java	(revision 158)
@@ -1,4 +1,7 @@
 package org.openstreetmap.josm.tools;
 
+import java.io.File;
+import java.net.URL;
+import java.net.URLClassLoader;
 import java.text.MessageFormat;
 import java.util.Locale;
@@ -15,13 +18,29 @@
 public class I18n {
 	private static org.xnap.commons.i18n.I18n i18n;
-	
+
 	static {
+		String localeFile = Main.pref.getPreferencesDir()+"lang/"+Locale.getDefault()+".jar";
+		Class<?> klass = Main.class;
+		if (new File(localeFile).exists()) {
+			try {
+				String url = localeFile.replace('\\','/');
+				if (System.getProperty("os.name").startsWith("Windows"))
+					url = "file:/"+url;
+				else
+					url = "file://"+url;
+		        URLClassLoader loader = new URLClassLoader(new URL[]{new URL(url)});
+		        klass = Class.forName("org.openstreetmap.josm.Translation_"+Locale.getDefault(), true, loader);
+	        } catch (Exception e) {
+	        	System.out.println("Couldn't load locale file "+localeFile);
+	        	e.printStackTrace();
+	        }
+		}
 		try {
-	        i18n = I18nFactory.getI18n(Main.class);
-        } catch (MissingResourceException e) {
-        	System.out.println("Locale '"+Locale.getDefault()+"' not found. Using default.");
-        }
+			i18n = I18nFactory.getI18n(klass);
+		} catch (MissingResourceException e) {
+			System.out.println("Locale '"+Locale.getDefault()+"' not found. Using default.");
+		}
 	}
-	
+
 	public static String tr(String text, Object... objects) {
 		if (i18n == null)
@@ -39,5 +58,5 @@
 		if (i18n == null)
 			return n == 1 ? tr(text, objects) : tr(pluralText, objects);
-		return i18n.trn(text, pluralText, n, objects);
+			return i18n.trn(text, pluralText, n, objects);
 	}
 
@@ -45,5 +64,5 @@
 		if (i18n == null)
 			return n == 1 ? tr(text) : tr(pluralText);
-		return i18n.trn(text, pluralText, n);
+			return i18n.trn(text, pluralText, n);
 	}
 }
