Index: trunk/src/org/openstreetmap/josm/actions/package-info.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/package-info.java	(revision 10125)
+++ trunk/src/org/openstreetmap/josm/actions/package-info.java	(revision 10125)
@@ -0,0 +1,7 @@
+// License: GPL. For details, see LICENSE file.
+
+/**
+ * Provides the classes for JOSM user actions.
+ * All of them inherit from {@code JosmAction}.
+ */
+package org.openstreetmap.josm.actions;
Index: trunk/src/org/openstreetmap/josm/command/package-info.java
===================================================================
--- trunk/src/org/openstreetmap/josm/command/package-info.java	(revision 10125)
+++ trunk/src/org/openstreetmap/josm/command/package-info.java	(revision 10125)
@@ -0,0 +1,7 @@
+// License: GPL. For details, see LICENSE file.
+
+/**
+ * Provides the classes for JOSM commands allowing to modify an OSM data set.
+ * All of them inherit from {@code Command}.
+ */
+package org.openstreetmap.josm.command;
Index: trunk/src/org/openstreetmap/josm/corrector/Correction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/corrector/Correction.java	(revision 10124)
+++ 	(revision )
@@ -1,6 +1,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.corrector;
-
-public interface Correction {
-
-}
Index: trunk/src/org/openstreetmap/josm/corrector/CorrectionTable.java
===================================================================
--- trunk/src/org/openstreetmap/josm/corrector/CorrectionTable.java	(revision 10124)
+++ 	(revision )
@@ -1,63 +1,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.corrector;
-
-import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.Font;
-
-import javax.swing.JLabel;
-import javax.swing.JTable;
-import javax.swing.table.TableCellRenderer;
-
-public abstract class CorrectionTable<T extends CorrectionTableModel<?>>
-        extends JTable {
-
-    private static final int MAX_VISIBLE_LINES = 10;
-
-    public static class BoldRenderer extends JLabel implements
-            TableCellRenderer {
-
-        @Override
-        public Component getTableCellRendererComponent(JTable table,
-                Object value, boolean isSelected, boolean hasFocus, int row,
-                int column) {
-
-            Font f = getFont();
-            setFont(new Font(f.getName(), f.getStyle() | Font.BOLD, f.getSize()));
-
-            setText((String) value);
-
-            return this;
-        }
-    }
-
-    private static volatile BoldRenderer boldRenderer;
-
-    protected CorrectionTable(T correctionTableModel) {
-        super(correctionTableModel);
-
-        final int correctionsSize = correctionTableModel.getCorrections().size();
-        final int lines = correctionsSize > MAX_VISIBLE_LINES ? MAX_VISIBLE_LINES
-                : correctionsSize;
-        setPreferredScrollableViewportSize(new Dimension(400, lines
-                * getRowHeight()));
-        getColumnModel().getColumn(correctionTableModel.getApplyColumn())
-                .setPreferredWidth(40);
-        setRowSelectionAllowed(false);
-    }
-
-    @Override
-    public TableCellRenderer getCellRenderer(int row, int column) {
-        if (getCorrectionTableModel().isBoldCell(row, column)) {
-            if (boldRenderer == null)
-                boldRenderer = new BoldRenderer();
-            return boldRenderer;
-        }
-        return super.getCellRenderer(row, column);
-    }
-
-    @SuppressWarnings("unchecked")
-    public T getCorrectionTableModel() {
-        return (T) getModel();
-    }
-}
Index: trunk/src/org/openstreetmap/josm/corrector/CorrectionTableModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/corrector/CorrectionTableModel.java	(revision 10124)
+++ 	(revision )
@@ -1,83 +1,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.corrector;
-
-import static org.openstreetmap.josm.tools.I18n.tr;
-
-import java.util.Arrays;
-import java.util.List;
-
-import javax.swing.table.AbstractTableModel;
-
-public abstract class CorrectionTableModel<C extends Correction> extends AbstractTableModel {
-
-    private final transient List<C> corrections;
-    private boolean[] apply;
-    private final int applyColumn;
-
-    public CorrectionTableModel(List<C> corrections) {
-        this.corrections = corrections;
-        apply = new boolean[this.corrections.size()];
-        Arrays.fill(apply, true);
-        applyColumn = getColumnCount() - 1;
-    }
-
-    @Override
-    public abstract int getColumnCount();
-
-    protected abstract boolean isBoldCell(int row, int column);
-
-    public abstract String getCorrectionColumnName(int colIndex);
-
-    public abstract Object getCorrectionValueAt(int rowIndex, int colIndex);
-
-    public List<C> getCorrections() {
-        return corrections;
-    }
-
-    public int getApplyColumn() {
-        return applyColumn;
-    }
-
-    public boolean getApply(int i) {
-        return apply[i];
-    }
-
-    @Override
-    public int getRowCount() {
-        return corrections.size();
-    }
-
-    @Override
-    public Class<?> getColumnClass(int columnIndex) {
-        if (columnIndex == applyColumn)
-            return Boolean.class;
-        return String.class;
-    }
-
-    @Override
-    public String getColumnName(int columnIndex) {
-        if (columnIndex == applyColumn)
-            return tr("Apply?");
-
-        return getCorrectionColumnName(columnIndex);
-    }
-
-    @Override
-    public boolean isCellEditable(int rowIndex, int columnIndex) {
-        return columnIndex == applyColumn;
-    }
-
-    @Override
-    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
-        if (columnIndex == applyColumn && aValue instanceof Boolean)
-            apply[rowIndex] = (Boolean) aValue;
-    }
-
-    @Override
-    public Object getValueAt(int rowIndex, int colIndex) {
-        if (colIndex == applyColumn)
-            return apply[rowIndex];
-
-        return getCorrectionValueAt(rowIndex, colIndex);
-    }
-}
Index: trunk/src/org/openstreetmap/josm/corrector/ReverseWayTagCorrector.java
===================================================================
--- trunk/src/org/openstreetmap/josm/corrector/ReverseWayTagCorrector.java	(revision 10124)
+++ trunk/src/org/openstreetmap/josm/corrector/ReverseWayTagCorrector.java	(revision 10125)
@@ -14,4 +14,6 @@
 
 import org.openstreetmap.josm.command.Command;
