Index: trunk/src/org/openstreetmap/josm/Main.java
===================================================================
--- trunk/src/org/openstreetmap/josm/Main.java	(revision 1072)
+++ trunk/src/org/openstreetmap/josm/Main.java	(revision 1073)
@@ -33,4 +33,5 @@
 import javax.swing.UIManager;
 
+import org.openstreetmap.josm.actions.AboutAction;
 import org.openstreetmap.josm.actions.downloadtasks.DownloadGpsTask;
 import org.openstreetmap.josm.actions.downloadtasks.DownloadOsmTask;
@@ -247,4 +248,9 @@
 				if (info.early != early)
 					continue;
+				if (info.mainversion != null && info.mainversion.compareTo(AboutAction.version) < 0)
+				{
+					JOptionPane.showMessageDialog(Main.parent, tr("Plugin requires JOSM update: {0}.", pluginName));
+					continue;
+				}
 				if (!p.containsKey(info.stage))
 					p.put(info.stage, new LinkedList<PluginInformation>());
@@ -255,4 +261,20 @@
 				else
 					JOptionPane.showMessageDialog(Main.parent, tr("Plugin not found: {0}.", pluginName));
+			}
+		}
+
+		if(!early)
+		{
+			long tim = System.currentTimeMillis();
+			long last = Main.pref.getLong("pluginmanager.lastupdate", 0);
+			Integer maxTime = Main.pref.getInteger("pluginmanager.warntime", 30*24*60*60);
+			if(last <= 0)
+			{
+				Main.pref.put("pluginmanager.lastupdate",Long.toString(tim));
+			}
+			else if(tim - last >= maxTime*1000*24*60*60)
+			{
+				long d = (tim - last)/(24*60*60*1000);
+				JOptionPane.showMessageDialog(Main.parent, tr("Last plugin update more than {0} days ago.", d));
 			}
 		}
Index: trunk/src/org/openstreetmap/josm/actions/AboutAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/AboutAction.java	(revision 1072)
+++ trunk/src/org/openstreetmap/josm/actions/AboutAction.java	(revision 1073)
@@ -52,11 +52,13 @@
 
 	static {
-		revision = loadFile(Main.class.getResource("/REVISION"));
+		URL u = Main.class.getResource("/REVISION");
+		if(u == null) u = Main.class.getResource("/META-INF/MANIFEST.MF");
+		revision = loadFile(u);
 
-		Pattern versionPattern = Pattern.compile(".*?Revision: ([0-9]*).*", Pattern.CASE_INSENSITIVE|Pattern.DOTALL);
+		Pattern versionPattern = Pattern.compile(".*?(?:Revision|Main-Version): ([0-9]*).*", Pattern.CASE_INSENSITIVE|Pattern.DOTALL);
 		Matcher match = versionPattern.matcher(revision.getText());
 		version = match.matches() ? match.group(1) : tr("UNKNOWN");
 
-		Pattern timePattern = Pattern.compile(".*?Last Changed Date: ([^\n]*).*", Pattern.CASE_INSENSITIVE|Pattern.DOTALL);
+		Pattern timePattern = Pattern.compile(".*?(?:Last Changed Date|Main-Date): ([^\n]*).*", Pattern.CASE_INSENSITIVE|Pattern.DOTALL);
 		match = timePattern.matcher(revision.getText());
 		time = match.matches() ? match.group(1) : tr("UNKNOWN");
Index: trunk/src/org/openstreetmap/josm/data/Preferences.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/Preferences.java	(revision 1072)
+++ trunk/src/org/openstreetmap/josm/data/Preferences.java	(revision 1073)
@@ -388,4 +388,18 @@
 	}
 
+	synchronized public long getLong(String key, long def) {
+		putDefault(key, Long.toString(def));
+		String v = get(key);
+		if(null == v)
+			return def;
+
+		try {
+			return Long.parseLong(v);
+		} catch(NumberFormatException e) {
+			// fall out
+		}
+		return def;
+	}
+
 	synchronized public double getDouble(String key, double def) {
 		putDefault(key, Double.toString(def));
@@ -408,4 +422,7 @@
 			/* handle old comma separated stuff - remove in future */
 			if(s.indexOf(',') >= 0)
+				return Arrays.asList(s.split(","));
+			/* handle space separated stuff - remove in future */
+			else if(s.indexOf(' ') >= 0)
 				return Arrays.asList(s.split(","));
 			else
Index: trunk/src/org/openstreetmap/josm/gui/PleaseWaitDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/PleaseWaitDialog.java	(revision 1072)
+++ trunk/src/org/openstreetmap/josm/gui/PleaseWaitDialog.java	(revision 1073)
@@ -35,5 +35,5 @@
 		pane.add(cancel, GBC.eol().anchor(GBC.CENTER));
 		setContentPane(pane);
-		setSize(400,100);
+		setSize(Main.pref.getInteger("progressdialog.size",400),100);
 		setLocationRelativeTo(Main.parent);
 	}
