Index: trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesCellRenderer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesCellRenderer.java	(revision 9147)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesCellRenderer.java	(revision 9149)
@@ -9,6 +9,8 @@
 import java.awt.Component;
 import java.awt.Font;
+import java.util.Collection;
 import java.util.Map;
 import java.util.Objects;
+import java.util.concurrent.CopyOnWriteArrayList;
 
 import javax.swing.JLabel;
@@ -16,4 +18,5 @@
 import javax.swing.UIDefaults;
 import javax.swing.table.DefaultTableCellRenderer;
+import javax.swing.table.TableCellRenderer;
 
 import org.openstreetmap.josm.Main;
@@ -25,4 +28,6 @@
  */
 public class PropertiesCellRenderer extends DefaultTableCellRenderer {
+
+    private final Collection<TableCellRenderer> customRenderer = new CopyOnWriteArrayList<>();
 
     private void setColors(Component c, String key, boolean isSelected) {
@@ -45,4 +50,10 @@
     @Override
     public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
+        for (TableCellRenderer renderer : customRenderer) {
+            final Component component = renderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
+            if (component != null) {
+                return component;
+            }
+        }
         Component c = super.getTableCellRendererComponent(table, value, isSelected, false, row, column);
         if (value == null)
@@ -106,3 +117,25 @@
         return c;
     }
+
+    /**
+     * Adds a custom table cell renderer to render cells of the tags table.
+     *
+     * If the renderer is not capable performing a {@link TableCellRenderer#getTableCellRendererComponent},
+     * it should return {@code null} to fall back to the
+     * {@link PropertiesCellRenderer#getTableCellRendererComponent default implementation}.
+     * @param renderer the renderer to add
+     * @since 9149
+     */
+    public void addCustomRenderer(TableCellRenderer renderer) {
+        customRenderer.add(renderer);
+    }
+
+    /**
+     * Removes a custom table cell renderer.
+     * @param renderer the renderer to remove
+     * @since 9149
+     */
+    public void removeCustomRenderer(TableCellRenderer renderer) {
+        customRenderer.remove(renderer);
+    }
 }
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 9147)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 9149)
@@ -48,4 +48,5 @@
 import javax.swing.table.DefaultTableCellRenderer;
 import javax.swing.table.DefaultTableModel;
+import javax.swing.table.TableCellRenderer;
 import javax.swing.table.TableColumnModel;
 import javax.swing.table.TableModel;
@@ -137,4 +138,5 @@
      */
     private final ReadOnlyTableModel tagData = new ReadOnlyTableModel();
+    private final PropertiesCellRenderer cellRenderer = new PropertiesCellRenderer();
     private final TableRowSorter<ReadOnlyTableModel> tagRowSorter = new TableRowSorter<>(tagData);
     private final JosmTextField tagTableFilter;
@@ -304,5 +306,4 @@
         tagTable.getTableHeader().setReorderingAllowed(false);
 
-        PropertiesCellRenderer cellRenderer = new PropertiesCellRenderer();
         tagTable.getColumnModel().getColumn(0).setCellRenderer(cellRenderer);
         tagTable.getColumnModel().getColumn(1).setCellRenderer(cellRenderer);
@@ -818,4 +819,26 @@
 
     /**
+     * Adds a custom table cell renderer to render cells of the tags table.
+     *
+     * If the renderer is not capable performing a {@link TableCellRenderer#getTableCellRendererComponent},
+     * it should return {@code null} to fall back to the
+     * {@link PropertiesCellRenderer#getTableCellRendererComponent default implementation}.
+     * @param renderer the renderer to add
+     * @since 9149
+     */
+    public void addCustomPropertiesCellRenderer(TableCellRenderer renderer) {
+        cellRenderer.addCustomRenderer(renderer);
+    }
+
+    /**
+     * Removes a custom table cell renderer.
+     * @param renderer the renderer to remove
+     * @since 9149
+     */
+    public void removeCustomPropertiesCellRenderer(TableCellRenderer renderer) {
+        cellRenderer.removeCustomRenderer(renderer);
+    }
+
+    /**
      * Class that watches for mouse clicks
      * @author imi
