Index: /trunk/src/org/openstreetmap/josm/actions/SessionLoadAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/SessionLoadAction.java	(revision 6270)
+++ /trunk/src/org/openstreetmap/josm/actions/SessionLoadAction.java	(revision 6271)
@@ -67,4 +67,5 @@
         private final boolean zip;
         private List<Layer> layers;
+        private Layer active;
         private List<Runnable> postLoadTasks;
         private ViewportData viewport;
@@ -122,4 +123,7 @@
                             if (canceled) return;
                             Main.main.addLayer(l);
+                        }
+                        if (active != null) {
+                            Main.map.mapView.setActiveLayer(active);
                         }
                         if (noMap) {
@@ -158,4 +162,5 @@
                     reader.loadSession(file, zip, monitor);
                     layers = reader.getLayers();
+                    active = reader.getActive();
                     postLoadTasks = reader.getPostLoadTasks();
                     viewport = reader.getViewport();
Index: /trunk/src/org/openstreetmap/josm/actions/SessionSaveAsAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/SessionSaveAsAction.java	(revision 6270)
+++ /trunk/src/org/openstreetmap/josm/actions/SessionSaveAsAction.java	(revision 6271)
@@ -123,6 +123,12 @@
             layersOut.add(layer);
         }
-
-        SessionWriter sw = new SessionWriter(layersOut, exporters, dependencies, zip);
+        
+        int active = -1;
+        Layer activeLayer = Main.map.mapView.getActiveLayer();
+        if (activeLayer != null) {
+            active = layersOut.indexOf(activeLayer);
+        }
+
+        SessionWriter sw = new SessionWriter(layersOut, active, exporters, dependencies, zip);
         try {
             sw.write(file);
@@ -157,4 +163,7 @@
         }
 
+        /**
+         * Initializes action.
+         */
         public void initialize() {
             layers = new ArrayList<Layer>(Main.map.mapView.getAllLayersAsList());
@@ -196,5 +205,5 @@
         }
 
-        public Component build() {
+        protected Component build() {
             JPanel p = new JPanel(new GridBagLayout());
             JPanel ip = new JPanel(new GridBagLayout());
Index: /trunk/src/org/openstreetmap/josm/io/session/SessionReader.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/session/SessionReader.java	(revision 6270)
+++ /trunk/src/org/openstreetmap/josm/io/session/SessionReader.java	(revision 6271)
@@ -89,4 +89,5 @@
     private ZipFile zipFile;
     private List<Layer> layers = new ArrayList<Layer>();
+    private int active = -1;
     private List<Runnable> postLoadTasks = new ArrayList<Runnable>();
     private ViewportData viewport;
@@ -97,4 +98,13 @@
     public List<Layer> getLayers() {
         return layers;
+    }
+
+    /**
+     * @return active layer, or {@code null} if not set
+     * @since 6271
+     */
+    public Layer getActive() {
+        // layers is in reverse order because of the way TreeMap is built
+        return (active >= 0 && active < layers.size()) ? layers.get(layers.size()-1-active) : null;
     }
 
@@ -327,4 +337,12 @@
         if (layersEl == null) return;
 
+        String activeAtt = layersEl.getAttribute("active");
+        try {
+            active = (activeAtt != null && !activeAtt.isEmpty()) ? Integer.parseInt(activeAtt)-1 : -1;
+        } catch (NumberFormatException e) {
+            Main.warn("Unsupported value for 'active' layer attribute. Ignoring it. Error was: "+e.getMessage());
+            active = -1;
+        }
+        
         MultiMap<Integer, Integer> deps = new MultiMap<Integer, Integer>();
         Map<Integer, Element> elems = new HashMap<Integer, Element>();
Index: /trunk/src/org/openstreetmap/josm/io/session/SessionWriter.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/session/SessionWriter.java	(revision 6270)
+++ /trunk/src/org/openstreetmap/josm/io/session/SessionWriter.java	(revision 6271)
@@ -80,14 +80,24 @@
     }
 
-    private List<Layer> layers;
-    private Map<Layer, SessionLayerExporter> exporters;
-    private MultiMap<Layer, Layer> dependencies;
-    private boolean zip;
+    private final List<Layer> layers;
+    private final int active; 
+    private final Map<Layer, SessionLayerExporter> exporters;
+    private final MultiMap<Layer, Layer> dependencies;
+    private final boolean zip;
 
     private ZipOutputStream zipOut;
 
-    public SessionWriter(List<Layer> layers, Map<Layer, SessionLayerExporter> exporters,
+    /**
+     * Constructs a new {@code SessionWriter}.
+     * @param layers The ordered list of layers to save
+     * @param active The index of active layer in {@code layers} (starts to 0). Ignored if set to -1
+     * @param exporters The exprters to use to save layers
+     * @param zip {@code true} if a joz archive has to be created, {@code false otherwise}
+     * @since 6271
+     */
+    public SessionWriter(List<Layer> layers, int active, Map<Layer, SessionLayerExporter> exporters,
                 MultiMap<Layer, Layer> dependencies, boolean zip) {
         this.layers = layers;
+        this.active = active;
         this.exporters = exporters;
         this.dependencies = dependencies;
@@ -182,4 +192,7 @@
 
         Element layersEl = doc.createElement("layers");
+        if (active >= 0) {
+            layersEl.setAttribute("active", Integer.toString(active+1));
+        }
         root.appendChild(layersEl);
 
