Index: trunk/src/org/openstreetmap/josm/data/osm/history/HistoryDataSet.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/history/HistoryDataSet.java	(revision 6438)
+++ trunk/src/org/openstreetmap/josm/data/osm/history/HistoryDataSet.java	(revision 6440)
@@ -4,5 +4,7 @@
 import java.text.MessageFormat;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
@@ -10,4 +12,5 @@
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.osm.Changeset;
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
 import org.openstreetmap.josm.data.osm.PrimitiveId;
@@ -17,4 +20,5 @@
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
@@ -43,4 +47,5 @@
     private Map<PrimitiveId, ArrayList<HistoryOsmPrimitive>> data;
     private CopyOnWriteArrayList<HistoryDataSetListener> listeners;
+    private Map<Long, Changeset> changesets;
 
     /**
@@ -50,4 +55,5 @@
         data = new HashMap<PrimitiveId, ArrayList<HistoryOsmPrimitive>>();
         listeners = new CopyOnWriteArrayList<HistoryDataSetListener>();
+        changesets = new HashMap<Long, Changeset>();
     }
 
@@ -117,4 +123,14 @@
 
     /**
+     * Adds a changeset to the data set
+     *
+     * @param changeset the changeset to add
+     */
+    public void putChangeset(Changeset changeset) {
+        changesets.put((long) changeset.getId(), changeset);
+        fireHistoryUpdated(null);
+    }
+
+    /**
      * Replies the history for a given primitive with id <code>id</code>
      * and type <code>type</code>.
@@ -149,4 +165,7 @@
         if (versions == null)
             return null;
+        for (HistoryOsmPrimitive i : versions) {
+            i.setChangeset(changesets.get(i.getChangesetId()));
+        }
         return new History(pid.getUniqueId(), pid.getType(), versions);
     }
@@ -160,8 +179,17 @@
         if (other == null)
             return;
-        for (PrimitiveId id : other.data.keySet()) {
-            this.data.put(id, other.data.get(id));
-        }
+        this.data.putAll(other.data);
+        this.changesets.putAll(other.changesets);
         fireHistoryUpdated(null);
+    }
+
+    public Collection<Long> getChangesetIds() {
+        final HashSet<Long> ids = new HashSet<Long>();
+        for (Collection<HistoryOsmPrimitive> i : data.values()) {
+            for (HistoryOsmPrimitive j : i) {
+                ids.add(j.getChangesetId());
+            }
+        }
+        return ids;
     }
 
Index: trunk/src/org/openstreetmap/josm/data/osm/history/HistoryOsmPrimitive.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/history/HistoryOsmPrimitive.java	(revision 6438)
+++ trunk/src/org/openstreetmap/josm/data/osm/history/HistoryOsmPrimitive.java	(revision 6440)
@@ -11,4 +11,5 @@
 import java.util.Map;
 
+import org.openstreetmap.josm.data.osm.Changeset;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -32,4 +33,5 @@
     private User user;
     private long changesetId;
+    private Changeset changeset;
     private Date timestamp;
     private long version;
@@ -171,4 +173,12 @@
     public Map<String,String> getTags() {
         return Collections.unmodifiableMap(tags);
+    }
+
+    public Changeset getChangeset() {
+        return changeset;
+    }
+
+    public void setChangeset(Changeset changeset) {
+        this.changeset = changeset;
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/history/HistoryLoadTask.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/history/HistoryLoadTask.java	(revision 6438)
+++ trunk/src/org/openstreetmap/josm/gui/history/HistoryLoadTask.java	(revision 6440)
@@ -10,6 +10,8 @@
 import java.util.Collection;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
 
+import org.openstreetmap.josm.data.osm.Changeset;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
@@ -21,4 +23,6 @@
 import org.openstreetmap.josm.gui.ExceptionDialogUtil;
 import org.openstreetmap.josm.gui.PleaseWaitRunnable;
+import org.openstreetmap.josm.io.ChangesetQuery;
+import org.openstreetmap.josm.io.OsmServerChangesetReader;
 import org.openstreetmap.josm.io.OsmServerHistoryReader;
 import org.openstreetmap.josm.io.OsmTransferException;
@@ -201,4 +205,9 @@
                     reader = new OsmServerHistoryReader(pid.getType(), pid.getUniqueId());
                     ds = reader.parseHistory(progressMonitor.createSubTaskMonitor(1, false));
+                    // load corresponding changesets (mostly for changeset comment)
+                    for (final Changeset i : new OsmServerChangesetReader().queryChangesets(
+                            new ChangesetQuery().forChangesetIds(ds.getChangesetIds()), progressMonitor.createSubTaskMonitor(1, false))) {
+                        ds.putChangeset(i);
+                    }
                 } catch(OsmTransferException e) {
                     if (canceled)
Index: trunk/src/org/openstreetmap/josm/gui/history/VersionInfoPanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/history/VersionInfoPanel.java	(revision 6438)
+++ trunk/src/org/openstreetmap/josm/gui/history/VersionInfoPanel.java	(revision 6440)
@@ -5,4 +5,5 @@
 
 import java.awt.BorderLayout;
+import java.awt.Color;
 import java.awt.GridBagConstraints;
 import java.awt.GridBagLayout;
@@ -16,4 +17,5 @@
 import javax.swing.JLabel;
 import javax.swing.JPanel;
+import javax.swing.JTextArea;
 
 import org.openstreetmap.josm.Main;
@@ -39,4 +41,5 @@
     private UrlLabel lblUser;
     private UrlLabel lblChangeset;
+    private JTextArea lblChangesetComment;
 
     protected void build() {
@@ -55,4 +58,9 @@
         pnlUserAndChangeset.add(lblChangeset);
 
+        lblChangesetComment = new JTextArea();
+        lblChangesetComment.setLineWrap(true);
+        lblChangesetComment.setEditable(false);
+        lblChangesetComment.setBackground(new Color(0, 0, 0, 0));
+
         setLayout(new GridBagLayout());
         GridBagConstraints gc = new GridBagConstraints();
@@ -65,4 +73,6 @@
         gc.weighty = 0.0;
         add(pnlUserAndChangeset, gc);
+        gc.gridy = 2;
+        add(lblChangesetComment, gc);
     }
 
@@ -132,4 +142,7 @@
             lblChangeset.setUrl(url);
             lblChangeset.setDescription(Long.toString(getPrimitive().getChangesetId()));
+            final String comment = getPrimitive().getChangeset() != null ? getPrimitive().getChangeset().get("comment") : null;
+            lblChangesetComment.setText(comment);
+            lblChangesetComment.setToolTipText(tr("Changeset comment"));
 
             try {
Index: trunk/src/org/openstreetmap/josm/io/ChangesetQuery.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/ChangesetQuery.java	(revision 6438)
+++ trunk/src/org/openstreetmap/josm/io/ChangesetQuery.java	(revision 6440)
@@ -10,6 +10,10 @@
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Map;
 import java.util.Map.Entry;
@@ -18,4 +22,5 @@
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
+import org.openstreetmap.josm.tools.Utils;
 
 public class ChangesetQuery {
@@ -47,4 +52,6 @@
     /** indicates whether only closed changesets are queried. null, if no restrictions regarding open changesets apply */
     private Boolean closed = null;
