Index: trunk/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java	(revision 10567)
+++ trunk/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java	(revision 10568)
@@ -73,5 +73,4 @@
 import org.openstreetmap.josm.data.imagery.TileLoaderFactory;
 import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
-import org.openstreetmap.josm.data.preferences.BooleanProperty;
 import org.openstreetmap.josm.data.preferences.IntegerProperty;
 import org.openstreetmap.josm.gui.ExtendedDialog;
@@ -83,4 +82,7 @@
 import org.openstreetmap.josm.gui.dialogs.LayerListPopup;
 import org.openstreetmap.josm.gui.layer.imagery.ImageryFilterSettings.FilterChangeListener;
+import org.openstreetmap.josm.gui.layer.imagery.TileSourceDisplaySettings;
+import org.openstreetmap.josm.gui.layer.imagery.TileSourceDisplaySettings.DisplaySettingsChangeEvent;
+import org.openstreetmap.josm.gui.layer.imagery.TileSourceDisplaySettings.DisplaySettingsChangeListener;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 import org.openstreetmap.josm.gui.util.GuiHelper;
@@ -100,6 +102,12 @@
  */
 public abstract class AbstractTileSourceLayer<T extends AbstractTMSTileSource> extends ImageryLayer
-implements ImageObserver, TileLoaderListener, ZoomChangeListener, FilterChangeListener {
+implements ImageObserver, TileLoaderListener, ZoomChangeListener, FilterChangeListener, DisplaySettingsChangeListener {
     private static final String PREFERENCE_PREFIX = "imagery.generic";
+    /**
+     * Registers all setting properties
+     */
+    static {
+        new TileSourceDisplaySettings();
+    }
 
     /** maximum zoom level supported */
@@ -109,10 +117,4 @@
     private static final Font InfoFont = new Font("sansserif", Font.BOLD, 13);
 
-    /** do set autozoom when creating a new layer */
-    public static final BooleanProperty PROP_DEFAULT_AUTOZOOM = new BooleanProperty(PREFERENCE_PREFIX + ".default_autozoom", true);
-    /** do set autoload when creating a new layer */
-    public static final BooleanProperty PROP_DEFAULT_AUTOLOAD = new BooleanProperty(PREFERENCE_PREFIX + ".default_autoload", true);
-    /** do show errors per default */
-    public static final BooleanProperty PROP_DEFAULT_SHOWERRORS = new BooleanProperty(PREFERENCE_PREFIX + ".default_showerrors", true);
     /** minimum zoom level to show to user */
     public static final IntegerProperty PROP_MIN_ZOOM_LVL = new IntegerProperty(PREFERENCE_PREFIX + ".min_zoom_lvl", 2);
@@ -130,12 +132,4 @@
     private final AttributionSupport attribution = new AttributionSupport();
     private final TileHolder clickedTileHolder = new TileHolder();
-
-    // needed public access for session exporter
-    /** if layers changes automatically, when user zooms in */
-    public boolean autoZoom = PROP_DEFAULT_AUTOZOOM.get();
-    /** if layer automatically loads new tiles */
-    public boolean autoLoad = PROP_DEFAULT_AUTOLOAD.get();
-    /** if layer should show errors on tiles */
-    public boolean showErrors = PROP_DEFAULT_SHOWERRORS.get();
 
     /**
@@ -168,4 +162,7 @@
         }
     };
+
+    private final TileSourceDisplaySettings displaySettings = createDisplaySettings();
+
     /**
      * Creates Tile Source based Imagery Layer based on Imagery Info
@@ -177,4 +174,23 @@
         this.setVisible(true);
         getFilterSettings().addFilterChangeListener(this);
+        getDisplaySettings().addSettingsChangeListener(this);
+    }
+
+    /**
+     * This method creates the {@link TileSourceDisplaySettings} object. Subclasses may implement it to e.g. change the prefix.
+     * @return The object.
+     * @since 10568
+     */
+    protected TileSourceDisplaySettings createDisplaySettings() {
+        return new TileSourceDisplaySettings();
+    }
+
+    /**
+     * Gets the {@link TileSourceDisplaySettings} instance associated with this tile source.
+     * @return The tile source display settings
+     * @since 10568
+     */
+    public TileSourceDisplaySettings getDisplaySettings() {
+        return displaySettings;
     }
 
@@ -411,9 +427,5 @@
         @Override
         public void actionPerformed(ActionEvent ae) {
-            autoZoom = !autoZoom;
-            if (autoZoom && getBestZoom() != currentZoomLevel) {
-                setZoomLevel(getBestZoom());
-                redraw();
-            }
+            getDisplaySettings().setAutoZoom(!getDisplaySettings().isAutoZoom());
         }
 
@@ -421,5 +433,5 @@
         public Component createMenuComponent() {
             JCheckBoxMenuItem item = new JCheckBoxMenuItem(this);
-            item.setSelected(autoZoom);
+            item.setSelected(getDisplaySettings().isAutoZoom());
             return item;
         }
@@ -438,6 +450,5 @@
         @Override
         public void actionPerformed(ActionEvent ae) {
-            autoLoad = !autoLoad;
-            if (autoLoad) redraw();
+            getDisplaySettings().setAutoLoad(!getDisplaySettings().isAutoLoad());
         }
 
@@ -445,5 +456,5 @@
         public Component createMenuComponent() {
             JCheckBoxMenuItem item = new JCheckBoxMenuItem(this);
-            item.setSelected(autoLoad);
+            item.setSelected(getDisplaySettings().isAutoLoad());
             return item;
         }
@@ -462,6 +473,5 @@
         @Override
         public void actionPerformed(ActionEvent ae) {
-            showErrors = !showErrors;
-            redraw();
+            getDisplaySettings().setShowErrors(!getDisplaySettings().isShowErrors());
         }
 
@@ -469,5 +479,5 @@
         public Component createMenuComponent() {
             JCheckBoxMenuItem item = new JCheckBoxMenuItem(this);
-            item.setSelected(showErrors);
+            item.setSelected(getDisplaySettings().isShowErrors());
             return item;
         }
@@ -519,5 +529,5 @@
         ZoomToBestAction() {
             super(tr("Change resolution"));
-            setEnabled(!autoZoom && getBestZoom() != currentZoomLevel);
+            setEnabled(!getDisplaySettings().isAutoZoom() && getBestZoom() != currentZoomLevel);
         }
 
@@ -532,5 +542,5 @@
         IncreaseZoomAction() {
             super(tr("Increase zoom"));
-            setEnabled(!autoZoom && zoomIncreaseAllowed());
+            setEnabled(!getDisplaySettings().isAutoZoom() && zoomIncreaseAllowed());
         }
 
@@ -545,5 +555,5 @@
         DecreaseZoomAction() {
             super(tr("Decrease zoom"));
-            setEnabled(!autoZoom && zoomDecreaseAllowed());
+            setEnabled(!getDisplaySettings().isAutoZoom() && zoomDecreaseAllowed());
         }
 
@@ -695,4 +705,27 @@
         Main.info("AbstractTileSourceLayer: estimated visible tiles: {0}, estimated cache size: {1}", visibileTiles, ret);
         return ret;
+    }
+
+    @Override
+    public void displaySettingsChanged(DisplaySettingsChangeEvent e) {
+        if (tileSource == null) {
+            return;
+        }
+        switch (e.getChangedSetting()) {
+        case TileSourceDisplaySettings.AUTO_ZOOM:
+            if (getDisplaySettings().isAutoZoom() && getBestZoom() != currentZoomLevel) {
+                setZoomLevel(getBestZoom());
+                redraw();
+            }
+            break;
+        case TileSourceDisplaySettings.AUTO_LOAD:
+            if (getDisplaySettings().isAutoLoad()) {
+                redraw();
+            }
+            break;
+        default:
+            // trigger a redraw just to be sure.
+            redraw();
+        }
     }
 
@@ -1143,5 +1176,5 @@
         }*/
 
