Index: trunk/src/org/openstreetmap/josm/gui/preferences/PluginPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/PluginPreference.java	(revision 2923)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/PluginPreference.java	(revision 2924)
@@ -41,6 +41,7 @@
 import org.openstreetmap.josm.gui.HelpAwareOptionPane;
 import org.openstreetmap.josm.gui.help.HelpUtil;
+import org.openstreetmap.josm.gui.preferences.plugin.PluginListPanel;
 import org.openstreetmap.josm.gui.preferences.plugin.PluginPreferencesModel;
-import org.openstreetmap.josm.gui.preferences.plugin.PluginPreferencesPanel;
+import org.openstreetmap.josm.gui.preferences.plugin.PluginUpdatePolicyPanel;
 import org.openstreetmap.josm.gui.widgets.SelectAllOnFocusGainedDecorator;
 import org.openstreetmap.josm.plugins.PluginDownloadTask;
@@ -94,7 +95,9 @@
 
     private JTextField tfFilter;
-    private PluginPreferencesPanel pnlPluginPreferences;
+    private PluginListPanel pnlPluginPreferences;
     private PluginPreferencesModel model;
     private JScrollPane spPluginPreferences;
+    private PluginUpdatePolicyPanel pnlPluginUpdatePolicy;
+
     /**
      * is set to true if this preference pane has been selected
@@ -132,9 +135,9 @@
     }
 
-    protected JPanel buildContentPane() {
+    protected JPanel buildPluginListPanel() {
         JPanel pnl = new JPanel(new BorderLayout());
         pnl.add(buildSearchFieldPanel(), BorderLayout.NORTH);
         model  = new PluginPreferencesModel();
-        spPluginPreferences = new JScrollPane(pnlPluginPreferences = new PluginPreferencesPanel(model));
+        spPluginPreferences = new JScrollPane(pnlPluginPreferences = new PluginListPanel(model));
         spPluginPreferences.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
         spPluginPreferences.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
@@ -157,4 +160,16 @@
     }
 
+    protected JPanel buildContentPanel() {
+        JPanel pnl = new JPanel(new BorderLayout());
+        JTabbedPane tpPluginPreferences = new JTabbedPane();
+        tpPluginPreferences.add(buildPluginListPanel());
+        tpPluginPreferences.add(pnlPluginUpdatePolicy  =new PluginUpdatePolicyPanel());
+        tpPluginPreferences.setTitleAt(0, tr("Plugins"));
+        tpPluginPreferences.setTitleAt(1, tr("Plugin update policy"));
+
+        pnl.add(tpPluginPreferences, BorderLayout.CENTER);
+        return pnl;
+    }
+
     public void addGui(final PreferenceTabbedPane gui) {
         GridBagConstraints gc = new GridBagConstraints();
@@ -163,5 +178,5 @@
         gc.anchor = GridBagConstraints.NORTHWEST;
         gc.fill = GridBagConstraints.BOTH;
-        gui.plugins.add(buildContentPane(), gc);
+        gui.plugins.add(buildContentPanel(), gc);
         pnlPluginPreferences.refreshView();
         gui.addChangeListener(new PluginPreferenceActivationListener(gui.plugins));
@@ -255,4 +270,5 @@
         if (! pluginPreferencesActivated)
             return false;
+        pnlPluginUpdatePolicy.rememberInPreferences();
         if (model.isActivePluginsChanged()) {
             LinkedList<String> l = new LinkedList<String>(model.getSelectedPluginNames());
Index: trunk/src/org/openstreetmap/josm/gui/preferences/plugin/PluginListPanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/plugin/PluginListPanel.java	(revision 2924)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/plugin/PluginListPanel.java	(revision 2924)
@@ -0,0 +1,144 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.preferences.plugin;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.awt.Font;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.List;
+import java.util.logging.Logger;
+
+import javax.swing.JCheckBox;
+import javax.swing.JLabel;
+import javax.swing.event.HyperlinkEvent;
+import javax.swing.event.HyperlinkListener;
+import javax.swing.event.HyperlinkEvent.EventType;
+
+import org.openstreetmap.josm.gui.JMultilineLabel;
+import org.openstreetmap.josm.gui.widgets.HtmlPanel;
+import org.openstreetmap.josm.gui.widgets.VerticallyScrollablePanel;
+import org.openstreetmap.josm.plugins.PluginInformation;
+import org.openstreetmap.josm.tools.OpenBrowser;
+
+public class PluginListPanel extends VerticallyScrollablePanel{
+    private static final Logger logger = Logger.getLogger(PluginListPanel.class.getName());
+
+    private PluginPreferencesModel model;
+
+    public PluginListPanel() {
+        model = new PluginPreferencesModel();
+        setLayout(new GridBagLayout());
+    }
+
+    public PluginListPanel(PluginPreferencesModel model) {
+        this.model = model;
+        setLayout(new GridBagLayout());
+    }
+
+    protected String formatPluginRemoteVersion(PluginInformation pi) {
+        StringBuilder sb = new StringBuilder();
+        if (pi.version == null || pi.version.trim().equals("")) {
+            sb.append(tr("unknown"));
+        } else {
+            sb.append(pi.version);
+            if (pi.oldmode) {
+                sb.append("*");
+            }
+        }
+        return sb.toString();
+    }
+
+    protected String formatPluginLocalVersion(PluginInformation pi) {
+        if (pi == null) return tr("unknown");
+        if (pi.localversion == null || pi.localversion.trim().equals(""))
+            return tr("unknown");
+        return pi.localversion;
+    }
+
+    protected String formatCheckboxTooltipText(PluginInformation pi) {
+        if (pi == null) return "";
+        if (pi.downloadlink == null)
+            return tr("Plugin bundled with JOSM");
+        else
+            return pi.downloadlink;
+    }
+
+    public void displayEmptyPluginListInformation() {
+        GridBagConstraints gbc = new GridBagConstraints();
+        gbc.gridx = 0;
+        gbc.anchor = GridBagConstraints.CENTER;
+        gbc.fill = GridBagConstraints.BOTH;
+        gbc.insets = new Insets(40,0,40,0);
+        gbc.weightx = 1.0;
+        gbc.weighty = 1.0;
+
+        JMultilineLabel hint = new JMultilineLabel("");
+        hint.setFont(hint.getFont().deriveFont(Font.PLAIN));
+        hint.setHorizontalAlignment(JLabel.CENTER);
+        hint.setText(
+                "<html>"
+                + tr("Please click on <strong>Download list</strong> to download and display a list of available plugins.")
+                + "</html>"
+        );
+        add(hint, gbc);
+    }
+
+    public void refreshView() {
+        List<PluginInformation> displayedPlugins = model.getDisplayedPlugins();
+        removeAll();
+
+        GridBagConstraints gbc = new GridBagConstraints();
+        gbc.gridx = 0;
+        gbc.anchor = GridBagConstraints.NORTHWEST;
+        gbc.fill = GridBagConstraints.HORIZONTAL;
+        gbc.weightx = 1.0;
+
+        if (displayedPlugins.isEmpty()) {
+            displayEmptyPluginListInformation();
+            return;
+        }
+
+        int row = -1;
+        for (final PluginInformation pi : displayedPlugins) {
+            boolean selected = model.isSelectedPlugin(pi.getName());
+            String remoteversion = formatPluginRemoteVersion(pi);
+            String localversion = formatPluginLocalVersion(model.getPluginInformation(pi.getName()));
+
+            final JCheckBox cbPlugin = new JCheckBox(
+                    tr("{0}: Version {1} (local: {2})", pi.getName(), remoteversion, localversion)
+            );
+            cbPlugin.setSelected(selected);
+            cbPlugin.setToolTipText(formatCheckboxTooltipText(pi));
+            cbPlugin.addActionListener(new ActionListener(){
+                public void actionPerformed(ActionEvent e) {
+                    model.setPluginSelected(pi.getName(), cbPlugin.isSelected());
+                }
+            });
+            gbc.gridy = ++row;
+            gbc.insets = new Insets(5,5,0,5);
+            gbc.weighty = 0.0;
+            add(cbPlugin, gbc);
+
+            HtmlPanel description = new HtmlPanel();
+            description.setText(pi.getDescriptionAsHtml());
+            description.getEditorPane().addHyperlinkListener(new HyperlinkListener() {
+                public void hyperlinkUpdate(HyperlinkEvent e) {
+                    if(e.getEventType() == EventType.ACTIVATED) {
+                        OpenBrowser.displayUrl(e.getURL().toString());
+                    }
+                }
+            });
+
+            gbc.gridy = ++row;
+            gbc.insets = new Insets(3,25,5,5);
+            gbc.weighty = 1.0;
+            add(description, gbc);
+        }
+        revalidate();
+        repaint();
+    }
+}
Index: trunk/src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreferencesPanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreferencesPanel.java	(revision 2923)
+++ 	(revision )
@@ -1,144 +1,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.gui.preferences.plugin;
-
-import static org.openstreetmap.josm.tools.I18n.tr;
-
-import java.awt.Font;
-import java.awt.GridBagConstraints;
-import java.awt.GridBagLayout;
-import java.awt.Insets;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.util.List;
-import java.util.logging.Logger;
-
-import javax.swing.JCheckBox;
-import javax.swing.JLabel;
-import javax.swing.event.HyperlinkEvent;
-import javax.swing.event.HyperlinkListener;
-import javax.swing.event.HyperlinkEvent.EventType;
-
-import org.openstreetmap.josm.gui.JMultilineLabel;
-import org.openstreetmap.josm.gui.widgets.HtmlPanel;
-import org.openstreetmap.josm.gui.widgets.VerticallyScrollablePanel;
-import org.openstreetmap.josm.plugins.PluginInformation;
-import org.openstreetmap.josm.tools.OpenBrowser;
-
-public class PluginPreferencesPanel extends VerticallyScrollablePanel{
-    private static final Logger logger = Logger.getLogger(PluginPreferencesPanel.class.getName());
-
-    private PluginPreferencesModel model;
-
-    public PluginPreferencesPanel() {
-        model = new PluginPreferencesModel();
-        setLayout(new GridBagLayout());
-    }
-
-    public PluginPreferencesPanel(PluginPreferencesModel model) {
-        this.model = model;
-        setLayout(new GridBagLayout());
-    }
-
-    protected String formatPluginRemoteVersion(PluginInformation pi) {
-        StringBuilder sb = new StringBuilder();
-        if (pi.version == null || pi.version.trim().equals("")) {
-            sb.append(tr("unknown"));
-        } else {
-            sb.append(pi.version);
-            if (pi.oldmode) {
-                sb.append("*");
-            }
-        }
-        return sb.toString();
-    }
-
-    protected String formatPluginLocalVersion(PluginInformation pi) {
-        if (pi == null) return tr("unknown");
-        if (pi.localversion == null || pi.localversion.trim().equals(""))
-            return tr("unknown");
-        return pi.localversion;
-    }
-
-    protected String formatCheckboxTooltipText(PluginInformation pi) {
-        if (pi == null) return "";
-        if (pi.downloadlink == null)
-            return tr("Plugin bundled with JOSM");
-        else
-            return pi.downloadlink;
-    }
-
-    public void displayEmptyPluginListInformation() {
-        GridBagConstraints gbc = new GridBagConstraints();
-        gbc.gridx = 0;
-        gbc.anchor = GridBagConstraints.CENTER;
-        gbc.fill = GridBagConstraints.BOTH;
-        gbc.insets = new Insets(40,0,40,0);
-        gbc.weightx = 1.0;
-        gbc.weighty = 1.0;
-
-        JMultilineLabel hint = new JMultilineLabel("");
-        hint.setFont(hint.getFont().deriveFont(Font.PLAIN));
-        hint.setHorizontalAlignment(JLabel.CENTER);
-        hint.setText(
-                "<html>"
-                + tr("Please click on <strong>Download list</strong> to download and display a list of available plugins.")
-                + "</html>"
-        );
-        add(hint, gbc);
-    }
-
-    public void refreshView() {
-        List<PluginInformation> displayedPlugins = model.getDisplayedPlugins();
-        removeAll();
-
-        GridBagConstraints gbc = new GridBagConstraints();
-        gbc.gridx = 0;
-        gbc.anchor = GridBagConstraints.NORTHWEST;
-        gbc.fill = GridBagConstraints.HORIZONTAL;
-        gbc.weightx = 1.0;
-
-        if (displayedPlugins.isEmpty()) {
-            displayEmptyPluginListInformation();
-            return;
-        }
-
-        int row = -1;
-        for (final PluginInformation pi : displayedPlugins) {
-            boolean selected = model.isSelectedPlugin(pi.getName());
-            String remoteversion = formatPluginRemoteVersion(pi);
-            String localversion = formatPluginLocalVersion(model.getPluginInformation(pi.getName()));
-
-            final JCheckBox cbPlugin = new JCheckBox(
-                    tr("{0}: Version {1} (local: {2})", pi.getName(), remoteversion, localversion)
-            );
-            cbPlugin.setSelected(selected);
-            cbPlugin.setToolTipText(formatCheckboxTooltipText(pi));
-            cbPlugin.addActionListener(new ActionListener(){
-                public void actionPerformed(ActionEvent e) {
-                    model.setPluginSelected(pi.getName(), cbPlugin.isSelected());
-                }
-            });
-            gbc.gridy = ++row;
-            gbc.insets = new Insets(5,5,0,5);
-            gbc.weighty = 0.0;
-            add(cbPlugin, gbc);
-
-            HtmlPanel description = new HtmlPanel();
-            description.setText(pi.getDescriptionAsHtml());
-            description.getEditorPane().addHyperlinkListener(new HyperlinkListener() {
-                public void hyperlinkUpdate(HyperlinkEvent e) {
-                    if(e.getEventType() == EventType.ACTIVATED) {
-                        OpenBrowser.displayUrl(e.getURL().toString());
-                    }
-                }
-            });
-
-            gbc.gridy = ++row;
-            gbc.insets = new Insets(3,25,5,5);
-            gbc.weighty = 1.0;
-            add(description, gbc);
-        }
-        revalidate();
-        repaint();
-    }
-}
Index: trunk/src/org/openstreetmap/josm/gui/preferences/plugin/PluginUpdatePolicyPanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/plugin/PluginUpdatePolicyPanel.java	(revision 2924)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/plugin/PluginUpdatePolicyPanel.java	(revision 2924)
@@ -0,0 +1,247 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.preferences.plugin;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.awt.FlowLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.swing.ButtonGroup;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+import javax.swing.JTextField;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.gui.JMultilineLabel;
+import org.openstreetmap.josm.gui.widgets.SelectAllOnFocusGainedDecorator;
+
+/**
+ * A panel for configuring whether JOSM shall update plugins at startup.
+ *
+ */
+public class PluginUpdatePolicyPanel extends JPanel {
+
+    private enum Policy {
+        ASK ("ask"),
+        ALWAYS("always"),
+        NEVER("never");
+
+        private String preferenceValue;
+        Policy(String preferenceValue) {
+            this.preferenceValue = preferenceValue;
+        }
+
+        public String getPreferencesValue() {
+            return preferenceValue;
+        }
+
+        static Policy fromPreferenceValue(String preferenceValue) {
+            if (preferenceValue == null) return null;
+            preferenceValue = preferenceValue.trim().toLowerCase();
+            for (Policy p: Policy.values()) {
+                if (p.getPreferencesValue().equals(preferenceValue))
+                    return p;
+            }
+            return null;
+        }
+    }
+
+    private ButtonGroup bgVersionBasedUpdatePolicy;
+    private ButtonGroup bgTimeBasedUpdatePolicy;
+    private Map<Policy, JRadioButton> rbVersionBasedUpatePolicy;
+    private Map<Policy, JRadioButton> rbTimeBasedUpatePolicy;
+    private JTextField tfUpdateInterval;
+    private JLabel lblUpdateInterval;
+
+    protected JPanel buildVersionBasedUpdatePolicyPanel() {
+        JPanel pnl = new JPanel(new GridBagLayout());
+        GridBagConstraints gc = new GridBagConstraints();
+        gc.anchor = GridBagConstraints.NORTHWEST;
+        gc.fill = GridBagConstraints.HORIZONTAL;
+        gc.weightx  =1.0;
+
+        bgVersionBasedUpdatePolicy = new ButtonGroup();
+        rbVersionBasedUpatePolicy = new HashMap<Policy, JRadioButton>();
+        JRadioButton btn = new JRadioButton(tr("Ask before updating"));
+        rbVersionBasedUpatePolicy.put(Policy.ASK, btn);
+        bgVersionBasedUpdatePolicy.add(btn);
+
+        btn = new JRadioButton(tr("Always update withouth asking"));
+        rbVersionBasedUpatePolicy.put(Policy.ALWAYS, btn);
+        bgVersionBasedUpdatePolicy.add(btn);
+
+        btn = new JRadioButton(tr("Never update"));
+        rbVersionBasedUpatePolicy.put(Policy.NEVER, btn);
+        bgVersionBasedUpdatePolicy.add(btn);
+
+        JMultilineLabel lbl = new JMultilineLabel(tr("Please decide whether JOSM shall automatically update active plugins at startup after an update of JOSM itself."));
+        gc.gridy=0;
+        pnl.add(lbl, gc);
+        for (Policy p: Policy.values()) {
+            gc.gridy++;
+            pnl.add(rbVersionBasedUpatePolicy.get(p), gc);
+        }
+        return pnl;
+    }
+
+    protected JPanel buildUpdateIntervalPanel() {
+        JPanel pnl = new JPanel(new FlowLayout(FlowLayout.LEFT));
+        pnl.add(lblUpdateInterval = new JLabel(tr("Update interval (in days):")));
+        pnl.add(tfUpdateInterval = new JTextField(5));
+        SelectAllOnFocusGainedDecorator.decorate(tfUpdateInterval);
+        return pnl;
+    }
+
+    protected JPanel buildTimeBasedUpdatePolicyPanel() {
+        JPanel pnl = new JPanel(new GridBagLayout());
+        GridBagConstraints gc = new GridBagConstraints();
+        gc.anchor = GridBagConstraints.NORTHWEST;
+        gc.fill = GridBagConstraints.HORIZONTAL;
+        gc.weightx  =1.0;
+
+        TimeBasedPolicyChangeListener changeListener = new TimeBasedPolicyChangeListener();
+
+        bgTimeBasedUpdatePolicy = new ButtonGroup();
+        rbTimeBasedUpatePolicy = new HashMap<Policy, JRadioButton>();
+        JRadioButton btn = new JRadioButton(tr("Ask before updating"));
+        btn.addChangeListener(changeListener);
+        rbTimeBasedUpatePolicy.put(Policy.ASK, btn);
+        bgTimeBasedUpdatePolicy.add(btn);
+
+        btn = new JRadioButton(tr("Always update withouth asking"));
+        btn.addChangeListener(changeListener);
+        rbTimeBasedUpatePolicy.put(Policy.ALWAYS, btn);
+        bgTimeBasedUpdatePolicy.add(btn);
+
+        btn = new JRadioButton(tr("Never update"));
+        btn.addChangeListener(changeListener);
+        rbTimeBasedUpatePolicy.put(Policy.NEVER, btn);
+        bgTimeBasedUpdatePolicy.add(btn);
+
+        JMultilineLabel lbl = new JMultilineLabel(tr("Please decide whether JOSM shall automatically update active plugins after a certain periode of time."));
+        gc.gridy=0;
+        pnl.add(lbl, gc);
+        for (Policy p: Policy.values()) {
+            gc.gridy++;
+            pnl.add(rbTimeBasedUpatePolicy.get(p), gc);
+        }
+        gc.gridy++;
+        pnl.add(buildUpdateIntervalPanel(), gc);
+        return pnl;
+    }
+
+    protected void build() {
+        setLayout(new GridBagLayout());
+        GridBagConstraints gc = new GridBagConstraints();
+        gc.anchor = GridBagConstraints.NORTHWEST;
+        gc.fill = GridBagConstraints.HORIZONTAL;
+        gc.weightx  =1.0;
+        gc.insets = new Insets(5,5,10,5);
+
+        add(buildVersionBasedUpdatePolicyPanel(), gc);
+        gc.gridy = 1;
+        add(buildTimeBasedUpdatePolicyPanel(), gc);
+
+        gc.gridy = 2;
+        gc.weighty = 1.0;
+        gc.fill = GridBagConstraints.BOTH;
+        add(new JPanel(), gc);
+    }
+
+    public PluginUpdatePolicyPanel() {
+        build();
+        initFromPreferences();
+    }
+
+    /**
+     * Loads the relevant preference values from the JOSM preferences
+     * 
+     */
+    public void initFromPreferences() {
+        String pref = Main.pref.get("pluginmanager.version-based-update.policy", "ask");
+        Policy p = Policy.fromPreferenceValue(pref);
+        if (p == null) {
+            p = Policy.ASK;
+        }
+        rbVersionBasedUpatePolicy.get(p).setSelected(true);
+
+        pref = Main.pref.get("pluginmanager.time-based-update.policy", "ask");
+        p = Policy.fromPreferenceValue(pref);
+        if (p == null) {
+            p = Policy.ASK;
+        }
+        rbTimeBasedUpatePolicy.get(p).setSelected(true);
+
+        pref = Main.pref.get("pluginmanager.warntime", null);
+        int days = 0;
+        if (pref != null) {
+            // remove legacy preference
+            Main.pref.put("pluginmanager.warntime", null);
+            pref = pref.trim();
+            try {
+                days = Integer.parseInt(pref);
+            } catch(NumberFormatException e) {
+                // ignore - load from preference pluginmanager.time-based-update.interval
+            }
+            if (days <= 0) {
+                days = 60;
+            }
+        }
+        if (days == 0) {
+            days =Main.pref.getInteger("preference pluginmanager.time-based-update.interval", 60);
+        }
+        tfUpdateInterval.setText(Integer.toString(days));
+    }
+
+    /**
+     * Remebers the update policy preference settings on the JOSM preferences
+     */
+    public void rememberInPreferences() {
+
+        // remember policy for version based update
+        //
+        for (Policy p: Policy.values()) {
+            if (rbVersionBasedUpatePolicy.get(p).isSelected()) {
+                Main.pref.put("pluginmanager.version-based-update.policy", p.getPreferencesValue());
+                break;
+            }
+        }
+
+        // remember policy for time based update
+        //
+        for (Policy p: Policy.values()) {
+            if (rbTimeBasedUpatePolicy.get(p).isSelected()) {
+                Main.pref.put("pluginmanager.time-based-update.policy", p.getPreferencesValue());
+                break;
+            }
+        }
+
+        // remember update interval
+        //
+        int days = 0;
+        try {
+            days = Integer.parseInt(tfUpdateInterval.getText().trim());
+            if (days <= 0) {
+                days = 60;
+            }
+        } catch(NumberFormatException e) {
+            days = 60;
+        }
+        Main.pref.putInteger("pluginmanager.time-based-update.interval", days);
+    }
+
+    class TimeBasedPolicyChangeListener implements ChangeListener {
+        public void stateChanged(ChangeEvent e) {
+            lblUpdateInterval.setEnabled(!rbTimeBasedUpatePolicy.get(Policy.NEVER).isSelected());
+            tfUpdateInterval.setEnabled(!rbTimeBasedUpatePolicy.get(Policy.NEVER).isSelected());
+        }
+    }
+
+}
Index: trunk/src/org/openstreetmap/josm/plugins/PluginHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/plugins/PluginHandler.java	(revision 2923)
+++ trunk/src/org/openstreetmap/josm/plugins/PluginHandler.java	(revision 2924)
@@ -170,9 +170,9 @@
                 )
                 + "</html>";