+    /** a collection of changeset ids to query for */
+    private Collection<Long> changesetIds = null;
 
     public ChangesetQuery() {}
@@ -227,4 +234,17 @@
 
     /**
+     * Restricts the query to the given changeset ids (which are added to previously added ones).
+     *
+     * @param changesetIds the changeset ids
+     * @return the query object with the applied restriction
+     * @throws IllegalArgumentException thrown if changesetIds is null.
+     */
+    public ChangesetQuery forChangesetIds(Collection<Long> changesetIds) {
+        CheckParameterUtil.ensureParameterNotNull(changesetIds, "changesetIds");
+        this.changesetIds = changesetIds;
+        return this;
+    }
+
+    /**
      * Replies the query string to be used in a query URL for the OSM API.
      *
@@ -273,4 +293,10 @@
             }
             sb.append("closed=").append(Boolean.toString(closed));
+        } else if (changesetIds != null) {
+            // since 2013-12-05, see https://github.com/openstreetmap/openstreetmap-website/commit/1d1f194d598e54a5d6fb4f38fb569d4138af0dc8
+            if (sb.length() > 0) {
+                sb.append("&");
+            }
+            sb.append("changesets=").append(Utils.join(",", changesetIds));
         }
         return sb.toString();
@@ -366,5 +392,16 @@
         }
 
-        protected ChangesetQuery crateFromMap(Map<String,String> queryParams) throws ChangesetQueryUrlException {
+        protected Collection<Long> parseLongs(String value) {
+            return value == null || value.isEmpty()
+                    ? Collections.<Long>emptySet() :
+                    new HashSet<Long>(Utils.transform(Arrays.asList(value.split(",")), new Utils.Function<String, Long>() {
+                        @Override
+                        public Long apply(String x) {
+                            return Long.valueOf(x);
+                        }
+                    }));
+        }
+
+        protected ChangesetQuery createFromMap(Map<String, String> queryParams) throws ChangesetQueryUrlException {
             ChangesetQuery csQuery = new ChangesetQuery();
 
@@ -401,4 +438,10 @@
                         throw new ChangesetQueryUrlException(e);
                     }
+                } else if (k.equals("changesets")) {
+                    try {
+                        csQuery.forChangesetIds(parseLongs(entry.getValue()));
+                    } catch (NumberFormatException e) {
+                        throw new ChangesetQueryUrlException(e);
+                    }
                 } else
                     throw new ChangesetQueryUrlException(tr("Unsupported parameter ''{0}'' in changeset query string", k));
@@ -412,5 +455,5 @@
             for (String keyValuePair: keyValuePairs) {
                 String[] kv = keyValuePair.split("=");
-                queryParams.put(kv[0], kv[1]);
+                queryParams.put(kv[0], kv.length > 1 ? kv[1] : "");
             }
             return queryParams;
@@ -441,5 +484,5 @@
                 return new ChangesetQuery();
             Map<String,String> queryParams  = createMapFromQueryString(query);
-            return crateFromMap(queryParams);
+            return createFromMap(queryParams);
         }
     }