-        if (tile.hasError() && showErrors) {
+        if (tile.hasError() && getDisplaySettings().isShowErrors()) {
             myDrawString(g, tr("Error") + ": " + tr(tile.getErrorMessage()), p.x + 2, texty);
             //texty += 1 + fontHeight;
@@ -1369,5 +1402,5 @@
 
         private void loadAllTiles(boolean force) {
-            if (!autoLoad && !force)
+            if (!getDisplaySettings().isAutoLoad() && !force)
                 return;
             List<Tile> allTiles = allTilesCreate();
@@ -1379,5 +1412,5 @@
 
         private void loadAllErrorTiles(boolean force) {
-            if (!autoLoad && !force)
+            if (!getDisplaySettings().isAutoLoad() && !force)
                 return;
             for (Tile t : this.allTilesCreate()) {
@@ -1477,5 +1510,5 @@
 
         int zoom = currentZoomLevel;
-        if (autoZoom) {
+        if (getDisplaySettings().isAutoZoom()) {
             zoom = getBestZoom();
         }
@@ -1487,5 +1520,5 @@
 
         boolean noTilesAtZoom = false;
-        if (autoZoom && autoLoad) {
+        if (getDisplaySettings().isAutoZoom() && getDisplaySettings().isAutoLoad()) {
             // Auto-detection of tilesource maxzoom (currently fully works only for Bing)
             TileSetInfo tsi = dts.getTileSetInfo(zoom);
@@ -1523,5 +1556,5 @@
             }
             ts = dts.getTileSet(zoom);
-        } else if (autoZoom) {
+        } else if (getDisplaySettings().isAutoZoom()) {
             setZoomLevel(zoom);
         }
@@ -1542,5 +1575,5 @@
         int[] otherZooms = {-1, 1, -2, 2, -3, -4, -5};
         for (int zoomOffset : otherZooms) {
-            if (!autoZoom) {
+            if (!getDisplaySettings().isAutoZoom()) {
                 break;
             }
@@ -1598,5 +1631,5 @@
         } else if (ts.tooLarge()) {
             myDrawString(g, tr("zoom in to load more tiles"), 120, 120);
-        } else if (!autoZoom && ts.tooSmall()) {
+        } else if (!getDisplaySettings().isAutoZoom() && ts.tooSmall()) {
             myDrawString(g, tr("increase tiles zoom level (change resolution) to see more detail"), 120, 120);
         }
@@ -1710,5 +1743,5 @@
     @Override
     public String getToolTipText() {
-        if (autoLoad) {
+        if (getDisplaySettings().isAutoLoad()) {
             return tr("{0} ({1}), automatically downloading in zoom {2}", this.getClass().getSimpleName(), getName(), currentZoomLevel);
         } else {
Index: trunk/src/org/openstreetmap/josm/gui/layer/WMSLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/WMSLayer.java	(revision 10567)
+++ trunk/src/org/openstreetmap/josm/gui/layer/WMSLayer.java	(revision 10568)
@@ -29,4 +29,5 @@
 import org.openstreetmap.josm.data.projection.Projection;
 import org.openstreetmap.josm.gui.ExtendedDialog;
+import org.openstreetmap.josm.gui.layer.imagery.TileSourceDisplaySettings;
 
 /**
@@ -36,11 +37,17 @@
  */
 public class WMSLayer extends AbstractCachedTileSourceLayer<TemplatedWMSTileSource> {
-    private static final String PREFERENCE_PREFIX = "imagery.wms.";
+    private static final String PREFERENCE_PREFIX = "imagery.wms";
+    /**
+     * Registers all setting properties
+     */
+    static {
+        new TileSourceDisplaySettings(PREFERENCE_PREFIX);
+    }
 
     /** default tile size for WMS Layer */
-    public static final IntegerProperty PROP_IMAGE_SIZE = new IntegerProperty(PREFERENCE_PREFIX + "imageSize", 512);
+    public static final IntegerProperty PROP_IMAGE_SIZE = new IntegerProperty(PREFERENCE_PREFIX + ".imageSize", 512);
 
     /** should WMS layer autozoom in default mode */
-    public static final BooleanProperty PROP_DEFAULT_AUTOZOOM = new BooleanProperty(PREFERENCE_PREFIX + "default_autozoom", true);
+    public static final BooleanProperty PROP_DEFAULT_AUTOZOOM = new BooleanProperty(PREFERENCE_PREFIX + ".default_autozoom", true);
 
     private static final String CACHE_REGION_NAME = "WMS";
@@ -55,5 +62,9 @@
         super(info);
         this.supportedProjections = new TreeSet<>(info.getServerProjections());
-        this.autoZoom = PROP_DEFAULT_AUTOZOOM.get();
+    }
+
+    @Override
+    protected TileSourceDisplaySettings createDisplaySettings() {
+        return new TileSourceDisplaySettings(PREFERENCE_PREFIX);
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/layer/WMTSLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/WMTSLayer.java	(revision 10567)
+++ trunk/src/org/openstreetmap/josm/gui/layer/WMTSLayer.java	(revision 10568)
@@ -13,6 +13,6 @@
 import org.openstreetmap.josm.data.imagery.WMSCachedTileLoader;
 import org.openstreetmap.josm.data.imagery.WMTSTileSource;
-import org.openstreetmap.josm.data.preferences.BooleanProperty;
 import org.openstreetmap.josm.data.projection.Projection;
+import org.openstreetmap.josm.gui.layer.imagery.TileSourceDisplaySettings;
 
 /**
@@ -27,8 +27,13 @@
  */
 public class WMTSLayer extends AbstractCachedTileSourceLayer<WMTSTileSource> implements NativeScaleLayer {
+    private static final String PREFERENCE_PREFIX = "imagery.wmts";
+
     /**
-     * default setting of autozoom per layer
+     * Registers all setting properties
      */
-    public static final BooleanProperty PROP_DEFAULT_AUTOZOOM_WMTS = new BooleanProperty("imagery.wmts.default_autozoom", true);
+    static {
+        new TileSourceDisplaySettings(PREFERENCE_PREFIX);
+    }
+
     private static final String CACHE_REGION_NAME = "WMTS";
 
@@ -39,5 +44,9 @@
     public WMTSLayer(ImageryInfo info) {
         super(info);
-        autoZoom = PROP_DEFAULT_AUTOZOOM_WMTS.get();
+    }
+
+    @Override
+    protected TileSourceDisplaySettings createDisplaySettings() {
+        return new TileSourceDisplaySettings(PREFERENCE_PREFIX);
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/layer/imagery/TileSourceDisplaySettings.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/imagery/TileSourceDisplaySettings.java	(revision 10568)
+++ trunk/src/org/openstreetmap/josm/gui/layer/imagery/TileSourceDisplaySettings.java	(revision 10568)
@@ -0,0 +1,281 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.layer.imagery;
+
+import java.util.Map;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import org.openstreetmap.gui.jmapviewer.interfaces.TileSource;
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.preferences.BooleanProperty;
+import org.openstreetmap.josm.gui.layer.AbstractTileSourceLayer;
+
+/**
+ * This are the preferences of how to display a {@link TileSource}.
+ * <p>
+ * They have been extracted from the {@link AbstractTileSourceLayer}. Each layer has one set of such settings.
+ * @author michael
+ * @since 10568
+ */
+public class TileSourceDisplaySettings {
+    /**
+     * A string returned by {@link DisplaySettingsChangeEvent#getChangedSetting()} if auto load was changed.
+     * @see TileSourceDisplaySettings#isAutoLoad()
+     */
+    public static final String AUTO_LOAD = "automatic-downloading";
+
+    /**
+     * A string returned by {@link DisplaySettingsChangeEvent#getChangedSetting()} if auto zoom was changed.
+     * @see TileSourceDisplaySettings#isAutoZoom()
+     */
+    public static final String AUTO_ZOOM = "automatically-change-resolution";
+
+    /**
+     * A string returned by {@link DisplaySettingsChangeEvent#getChangedSetting()} if the sow errors property was changed.
+     * @see TileSourceDisplaySettings#isShowErrors()
+     */
+    private static final String SHOW_ERRORS = "show-errors";
+
+    private static final String PREFERENCE_PREFIX = "imagery.generic";
+
+    /**
+     * The default auto load property
+     */
+    public static final BooleanProperty PROP_AUTO_LOAD = new BooleanProperty(PREFERENCE_PREFIX + ".default_autoload", true);
+
+    /**
+     * The default auto zoom property
+     */
+    public static final BooleanProperty PROP_AUTO_ZOOM = new BooleanProperty(PREFERENCE_PREFIX + ".default_autozoom", true);
+
+    /** if layers changes automatically, when user zooms in */
+    private boolean autoZoom;
+    /** if layer automatically loads new tiles */
+    private boolean autoLoad;
+    /** if layer should show errors on tiles */
+    private boolean showErrors;
+
+    private final CopyOnWriteArrayList<DisplaySettingsChangeListener> listeners = new CopyOnWriteArrayList<>();
+
+    /**
+     * Create a new {@link TileSourceDisplaySettings}
+     */
+    public TileSourceDisplaySettings() {
+        this(new String[] {PREFERENCE_PREFIX});
+    }
+
+    /**
+     * Create a new {@link TileSourceDisplaySettings}
+     * @param preferencePrefix The additional prefix to scan for preferences.
+     */
+    public TileSourceDisplaySettings(String preferencePrefix) {
+        this(PREFERENCE_PREFIX, preferencePrefix);
+    }
+
+    private TileSourceDisplaySettings(String... prefixes) {
+        autoZoom = getProperty(prefixes, "default_autozoom");
+        autoLoad = getProperty(prefixes, "default_autoload");
+        showErrors = getProperty(prefixes, "default_showerrors");
+    }
+
+    private static boolean getProperty(String[] prefixes, String name) {
+        // iterate through all values to force the preferences to receive the default value.
+        // we only support a default value of true.
+        boolean value = true;
+        for (String p : prefixes) {
+            String key = p + "." + name;
+            boolean currentValue = Main.pref.getBoolean(key, true);
+            if (!Main.pref.get(key).isEmpty()) {
+                value = currentValue;
+            }
+        }
+        return value;
+    }
+
+    /**
+     * Let the layer zoom automatically if the user zooms in
+     * @return auto zoom
+     */
+    public boolean isAutoZoom() {
+        return autoZoom;
+    }
+
+    /**
+     * Sets the auto zoom property
+     * @param autoZoom {@code true} to let the layer zoom automatically if the user zooms in
+     * @see #isAutoZoom()
+     * @see #AUTO_ZOOM
+     */
+    public void setAutoZoom(boolean autoZoom) {
+        this.autoZoom = autoZoom;
+        fireSettingsChange(AUTO_ZOOM);
+    }
+
+    /**
+     * Gets if the layer should automatically load new tiles.
+     * @return <code>true</code> if it should
+     */
+    public boolean isAutoLoad() {
+        return autoLoad;
+    }
+
+    /**
+     * Sets the auto load property
+     * @param autoLoad {@code true} if the layer should automatically load new tiles
+     * @see #isAutoLoad()
+     * @see #AUTO_LOAD
+     */
+    public void setAutoLoad(boolean autoLoad) {
+        this.autoLoad = autoLoad;
+        fireSettingsChange(AUTO_LOAD);
+    }
+
+    /**
+     * If the layer should display the errors it encountered while loading the tiles.
+     * @return <code>true</code> to show errors.
+     */
+    public boolean isShowErrors() {
+        return showErrors;
+    }
+
+    /**
+     * Sets the show errors property. Fires a change event.
+     * @param showErrors {@code true} if the layer should display the errors it encountered while loading the tiles
+     * @see #isShowErrors()
+     * @see #SHOW_ERRORS
+     */
+    public void setShowErrors(boolean showErrors) {
+        this.showErrors = showErrors;
+        fireSettingsChange(SHOW_ERRORS);
+    }
+
+    /**
+     * Notifies all listeners that the paint settings have changed
+     * @param changedSetting The setting name
+     */
+    private void fireSettingsChange(String changedSetting) {
+        DisplaySettingsChangeEvent e = new DisplaySettingsChangeEvent(changedSetting);
+        for (DisplaySettingsChangeListener l : listeners) {
+            l.displaySettingsChanged(e);
+        }
+    }
+
+    /**
+     * Add a listener that listens to display settings changes.
+     * @param l The listener
+     */
+    public void addSettingsChangeListener(DisplaySettingsChangeListener l) {
+        listeners.add(l);
+    }
+
+    /**
+     * Remove a listener that listens to display settings changes.
+     * @param l The listener
+     */
+    public void removeSettingsChangeListener(DisplaySettingsChangeListener l) {
+        listeners.remove(l);
+    }
+
+    /**
+     * Stores the current settings object to the given hashmap.
+     * @param data The map to store the settings to.
+     * @see #loadFrom(Map)
+     */
+    public void storeTo(Map<String, String> data) {
+        data.put(AUTO_LOAD, Boolean.toString(autoLoad));
+        data.put(AUTO_ZOOM, Boolean.toString(autoZoom));
+        data.put(SHOW_ERRORS, Boolean.toString(showErrors));
+    }
+
+    /**
+     * Load the settings from the given data instance.
+     * @param data The data
+     * @see #storeTo(Map)
+     */
+    public void loadFrom(Map<String, String> data) {
+        String doAutoLoad = data.get(AUTO_LOAD);
+        if (doAutoLoad != null) {
+            setAutoLoad(Boolean.parseBoolean(doAutoLoad));
+        }
+
+        String doAutoZoom = data.get(AUTO_ZOOM);
+        if (doAutoZoom != null) {
+            setAutoZoom(Boolean.parseBoolean(doAutoZoom));
+        }
+
+        String doShowErrors = data.get(SHOW_ERRORS);
+        if (doShowErrors != null) {
+            setShowErrors(Boolean.parseBoolean(doShowErrors));
+        }
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + (autoLoad ? 1231 : 1237);
+        result = prime * result + (autoZoom ? 1231 : 1237);
+        result = prime * result + (showErrors ? 1231 : 1237);
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (obj == null)
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        TileSourceDisplaySettings other = (TileSourceDisplaySettings) obj;
+        if (autoLoad != other.autoLoad)
+            return false;
+        if (autoZoom != other.autoZoom)
+            return false;
+        if (showErrors != other.showErrors)
+            return false;
+        return true;
+    }
+
+    @Override
+    public String toString() {
+        return "TileSourceDisplaySettings [autoZoom=" + autoZoom + ", autoLoad=" + autoLoad + ", showErrors="
+                + showErrors + ']';
+    }
+
+    /**
+     * A listener that listens to changes to the {@link TileSourceDisplaySettings} object.
+     * @author Michael Zangl
+     */
+    public interface DisplaySettingsChangeListener {
+        /**
+         * Called whenever the display settings have changed.
+         * @param e The change event.
+         */
+        void displaySettingsChanged(DisplaySettingsChangeEvent e);
+    }
+
+    /**
+     * An event that is created whenever the display settings change.
+     * @author Michael Zangl
+     */
+    public static final class DisplaySettingsChangeEvent {
+        private final String changedSetting;
+
+        DisplaySettingsChangeEvent(String changedSetting) {
+            this.changedSetting = changedSetting;
+        }
+
+        /**
+         * Gets the setting that was changed
+         * @return The name of the changed setting.
+         */
+        public String getChangedSetting() {
+            return changedSetting;
+        }
+
+        @Override
+        public String toString() {
+            return "DisplaySettingsChangeEvent [changedSetting=" + changedSetting + ']';
+        }
+    }
+}
Index: trunk/src/org/openstreetmap/josm/gui/preferences/imagery/TMSSettingsPanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/imagery/TMSSettingsPanel.java	(revision 10567)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/imagery/TMSSettingsPanel.java	(revision 10568)
@@ -14,4 +14,5 @@
 import org.openstreetmap.josm.data.imagery.TMSCachedTileLoader;
 import org.openstreetmap.josm.gui.layer.TMSLayer;
+import org.openstreetmap.josm.gui.layer.imagery.TileSourceDisplaySettings;
 import org.openstreetmap.josm.tools.GBC;
 
@@ -82,6 +83,6 @@
      */
     public void loadSettings() {
-        this.autozoomActive.setSelected(TMSLayer.PROP_DEFAULT_AUTOZOOM.get());
-        this.autoloadTiles.setSelected(TMSLayer.PROP_DEFAULT_AUTOLOAD.get());
+        this.autozoomActive.setSelected(TileSourceDisplaySettings.PROP_AUTO_ZOOM.get());
+        this.autoloadTiles.setSelected(TileSourceDisplaySettings.PROP_AUTO_LOAD.get());
         this.addToSlippyMapChosser.setSelected(TMSLayer.PROP_ADD_TO_SLIPPYMAP_CHOOSER.get());
         this.maxZoomLvl.setValue(TMSLayer.getMaxZoomLvl(null));
@@ -102,6 +103,6 @@
         }
         TMSLayer.PROP_ADD_TO_SLIPPYMAP_CHOOSER.put(this.addToSlippyMapChosser.isSelected());
-        TMSLayer.PROP_DEFAULT_AUTOZOOM.put(this.autozoomActive.isSelected());
-        TMSLayer.PROP_DEFAULT_AUTOLOAD.put(this.autoloadTiles.isSelected());
+        TileSourceDisplaySettings.PROP_AUTO_ZOOM.put(this.autozoomActive.isSelected());
+        TileSourceDisplaySettings.PROP_AUTO_LOAD.put(this.autoloadTiles.isSelected());
         TMSLayer.setMaxZoomLvl((Integer) this.maxZoomLvl.getValue());
         TMSLayer.setMinZoomLvl((Integer) this.minZoomLvl.getValue());
Index: trunk/src/org/openstreetmap/josm/io/session/ImagerySessionExporter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/session/ImagerySessionExporter.java	(revision 10567)
+++ trunk/src/org/openstreetmap/josm/io/session/ImagerySessionExporter.java	(revision 10568)
@@ -82,8 +82,6 @@
         Map<String, String> data = new LinkedHashMap<>(Preferences.serializeStruct(e, ImageryPreferenceEntry.class));
         if (layer instanceof AbstractTileSourceLayer) {
-            AbstractTileSourceLayer tsLayer = (AbstractTileSourceLayer) layer;
-            data.put("automatic-downloading", Boolean.toString(tsLayer.autoLoad));
-            data.put("automatically-change-resolution", Boolean.toString(tsLayer.autoZoom));
-            data.put("show-errors", Boolean.toString(tsLayer.showErrors));
+            AbstractTileSourceLayer<?> tsLayer = (AbstractTileSourceLayer<?>) layer;
+            tsLayer.getDisplaySettings().storeTo(data);
         }
         data.put("dx", String.valueOf(layer.getDx()));
Index: trunk/src/org/openstreetmap/josm/io/session/ImagerySessionImporter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/session/ImagerySessionImporter.java	(revision 10567)
+++ trunk/src/org/openstreetmap/josm/io/session/ImagerySessionImporter.java	(revision 10568)
@@ -51,16 +51,6 @@
         ImageryLayer layer = ImageryLayer.create(i);
         if (layer instanceof AbstractTileSourceLayer) {
-            AbstractTileSourceLayer tsLayer = (AbstractTileSourceLayer) layer;
-            if (attributes.containsKey("automatic-downloading")) {
-                tsLayer.autoLoad = Boolean.parseBoolean(attributes.get("automatic-downloading"));
-            }
-
-            if (attributes.containsKey("automatically-change-resolution")) {
-                tsLayer.autoZoom = Boolean.parseBoolean(attributes.get("automatically-change-resolution"));
-            }
-
-            if (attributes.containsKey("show-errors")) {
-                tsLayer.showErrors = Boolean.parseBoolean(attributes.get("show-errors"));
-            }
+            AbstractTileSourceLayer<?> tsLayer = (AbstractTileSourceLayer<?>) layer;
+            tsLayer.getDisplaySettings().loadFrom(attributes);
         }
         if (attributes.containsKey("dx") && attributes.containsKey("dy")) {
