Index: src/org/openstreetmap/josm/gui/history/HistoryBrowser.java
===================================================================
--- src/org/openstreetmap/josm/gui/history/HistoryBrowser.java	(revision 19007)
+++ src/org/openstreetmap/josm/gui/history/HistoryBrowser.java	(working copy)
@@ -11,6 +11,8 @@
 import javax.swing.JScrollPane;
 import javax.swing.JSplitPane;
 import javax.swing.JTabbedPane;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
 
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
@@ -22,7 +24,7 @@
  *
  * @since 1709
  */
-public class HistoryBrowser extends JPanel implements Destroyable {
+public class HistoryBrowser extends JPanel implements Destroyable, ChangeListener {
 
     /** the model */
     private transient HistoryBrowserModel model;
@@ -115,6 +117,7 @@
     public void populate(History history) {
         boolean samePrimitive = model.isSamePrimitive(history); // needs to be before setHistory
         model.setHistory(history);
+        model.addChangeListener(this);
         if (samePrimitive) {
             // no need to rebuild the UI
             return;
@@ -159,6 +162,7 @@
     public void destroy() {
         if (model != null) {
             model.unlinkAsListener();
+            model.removeChangeListener(this);
             model = null;
         }
         Stream.of(tagInfoViewer, nodeListViewer, relationMemberListViewer, coordinateInfoViewer)
@@ -168,4 +172,9 @@
         relationMemberListViewer = null;
         coordinateInfoViewer = null;
     }
+
+    @Override
+    public void stateChanged(ChangeEvent e) {
+        tagInfoViewer.adjustWidths();
+    }
 }
Index: src/org/openstreetmap/josm/gui/history/HistoryBrowserDialogManager.java
===================================================================
--- src/org/openstreetmap/josm/gui/history/HistoryBrowserDialogManager.java	(revision 19007)
+++ src/org/openstreetmap/josm/gui/history/HistoryBrowserDialogManager.java	(working copy)
@@ -147,6 +147,7 @@
             HistoryBrowserDialog dialog = new HistoryBrowserDialog(h);
             placeOnScreen(dialog);
             dialog.setVisible(true);
+            dialog.setHistory(h); // we have to do this again to trigger a ChangeEvent
             dialogs.put(h.getId(), dialog);
         }
     }
Index: src/org/openstreetmap/josm/gui/history/TagInfoViewer.java
===================================================================
--- src/org/openstreetmap/josm/gui/history/TagInfoViewer.java	(revision 19007)
+++ src/org/openstreetmap/josm/gui/history/TagInfoViewer.java	(working copy)
@@ -1,6 +1,7 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.history;
 
+import java.awt.Component;
 import java.awt.event.FocusEvent;
 import java.awt.event.FocusListener;
 import java.util.Collection;
@@ -12,6 +13,8 @@
 import javax.swing.JPopupMenu;
 import javax.swing.JTable;
 import javax.swing.ListSelectionModel;
+import javax.swing.table.TableCellRenderer;
+import javax.swing.table.TableColumn;
 
 import org.openstreetmap.josm.actions.RestorePropertyAction;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -35,6 +38,8 @@
  * @since 1709
  */
 public class TagInfoViewer extends HistoryViewerPanel {
+    private JTable reference;
+    private JTable current;
     private static final class RepaintOnFocusChange implements FocusListener {
         @Override
         public void focusLost(FocusEvent e) {
@@ -62,12 +67,14 @@
 
     @Override
     protected JTable buildReferenceTable() {
-        return buildTable(PointInTimeType.REFERENCE_POINT_IN_TIME);
+        reference = buildTable(PointInTimeType.REFERENCE_POINT_IN_TIME);
+        return reference;
     }
 
     @Override
     protected JTable buildCurrentTable() {
-        return buildTable(PointInTimeType.CURRENT_POINT_IN_TIME);
+        current = buildTable(PointInTimeType.CURRENT_POINT_IN_TIME);
+        return current;
     }
 
     private JTable buildTable(PointInTimeType pointInTime) {
@@ -105,4 +112,42 @@
         table.addMouseListener(new PopupMenuLauncher(tagMenu));
         return table;
     }
+
+    /**
+     * Use current data to adjust preferredWidth for both tables
+     */
+    public void adjustWidths() {
+        adjustWidths(reference);
+        adjustWidths(current);
+    }
+
+    private void adjustWidths(JTable table) {
+        int maxWidth = this.getWidth() / 4;
+        if (maxWidth == 0)
+            maxWidth = Integer.MAX_VALUE;
+        for (int column = 0; column < table.getColumnCount(); column++) {
+            TableColumn tableColumn = table.getColumnModel().getColumn(column);
+            int preferredWidth = tableColumn.getMinWidth();
+            for (int row = 0; row < table.getRowCount(); row++) {
+                TableCellRenderer cellRenderer = table.getCellRenderer(row, column);
+                Component c = table.prepareRenderer(cellRenderer, row, column);
+                int width = c.getPreferredSize().width + table.getIntercellSpacing().width;
+                preferredWidth = Math.max(preferredWidth, width);
+                if (preferredWidth >= maxWidth) {
+                    //  We've exceeded the maximum width, no need to check other rows
+                    preferredWidth = maxWidth;
+                    break;
+                }
+            }
+            TableCellRenderer renderer = tableColumn.getHeaderRenderer();
+            if (renderer == null)
+                renderer = table.getTableHeader().getDefaultRenderer();
+            Component h = renderer.getTableCellRendererComponent(table, tableColumn.getHeaderValue(), false, false, -1, column);
+            int headerWidth = h.getPreferredSize().width;
+            if (headerWidth > preferredWidth)
+                preferredWidth = headerWidth;
+            tableColumn.setPreferredWidth(preferredWidth);
+        }
+    }
+
 }
Index: src/org/openstreetmap/josm/gui/history/TagTableColumnModel.java
===================================================================
--- src/org/openstreetmap/josm/gui/history/TagTableColumnModel.java	(revision 19007)
+++ src/org/openstreetmap/josm/gui/history/TagTableColumnModel.java	(working copy)
@@ -3,6 +3,7 @@
 
 import static org.openstreetmap.josm.tools.I18n.tr;
 
+import javax.swing.JLabel;
 import javax.swing.table.DefaultTableColumnModel;
 import javax.swing.table.TableColumn;
 
@@ -41,6 +42,7 @@
         col.setHeaderValue(tr("Since"));
         col.setCellRenderer(renderer);
         col.setPreferredWidth(10);
+        col.setMaxWidth(new JLabel("v" + Long.MAX_VALUE).getMinimumSize().width);
         addColumn(col);
     }
 }