Index: trunk/src/org/openstreetmap/josm/gui/preferences/PluginPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/PluginPreference.java	(revision 1072)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/PluginPreference.java	(revision 1073)
@@ -198,5 +198,6 @@
 	private void update() {
 		// refresh description
-		PluginDownloader.downloadDescription();
+		int num = PluginDownloader.downloadDescription();
+		Boolean done = false;
 		refreshPluginPanel(gui);
 
@@ -205,5 +206,6 @@
 		for (PluginProxy proxy : Main.plugins) {
 			PluginDescription description = findDescription(proxy.info.name);
-			if (description != null && (description.version == null || description.version.equals("")) ? (proxy.info.version != null && proxy.info.version.equals("")) : !description.version.equals(proxy.info.version)) {
+			if (description != null && (description.version == null || description.version.equals(""))
+			? (proxy.info.version != null && proxy.info.version.equals("")) : !description.version.equals(proxy.info.version)) {
 				toUpdate.add(description);
 				toUpdateStr.append(description.name+"\n");
@@ -212,10 +214,18 @@
 		if (toUpdate.isEmpty()) {
 			JOptionPane.showMessageDialog(Main.parent, tr("All installed plugins are up to date."));
-			return;
-		}
-		int answer = JOptionPane.showConfirmDialog(Main.parent, tr("Update the following plugins:\n\n{0}", toUpdateStr.toString()), tr("Update"), JOptionPane.OK_CANCEL_OPTION);
-		if (answer != JOptionPane.OK_OPTION)
-			return;
-		PluginDownloader.update(toUpdate);
+			done = true;
+		}
+		else
+		{
+			int answer = JOptionPane.showConfirmDialog(Main.parent, tr("Update the following plugins:\n\n{0}",
+			toUpdateStr.toString()), tr("Update"), JOptionPane.OK_CANCEL_OPTION);
+			if (answer == JOptionPane.OK_OPTION)
+			{
+				PluginDownloader.update(toUpdate);
+				done = true;
+			}
+		}
+		if(done && num >= 1)
+			Main.pref.put("pluginmanager.lastupdate", Long.toString(System.currentTimeMillis()));
 	}
 
Index: trunk/src/org/openstreetmap/josm/plugins/PluginDownloader.java
===================================================================
--- trunk/src/org/openstreetmap/josm/plugins/PluginDownloader.java	(revision 1072)
+++ trunk/src/org/openstreetmap/josm/plugins/PluginDownloader.java	(revision 1073)
@@ -20,4 +20,5 @@
 import java.net.MalformedURLException;
 import java.net.URL;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.regex.Matcher;
@@ -71,4 +72,10 @@
 	private static final Pattern wiki = Pattern.compile("^</td></tr><tr><td><a class=\"ext-link\" href=\"([^\"]*)\"><span class=\"icon\">([^<]*)</span></a></td><td>([^<]*)</td><td>([^<].*)</td><td>(.*)");
 
+	private final static String[] pluginSites = {"http://josm.openstreetmap.de/wiki/Plugins"};
+
+	public static Collection<String> getSites() {
+		return Main.pref.getCollection("pluginmanager.sites", Arrays.asList(pluginSites));
+	}
+
 	public static int downloadDescription() {
 		int count = 0;
@@ -94,8 +101,4 @@
 		return count;
 	}
-
-	public static String[] getSites() {
-	    return Main.pref.get("pluginmanager.sites", "http://josm.openstreetmap.de/wiki/Plugins").split(" ");
-    }
 
 	private static CharSequence readXml(BufferedReader r) throws IOException {
Index: trunk/src/org/openstreetmap/josm/plugins/PluginInformation.java
===================================================================
--- trunk/src/org/openstreetmap/josm/plugins/PluginInformation.java	(revision 1072)
+++ trunk/src/org/openstreetmap/josm/plugins/PluginInformation.java	(revision 1073)
@@ -32,4 +32,5 @@
 	public final File file;
 	public final String name;
+	public final String mainversion;
 	public final String className;
 	public final String description;
@@ -81,4 +82,5 @@
 				stage = stageStr == null ? 50 : Integer.parseInt(stageStr);
 				version = attr.getValue("Plugin-Version");
+				mainversion = attr.getValue("Plugin-Mainversion");
 				author = attr.getValue("Author");
 
@@ -101,4 +103,5 @@
 				// resource-only plugin
 				className = null;
+				mainversion = null;
 				description = tr("unknown");
 				early = false;