-            togglePreferenceKey = "pluginmanager.dontshowagain.version";
+            togglePreferenceKey = "pluginmanager.version-based-update.policy";
         }  else {
             long tim = System.currentTimeMillis();
             long last = Main.pref.getLong("pluginmanager.lastupdate", 0);
-            Integer maxTime = Main.pref.getInteger("pluginmanager.warntime", 60);
+            Integer maxTime = Main.pref.getInteger("pluginmanager.time-based-update.interval", 60);
             long d = (tim - last) / (24 * 60 * 60 * 1000l);
             if ((last <= 0) || (maxTime <= 0)) {
@@ -183,5 +183,5 @@
                     + tr("Last plugin update more than {0} days ago.", d)
                     + "</html>";
-                togglePreferenceKey = "pluginmanager.dontshowagain.time";
+                togglePreferenceKey = "pluginmanager.time-based-update.policy";
             }
         }
@@ -209,7 +209,27 @@
         // check whether automatic update at startup was disabled
         //
-        boolean doAsk = !Main.pref.getBoolean(togglePreferenceKey, false);
-        if (! doAsk) return false;
-
+        String policy = Main.pref.get(togglePreferenceKey, "ask");
+        policy = policy.trim().toLowerCase();
+        if (policy.equals("never")) {
+            if (togglePreferenceKey.equals("pluginmanager.version-based-update.policy")) {
+                System.out.println(tr("Skipping plugin update after JOSM upgrade. Automatic update at startup is disabled."));
+            } else if (togglePreferenceKey.equals("pluginmanager.time-based-update.policy")) {
+                System.out.println(tr("Skipping plugin update after elapsed update interval. Automatic update at startup is disabled."));
+            }
+            return false;
+        }
+
+        if (policy.equals("always")) {
+            if (togglePreferenceKey.equals("pluginmanager.time-based-update.policy")) {
+                System.out.println(tr("Running plugin update after JOSM upgrade. Automatic update at startup is enabled."));
+            } else if (togglePreferenceKey.equals("pluginmanager.time-based-update.policy")) {
+                System.out.println(tr("Running plugin update after elapsed update interval. Automatic update at startup is disabled."));
+            }
+            return true;
+        }
+
+        if (!policy.equals("ask")) {
+            System.err.println(tr("Unexpected value ''{0}'' for preference ''{1}''. Assuming value ''ask''.", policy, togglePreferenceKey));
+        }
         int ret = HelpAwareOptionPane.showOptionDialog(
                 parent,
@@ -220,8 +240,20 @@
                 options,
                 options[0],
-                ht("/Plugin/AutomaticUpdate")
-        );
-
-        pnlMessage.rememberDontShowAgain(togglePreferenceKey);
+                ht("/Preferences/Plugins#AutomaticUpdate")
+        );
+
+        if (pnlMessage.isRememberDecision()) {
+            switch(ret) {
+            case 0:
+                Main.pref.put(togglePreferenceKey, "always");
+                break;
+            case JOptionPane.CLOSED_OPTION:
+            case 1:
+                Main.pref.put(togglePreferenceKey, "never");
+                break;
+            }
+        } else {
+            Main.pref.put(togglePreferenceKey, "ask");
+        }
         return ret == 0;
     }
@@ -888,5 +920,5 @@
             gc.fill = GridBagConstraints.HORIZONTAL;
             gc.weighty = 0.0;
-            add(cbDontShowAgain = new JCheckBox(tr("Do not check and ask again at startup (remembers choice)")), gc);
+            add(cbDontShowAgain = new JCheckBox(tr("Do not ask again and remember my decision (go to Preferences->Plugins to change it later)")), gc);
             cbDontShowAgain.setFont(cbDontShowAgain.getFont().deriveFont(Font.PLAIN));
         }
@@ -901,9 +933,11 @@
 
         public void initDontShowAgain(String preferencesKey) {
-            cbDontShowAgain.setSelected(Main.pref.getBoolean(preferencesKey, false));
-        }
-
-        public void rememberDontShowAgain(String preferenceKey) {
-            Main.pref.put(preferenceKey, cbDontShowAgain.isSelected());
+            String policy = Main.pref.get(preferencesKey, "ask");
+            policy = policy.trim().toLowerCase();
+            cbDontShowAgain.setSelected(! policy.equals("ask"));
+        }
+
+        public boolean isRememberDecision() {
+            return cbDontShowAgain.isSelected();
         }
     }