+import org.openstreetmap.josm.data.correction.RoleCorrection;
+import org.openstreetmap.josm.data.correction.TagCorrection;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.OsmUtils;
Index: trunk/src/org/openstreetmap/josm/corrector/RoleCorrection.java
===================================================================
--- trunk/src/org/openstreetmap/josm/corrector/RoleCorrection.java	(revision 10124)
+++ 	(revision )
@@ -1,21 +1,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.corrector;
-
-import org.openstreetmap.josm.data.osm.Relation;
-import org.openstreetmap.josm.data.osm.RelationMember;
-
-public class RoleCorrection implements Correction {
-
-    public final Relation relation;
-    public final int position;
-    public final RelationMember member;
-    public final String newRole;
-
-    public RoleCorrection(Relation relation, int position,
-                          RelationMember member, String newRole) {
-        this.relation = relation;
-        this.position = position;
-        this.member = member;
-        this.newRole = newRole;
-    }
-}
Index: trunk/src/org/openstreetmap/josm/corrector/RoleCorrectionTable.java
===================================================================
--- trunk/src/org/openstreetmap/josm/corrector/RoleCorrectionTable.java	(revision 10124)
+++ 	(revision )
@@ -1,13 +1,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.corrector;
-
-import java.util.List;
-
-public class RoleCorrectionTable extends
-        CorrectionTable<RoleCorrectionTableModel> {
-
-    public RoleCorrectionTable(List<RoleCorrection> roleCorrections) {
-        super(new RoleCorrectionTableModel(roleCorrections));
-    }
-
-}
Index: trunk/src/org/openstreetmap/josm/corrector/RoleCorrectionTableModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/corrector/RoleCorrectionTableModel.java	(revision 10124)
+++ 	(revision )
@@ -1,55 +1,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.corrector;
-
-import static org.openstreetmap.josm.tools.I18n.tr;
-
-import java.util.List;
-
-import org.openstreetmap.josm.gui.DefaultNameFormatter;
-
-public class RoleCorrectionTableModel extends
-CorrectionTableModel<RoleCorrection> {
-
-    public RoleCorrectionTableModel(List<RoleCorrection> roleCorrections) {
-        super(roleCorrections);
-    }
-
-    @Override
-    public int getColumnCount() {
-        return 4;
-    }
-
-    @Override
-    public String getCorrectionColumnName(int colIndex) {
-        switch (colIndex) {
-        case 0:
-            return tr("Relation");
-        case 1:
-            return tr("Old role");
-        case 2:
-            return tr("New role");
-        }
-        return null;
-    }
-
-    @Override
-    public Object getCorrectionValueAt(int rowIndex, int colIndex) {
-        RoleCorrection roleCorrection = getCorrections().get(rowIndex);
-
-        switch (colIndex) {
-        case 0:
-            return roleCorrection.relation.getDisplayName(DefaultNameFormatter.getInstance());
-        case 1:
-            return roleCorrection.member.getRole();
-        case 2:
-            return roleCorrection.newRole;
-        }
-        return null;
-    }
-
-    @Override
-    protected boolean isBoldCell(int row, int column) {
-        return column == 2;
-    }
-
-}
Index: trunk/src/org/openstreetmap/josm/corrector/TagCorrection.java
===================================================================
--- trunk/src/org/openstreetmap/josm/corrector/TagCorrection.java	(revision 10124)
+++ 	(revision )
@@ -1,30 +1,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.corrector;
-
-/**
- * TagCorrection reprepresents a change of a single
- * tag. Both key and value can be subject of this change.
- */
-public class TagCorrection implements Correction {
-
-    public final String oldKey;
-    public final String newKey;
-    public final String oldValue;
-    public final String newValue;
-
-    public TagCorrection(String oldKey, String oldValue, String newKey,
-            String newValue) {
-        this.oldKey = oldKey;
-        this.oldValue = oldValue;
-        this.newKey = newKey;
-        this.newValue = newValue;
-    }
-
-    public boolean isKeyChanged() {
-        return !newKey.equals(oldKey);
-    }
-
-    public boolean isValueChanged() {
-        return !newValue.equals(oldValue);
-    }
-}
Index: trunk/src/org/openstreetmap/josm/corrector/TagCorrectionTable.java
===================================================================
--- trunk/src/org/openstreetmap/josm/corrector/TagCorrectionTable.java	(revision 10124)
+++ 	(revision )
@@ -1,13 +1,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.corrector;
-
-import java.util.List;
-
-public class TagCorrectionTable extends
-        CorrectionTable<TagCorrectionTableModel> {
-
-    public TagCorrectionTable(List<TagCorrection> tagCorrections) {
-        super(new TagCorrectionTableModel(tagCorrections));
-    }
-
-}
Index: trunk/src/org/openstreetmap/josm/corrector/TagCorrectionTableModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/corrector/TagCorrectionTableModel.java	(revision 10124)
+++ 	(revision )
@@ -1,58 +1,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.corrector;
-
-import static org.openstreetmap.josm.tools.I18n.tr;
-
-import java.util.List;
-
-public class TagCorrectionTableModel extends CorrectionTableModel<TagCorrection> {
-
-    public TagCorrectionTableModel(List<TagCorrection> tagCorrections) {
-        super(tagCorrections);
-    }
-
-    @Override
-    public int getColumnCount() {
-        return 5;
-    }
-
-    @Override
-    public String getCorrectionColumnName(int colIndex) {
-        switch (colIndex) {
-        case 0:
-            return tr("Old key");
-        case 1:
-            return tr("Old value");
-        case 2:
-            return tr("New key");
-        case 3:
-            return tr("New value");
-        }
-        return null;
-    }
-
-    @Override
-    public Object getCorrectionValueAt(int rowIndex, int colIndex) {
-        TagCorrection tagCorrection = getCorrections().get(rowIndex);
-
-        switch (colIndex) {
-        case 0:
-            return tagCorrection.oldKey;
-        case 1:
-            return tagCorrection.oldValue;
-        case 2:
-            return tagCorrection.newKey;
-        case 3:
-            return tagCorrection.newValue;
-        }
-        return null;
-    }
-
-    @Override
-    protected boolean isBoldCell(int row, int column) {
-        TagCorrection tagCorrection = getCorrections().get(row);
-        return (column == 2 && tagCorrection.isKeyChanged())
-                || (column == 3 && tagCorrection.isValueChanged());
-    }
-
-}
Index: trunk/src/org/openstreetmap/josm/corrector/TagCorrector.java
===================================================================
--- trunk/src/org/openstreetmap/josm/corrector/TagCorrector.java	(revision 10124)
+++ trunk/src/org/openstreetmap/josm/corrector/TagCorrector.java	(revision 10125)
@@ -24,4 +24,6 @@
 import org.openstreetmap.josm.command.ChangeRelationMemberRoleCommand;
 import org.openstreetmap.josm.command.Command;
