Index: trunk/src/org/openstreetmap/josm/data/osm/Changeset.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/Changeset.java	(revision 16431)
+++ trunk/src/org/openstreetmap/josm/data/osm/Changeset.java	(revision 16433)
@@ -1,4 +1,6 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.osm;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.util.ArrayList;
@@ -490,3 +492,8 @@
         discussion.add(comment);
     }
+
+    @Override
+    public String toString() {
+        return tr("Changeset") + " " + id + ": " + getComment();
+    }
 }
Index: trunk/src/org/openstreetmap/josm/gui/datatransfer/ChangesetTransferable.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/datatransfer/ChangesetTransferable.java	(revision 16433)
+++ trunk/src/org/openstreetmap/josm/gui/datatransfer/ChangesetTransferable.java	(revision 16433)
@@ -0,0 +1,46 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.datatransfer;
+
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.Transferable;
+import java.awt.datatransfer.UnsupportedFlavorException;
+import java.io.IOException;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import org.openstreetmap.josm.data.osm.Changeset;
+
+/**
+ * This class allows to transfer a list of {@link Changeset}s
+ */
+public class ChangesetTransferable implements Transferable {
+    private final List<Changeset> changesets;
+
+    /**
+     * Constructs a new transferable
+     * @param changesets the list of changesets
+     */
+    public ChangesetTransferable(List<Changeset> changesets) {
+        this.changesets = changesets;
+    }
+
+    @Override
+    public DataFlavor[] getTransferDataFlavors() {
+        return new DataFlavor[]{DataFlavor.stringFlavor};
+    }
+
+    @Override
+    public boolean isDataFlavorSupported(DataFlavor flavor) {
+        return Stream.of(getTransferDataFlavors()).anyMatch(f -> f.equals(flavor));
+    }
+
+    @Override
+    public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
+        if (DataFlavor.stringFlavor.equals(flavor)) {
+            return changesets.stream().map(Changeset::toString).collect(Collectors.joining("\n"));
+        } else {
+            throw new UnsupportedFlavorException(flavor);
+        }
+    }
+}
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManager.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManager.java	(revision 16431)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManager.java	(revision 16433)
@@ -11,4 +11,5 @@
 import java.awt.GraphicsEnvironment;
 import java.awt.Window;
+import java.awt.datatransfer.Clipboard;
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
@@ -38,4 +39,5 @@
 import javax.swing.KeyStroke;
 import javax.swing.ListSelectionModel;
+import javax.swing.TransferHandler;
 import javax.swing.event.ListSelectionEvent;
 import javax.swing.event.ListSelectionListener;
@@ -54,4 +56,6 @@
 import org.openstreetmap.josm.gui.HelpAwareOptionPane;
 import org.openstreetmap.josm.gui.MainApplication;
+import org.openstreetmap.josm.gui.datatransfer.ChangesetTransferable;
+import org.openstreetmap.josm.gui.datatransfer.ClipboardUtils;
 import org.openstreetmap.josm.gui.dialogs.changeset.query.ChangesetQueryDialog;
 import org.openstreetmap.josm.gui.help.ContextSensitiveHelpAction;
@@ -280,4 +284,13 @@
         tblChangesets.getActionMap().put("removeFromCache", actRemoveFromCacheAction);
 
+        tblChangesets.setTransferHandler(new TransferHandler() {
+            @Override
+            public void exportToClipboard(JComponent comp, Clipboard clip, int action) throws IllegalStateException {
+                List<Changeset> changesets = model.getSelectedChangesets();
+                ChangesetTransferable transferable = new ChangesetTransferable(changesets);
+                ClipboardUtils.copy(transferable);
+            }
+        });
+
         pnl.add(new JScrollPane(tblChangesets), BorderLayout.CENTER);
         pnl.add(buildChangesetTableActionPanel(), BorderLayout.WEST);