+import org.openstreetmap.josm.data.correction.RoleCorrection;
+import org.openstreetmap.josm.data.correction.TagCorrection;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -29,4 +31,6 @@
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.gui.DefaultNameFormatter;
+import org.openstreetmap.josm.gui.correction.RoleCorrectionTable;
+import org.openstreetmap.josm.gui.correction.TagCorrectionTable;
 import org.openstreetmap.josm.gui.widgets.JMultilineLabel;
 import org.openstreetmap.josm.tools.GBC;
Index: trunk/src/org/openstreetmap/josm/data/correction/Correction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/correction/Correction.java	(revision 10125)
+++ trunk/src/org/openstreetmap/josm/data/correction/Correction.java	(revision 10125)
@@ -0,0 +1,10 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data.correction;
+
+/**
+ * Data correction. Represents any change.
+ * @since 1001
+ */
+public interface Correction {
+
+}
Index: trunk/src/org/openstreetmap/josm/data/correction/RoleCorrection.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/correction/RoleCorrection.java	(revision 10125)
+++ trunk/src/org/openstreetmap/josm/data/correction/RoleCorrection.java	(revision 10125)
@@ -0,0 +1,35 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data.correction;
+
+import org.openstreetmap.josm.data.osm.Relation;
+import org.openstreetmap.josm.data.osm.RelationMember;
+
+/**
+ * Represents a change of a single {@link RelationMember} role.
+ * @since 1001
+ */
+public class RoleCorrection implements Correction {
+
+    /** OSM relation */
+    public final Relation relation;
+    /** Relation member index */
+    public final int position;
+    /** Relation member */
+    public final RelationMember member;
+    /** New role */
+    public final String newRole;
+
+    /**
+     * Constructs a new {@code RoleCorrection}.
+     * @param relation OSM relation
+     * @param position relation member index
+     * @param member relation member
+     * @param newRole new role
+     */
+    public RoleCorrection(Relation relation, int position, RelationMember member, String newRole) {
+        this.relation = relation;
+        this.position = position;
+        this.member = member;
+        this.newRole = newRole;
+    }
+}
Index: trunk/src/org/openstreetmap/josm/data/correction/TagCorrection.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/correction/TagCorrection.java	(revision 10125)
+++ trunk/src/org/openstreetmap/josm/data/correction/TagCorrection.java	(revision 10125)
@@ -0,0 +1,49 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data.correction;
+
+/**
+ * Represents a change of a single tag.
+ * Both key and value can be subject of this change.
+ * @since 729
+ */
+public class TagCorrection implements Correction {
+
+    /** Old key */
+    public final String oldKey;
+    /** New key */
+    public final String newKey;
+    /** Old value */
+    public final String oldValue;
+    /** New value */
+    public final String newValue;
+
+    /**
+     * Constructs a new {@code TagCorrection}.
+     * @param oldKey old key
+     * @param oldValue old value
+     * @param newKey new key
+     * @param newValue new value
+     */
+    public TagCorrection(String oldKey, String oldValue, String newKey, String newValue) {
+        this.oldKey = oldKey;
+        this.oldValue = oldValue;
+        this.newKey = newKey;
+        this.newValue = newValue;
+    }
+
+    /**
+     * Determines if the key has changed.
+     * @return {@code true} if the key has changed
+     */
+    public boolean isKeyChanged() {
+        return !newKey.equals(oldKey);
+    }
+
+    /**
+     * Determines if the value has changed.
+     * @return {@code true} if the value has changed
+     */
+    public boolean isValueChanged() {
+        return !newValue.equals(oldValue);
+    }
+}
Index: trunk/src/org/openstreetmap/josm/data/correction/package-info.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/correction/package-info.java	(revision 10125)
+++ trunk/src/org/openstreetmap/josm/data/correction/package-info.java	(revision 10125)
@@ -0,0 +1,6 @@
+// License: GPL. For details, see LICENSE file.
+
+/**
+ * Provides the classes for JOSM data correction.
+ */
+package org.openstreetmap.josm.data.correction;
Index: trunk/src/org/openstreetmap/josm/data/package-info.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/package-info.java	(revision 10125)
+++ trunk/src/org/openstreetmap/josm/data/package-info.java	(revision 10125)
@@ -0,0 +1,6 @@
+// License: GPL. For details, see LICENSE file.
+
+/**
+ * Provides the classes for JOSM managed data.
+ */
+package org.openstreetmap.josm.data;
Index: trunk/src/org/openstreetmap/josm/data/projection/package-info.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/package-info.java	(revision 10125)
+++ trunk/src/org/openstreetmap/josm/data/projection/package-info.java	(revision 10125)
@@ -0,0 +1,6 @@
+// License: GPL. For details, see LICENSE file.
+
+/**
+ * Provides the classes for JOSM map projection.
+ */
+package org.openstreetmap.josm.data.projection;
Index: trunk/src/org/openstreetmap/josm/data/validation/package-info.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/package-info.java	(revision 10125)
+++ trunk/src/org/openstreetmap/josm/data/validation/package-info.java	(revision 10125)
@@ -0,0 +1,6 @@
+// License: GPL. For details, see LICENSE file.
+
+/**
+ * Provides the classes for JOSM data validation.
+ */
+package org.openstreetmap.josm.data.validation;
Index: trunk/src/org/openstreetmap/josm/gui/correction/CorrectionTable.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/correction/CorrectionTable.java	(revision 10125)
+++ trunk/src/org/openstreetmap/josm/gui/correction/CorrectionTable.java	(revision 10125)
@@ -0,0 +1,65 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.correction;
+
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.Font;
+
+import javax.swing.JLabel;
+import javax.swing.JTable;
+import javax.swing.table.TableCellRenderer;
+
+/**
+ * Abstract correction table.
+ * @param <T> type of table model
+ */
+public abstract class CorrectionTable<T extends CorrectionTableModel<?>> extends JTable {
+
+    private static final int MAX_VISIBLE_LINES = 10;
+
+    /**
+     * Renders text in bold.
+     */
+    public static class BoldRenderer extends JLabel implements TableCellRenderer {
+
+        @Override
+        public Component getTableCellRendererComponent(JTable table,
+                Object value, boolean isSelected, boolean hasFocus, int row, int column) {
+            Font f = getFont();
+            setFont(new Font(f.getName(), f.getStyle() | Font.BOLD, f.getSize()));
+            setText((String) value);
+            return this;
+        }
+    }
+
+    private static volatile BoldRenderer boldRenderer;
+
+    protected CorrectionTable(T correctionTableModel) {
+        super(correctionTableModel);
+
+        final int correctionsSize = correctionTableModel.getCorrections().size();
+        final int lines = correctionsSize > MAX_VISIBLE_LINES ? MAX_VISIBLE_LINES : correctionsSize;
+        setPreferredScrollableViewportSize(new Dimension(400, lines * getRowHeight()));
+        getColumnModel().getColumn(correctionTableModel.getApplyColumn()).setPreferredWidth(40);
+        setRowSelectionAllowed(false);
+    }
+
+    @Override
+    public TableCellRenderer getCellRenderer(int row, int column) {
+        if (getCorrectionTableModel().isBoldCell(row, column)) {
+            if (boldRenderer == null)
+                boldRenderer = new BoldRenderer();
+            return boldRenderer;
+        }
+        return super.getCellRenderer(row, column);
+    }
+
+    /**
+     * Returns correction table model.
+     * @return correction table model
+     */
+    @SuppressWarnings("unchecked")
+    public T getCorrectionTableModel() {
+        return (T) getModel();
+    }
+}
Index: trunk/src/org/openstreetmap/josm/gui/correction/CorrectionTableModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/correction/CorrectionTableModel.java	(revision 10125)
+++ trunk/src/org/openstreetmap/josm/gui/correction/CorrectionTableModel.java	(revision 10125)
@@ -0,0 +1,118 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.correction;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.util.Arrays;
+import java.util.List;
+
+import javax.swing.table.AbstractTableModel;
+
+import org.openstreetmap.josm.data.correction.Correction;
+
+/**
+ * Abstract correction table model.
+ * @param <C> type of correction
+ */
+public abstract class CorrectionTableModel<C extends Correction> extends AbstractTableModel {
+
+    private final transient List<C> corrections;
+    private boolean[] apply;
+    private final int applyColumn;
+
+    /**
+     * Constructs a new {@code CorrectionTableModel}.
+     * @param corrections list of corrections
+     */
+    public CorrectionTableModel(List<C> corrections) {
+        this.corrections = corrections;
+        apply = new boolean[this.corrections.size()];
+        Arrays.fill(apply, true);
+        applyColumn = getColumnCount() - 1;
+    }
+
+    @Override
+    public abstract int getColumnCount();
+
+    protected abstract boolean isBoldCell(int row, int column);
+
+    /**
+     * Returns the column name for columns other than "Apply".
+     * @param colIndex column index
+     * @return the translated column name for given index
+     * @see #getApplyColumn
+     */
+    public abstract String getCorrectionColumnName(int colIndex);
+
+    /**
+     * Returns the correction value at given position.
+     * @param rowIndex row index
+     * @param colIndex column index
+     * @return the correction value at given position
+     */
+    public abstract Object getCorrectionValueAt(int rowIndex, int colIndex);
+
+    /**
+     * Returns the list of corrections.
+     * @return the list of corrections
+     */
+    public List<C> getCorrections() {
+        return corrections;
+    }
+
+    /**
+     * Returns the index of the "Apply" column.
+     * @return the index of the "Apply" column
+     */
+    public int getApplyColumn() {
+        return applyColumn;
+    }
+
+    /**
+     * Returns the "Apply" flag for given index.
+     * @param i index
+     * @return the "Apply" flag for given index
+     */
+    public boolean getApply(int i) {
+        return apply[i];
+    }
+
+    @Override
+    public int getRowCount() {
+        return corrections.size();
+    }
+
+    @Override
+    public Class<?> getColumnClass(int columnIndex) {
+        if (columnIndex == applyColumn)
+            return Boolean.class;
+        return String.class;
+    }
+
+    @Override
+    public String getColumnName(int columnIndex) {
+        if (columnIndex == applyColumn)
+            return tr("Apply?");
+
+        return getCorrectionColumnName(columnIndex);
+    }
+
+    @Override
+    public boolean isCellEditable(int rowIndex, int columnIndex) {
+        return columnIndex == applyColumn;
+    }
+
+    @Override
+    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
+        if (columnIndex == applyColumn && aValue instanceof Boolean)
+            apply[rowIndex] = (Boolean) aValue;
+    }
+
+    @Override
+    public Object getValueAt(int rowIndex, int colIndex) {
+        if (colIndex == applyColumn)
+            return apply[rowIndex];
+
+        return getCorrectionValueAt(rowIndex, colIndex);
+    }
+}
Index: trunk/src/org/openstreetmap/josm/gui/correction/RoleCorrectionTable.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/correction/RoleCorrectionTable.java	(revision 10125)
+++ trunk/src/org/openstreetmap/josm/gui/correction/RoleCorrectionTable.java	(revision 10125)
@@ -0,0 +1,21 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.correction;
+
+import java.util.List;
+
+import org.openstreetmap.josm.data.correction.RoleCorrection;
+
+/**
+ * Role correction table.
+ * @since 1001
+ */
+public class RoleCorrectionTable extends CorrectionTable<RoleCorrectionTableModel> {
+
+    /**
+     * Constructs a new {@code RoleCorrectionTable}.
+     * @param roleCorrections role corrections
+     */
+    public RoleCorrectionTable(List<RoleCorrection> roleCorrections) {
+        super(new RoleCorrectionTableModel(roleCorrections));
+    }
+}
Index: trunk/src/org/openstreetmap/josm/gui/correction/RoleCorrectionTableModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/correction/RoleCorrectionTableModel.java	(revision 10125)
+++ trunk/src/org/openstreetmap/josm/gui/correction/RoleCorrectionTableModel.java	(revision 10125)
@@ -0,0 +1,64 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.correction;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.util.List;
+
+import org.openstreetmap.josm.data.correction.RoleCorrection;
+import org.openstreetmap.josm.gui.DefaultNameFormatter;
+
+/**
+ * Role correction table model.
+ * @since 1001
+ */
+public class RoleCorrectionTableModel extends CorrectionTableModel<RoleCorrection> {
+
+    /**
+     * Constructs a new {@code RoleCorrectionTableModel}.
+     * @param roleCorrections list of role corrections
+     */
+    public RoleCorrectionTableModel(List<RoleCorrection> roleCorrections) {
+        super(roleCorrections);
+    }
+
+    @Override
+    public int getColumnCount() {
+        return 4;
+    }
+
+    @Override
+    public String getCorrectionColumnName(int colIndex) {
+        switch (colIndex) {
+        case 0:
+            return tr("Relation");
+        case 1:
+            return tr("Old role");
+        case 2:
+            return tr("New role");
+        default:
+            return null;
+        }
+    }
+
+    @Override
+    public Object getCorrectionValueAt(int rowIndex, int colIndex) {
+        RoleCorrection roleCorrection = getCorrections().get(rowIndex);
+
+        switch (colIndex) {
+        case 0:
+            return roleCorrection.relation.getDisplayName(DefaultNameFormatter.getInstance());
+        case 1:
+            return roleCorrection.member.getRole();
+        case 2:
+            return roleCorrection.newRole;
+        default:
+            return null;
+        }
+    }
+
+    @Override
+    protected boolean isBoldCell(int row, int column) {
+        return column == 2;
+    }
+}
Index: trunk/src/org/openstreetmap/josm/gui/correction/TagCorrectionTable.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/correction/TagCorrectionTable.java	(revision 10125)
+++ trunk/src/org/openstreetmap/josm/gui/correction/TagCorrectionTable.java	(revision 10125)
@@ -0,0 +1,21 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.correction;
+
+import java.util.List;
+
+import org.openstreetmap.josm.data.correction.TagCorrection;
+
+/**
+ * Tag correction table.
+ * @since 729
+ */
+public class TagCorrectionTable extends CorrectionTable<TagCorrectionTableModel> {
+
+    /**
+     * Constructs a new {@code TagCorrectionTable}.
+     * @param tagCorrections tag corrections
+     */
+    public TagCorrectionTable(List<TagCorrection> tagCorrections) {
+        super(new TagCorrectionTableModel(tagCorrections));
+    }
+}
Index: trunk/src/org/openstreetmap/josm/gui/correction/TagCorrectionTableModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/correction/TagCorrectionTableModel.java	(revision 10125)
+++ trunk/src/org/openstreetmap/josm/gui/correction/TagCorrectionTableModel.java	(revision 10125)
@@ -0,0 +1,69 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.correction;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.util.List;
+
+import org.openstreetmap.josm.data.correction.TagCorrection;
+
+/**
+ * Tag correction table model.
+ * @since 729
+ */
+public class TagCorrectionTableModel extends CorrectionTableModel<TagCorrection> {
+
+    /**
+     * Constructs a new {@code TagCorrectionTableModel}.
+     * @param tagCorrections list of tag corrections
+     */
+    public TagCorrectionTableModel(List<TagCorrection> tagCorrections) {
+        super(tagCorrections);
+    }
+
+    @Override
+    public int getColumnCount() {
+        return 5;
+    }
+
+    @Override
+    public String getCorrectionColumnName(int colIndex) {
+        switch (colIndex) {
+        case 0:
+            return tr("Old key");
+        case 1:
+            return tr("Old value");
+        case 2:
+            return tr("New key");
+        case 3:
+            return tr("New value");
+        default:
+            return null;
+        }
+    }
+
+    @Override
+    public Object getCorrectionValueAt(int rowIndex, int colIndex) {
+        TagCorrection tagCorrection = getCorrections().get(rowIndex);
+
+        switch (colIndex) {
+        case 0:
+            return tagCorrection.oldKey;
+        case 1:
+            return tagCorrection.oldValue;
+        case 2:
+            return tagCorrection.newKey;
+        case 3:
+            return tagCorrection.newValue;
+        default:
+            return null;
+        }
+    }
+
+    @Override
+    protected boolean isBoldCell(int row, int column) {
+        TagCorrection tagCorrection = getCorrections().get(row);
+        return (column == 2 && tagCorrection.isKeyChanged())
+            || (column == 3 && tagCorrection.isValueChanged());
+    }
+}
Index: trunk/src/org/openstreetmap/josm/gui/correction/package-info.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/correction/package-info.java	(revision 10125)
+++ trunk/src/org/openstreetmap/josm/gui/correction/package-info.java	(revision 10125)
@@ -0,0 +1,6 @@
+// License: GPL. For details, see LICENSE file.
+
+/**
+ * Provides the classes for JOSM data correction tables.
+ */
+package org.openstreetmap.josm.gui.correction;
Index: trunk/src/org/openstreetmap/josm/gui/package-info.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/package-info.java	(revision 10125)
+++ trunk/src/org/openstreetmap/josm/gui/package-info.java	(revision 10125)
@@ -0,0 +1,6 @@
+// License: GPL. For details, see LICENSE file.
+
+/**
+ * Provides the classes for JOSM graphical user interface.
+ */
+package org.openstreetmap.josm.gui;
Index: trunk/src/org/openstreetmap/josm/io/package-info.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/package-info.java	(revision 10125)
+++ trunk/src/org/openstreetmap/josm/io/package-info.java	(revision 10125)
@@ -0,0 +1,6 @@
+// License: GPL. For details, see LICENSE file.
+
+/**
+ * Provides the classes for JOSM input/output support.
+ */
+package org.openstreetmap.josm.io;
Index: trunk/src/org/openstreetmap/josm/package-info.java
===================================================================
--- trunk/src/org/openstreetmap/josm/package-info.java	(revision 10125)
+++ trunk/src/org/openstreetmap/josm/package-info.java	(revision 10125)
@@ -0,0 +1,6 @@
+// License: GPL. For details, see LICENSE file.
+
+/**
+ * Provides the classes of JOSM application.
+ */
+package org.openstreetmap.josm;
Index: trunk/src/org/openstreetmap/josm/plugins/package-info.java
===================================================================
--- trunk/src/org/openstreetmap/josm/plugins/package-info.java	(revision 10125)
+++ trunk/src/org/openstreetmap/josm/plugins/package-info.java	(revision 10125)
@@ -0,0 +1,6 @@
+// License: GPL. For details, see LICENSE file.
+
+/**
+ * Provides the classes for JOSM plugins system.
+ */
+package org.openstreetmap.josm.plugins;
Index: trunk/src/org/openstreetmap/josm/tools/package-info.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/package-info.java	(revision 10125)
+++ trunk/src/org/openstreetmap/josm/tools/package-info.java	(revision 10125)
@@ -0,0 +1,6 @@
+// License: GPL. For details, see LICENSE file.
+
+/**
+ * Provides the classes for various utilities and tools called from all other packages.
+ */
+package org.openstreetmap.josm.tools;
