Index: applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/OSMValidatorPlugin.java
===================================================================
--- applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/OSMValidatorPlugin.java	(revision 9100)
+++ applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/OSMValidatorPlugin.java	(revision 9111)
@@ -58,4 +58,5 @@
 		WronglyOrderedWays.class,
 		UnclosedWays.class,
+		TagChecker.class,
 	};
 
Index: applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/TestError.java
===================================================================
--- applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/TestError.java	(revision 9100)
+++ applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/TestError.java	(revision 9111)
@@ -131,4 +131,16 @@
 	{
 		this.severity = severity;
+	}
+
+	/**
+	 * Sets the ignore state for this error
+	 */
+	public void getIgnoreState()
+	{
+		System.out.println("Ignore " + message);
+		for (OsmPrimitive o : primitives)
+		{
+			System.out.println(o.id + " - " + o.getClass());
+		}
 	}
 
Index: applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/ValidatorDialog.java
===================================================================
--- applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/ValidatorDialog.java	(revision 9100)
+++ applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/ValidatorDialog.java	(revision 9111)
@@ -34,34 +34,31 @@
 	private OSMValidatorPlugin plugin;
 
-    /** Serializable ID */
-    private static final long serialVersionUID = 2952292777351992696L;
-
-	/**
-     * The display tree.
-     */
-    protected ErrorTreePanel tree;
-
-    /** 
-     * The fix button
-     */
-    private JButton fixButton;
-    
-    /** 
-     * The select button
-     */
-    private JButton selectButton;
-    
-    /** Last selected element */
-    private DefaultMutableTreeNode lastSelectedNode = null;
-
-    /**
-     * Constructor
-     */
-    public ValidatorDialog(OSMValidatorPlugin plugin) {
-        super(tr("Validation errors"), "validator", tr("Open the validation window."), KeyEvent.VK_V, 150);
+	/** Serializable ID */
+	private static final long serialVersionUID = 2952292777351992696L;
+
+	/** The display tree */
+	protected ErrorTreePanel tree;
+
+	/** The fix button */
+	private JButton fixButton;
+
+	/** The ignore button */
+	private JButton ignoreButton;
+
+	/** The select button */
+	private JButton selectButton;
+
+	/** Last selected element */
+	private DefaultMutableTreeNode lastSelectedNode = null;
+
+	/**
+	 * Constructor
+	 */
+	public ValidatorDialog(OSMValidatorPlugin plugin) {
+		super(tr("Validation errors"), "validator", tr("Open the validation window."), KeyEvent.VK_V, 150);
 
 		this.plugin = plugin;
-        
-        tree = new ErrorTreePanel();
+
+		tree = new ErrorTreePanel();
 		tree.addMouseListener(new ClickWatch());
 		tree.addTreeSelectionListener(new SelectionWatch());
@@ -69,17 +66,19 @@
 		add(new JScrollPane(tree), BorderLayout.CENTER);
 
-        JPanel buttonPanel = new JPanel(new GridLayout(1,2));
-
-        selectButton = Util.createButton("Select", "mapmode/selection/select", "Set the selected elements on the map to the selected items in the list above.", this);
-        selectButton.setEnabled(false);
-        buttonPanel.add(selectButton); 
-        //add(buttonPanel, BorderLayout.SOUTH);
-        buttonPanel.add(Util.createButton("Validate", "dialogs/refresh", "Validate the data.", this)); 
-        // add(buttonPanel, BorderLayout.SOUTH);
-        fixButton = Util.createButton("Fix", "dialogs/fix", "Fix the selected errors.", this);
-        fixButton.setEnabled(false);
-        buttonPanel.add(fixButton); 
-        add(buttonPanel, BorderLayout.SOUTH);
-    }
+		JPanel buttonPanel = new JPanel(new GridLayout(1,2));
+
+		selectButton = Util.createButton(tr("Select"), "select", "mapmode/selection/select",
+		tr("Set the selected elements on the map to the selected items in the list above."), this);
+		selectButton.setEnabled(false);
+		buttonPanel.add(selectButton);
+		buttonPanel.add(Util.createButton(tr("Validate"), "validate", "dialogs/refresh", tr("Validate the data."), this));
+		fixButton = Util.createButton(tr("Fix"), "fix", "dialogs/fix", tr("Fix the selected errors."), this);
+		fixButton.setEnabled(false);
+		buttonPanel.add(fixButton);
+		ignoreButton = Util.createButton(tr("Ignore"), "ignore", "dialogs/delete", tr("Ignore the selected errors next time."), this);
+		ignoreButton.setEnabled(false);
+		buttonPanel.add(ignoreButton);
+		add(buttonPanel, BorderLayout.SOUTH);
+	}
 
     @Override 
@@ -139,5 +138,47 @@
     	plugin.validateAction.doValidate(e, false);
 	}	
-	
+
+	/**
+	 * Set selected errors to ignore state
+	 * @param e
+	 */
+	@SuppressWarnings("unchecked")
+	private void ignoreErrors(ActionEvent e)
+	{
+		TreePath[] selectionPaths = tree.getSelectionPaths();
+		if( selectionPaths == null )
+			return;
+
+		Set<DefaultMutableTreeNode> processedNodes = new HashSet<DefaultMutableTreeNode>();
+		for( TreePath path : selectionPaths )
+		{
+			DefaultMutableTreeNode node = (DefaultMutableTreeNode)path.getLastPathComponent();
+			if( node == null )
+				continue;
+
+			Enumeration<DefaultMutableTreeNode> children = node.breadthFirstEnumeration();
+			while( children.hasMoreElements() )
+			{
+				DefaultMutableTreeNode childNode = children.nextElement();
+				if( processedNodes.contains(childNode) )
+					continue;
+
+				processedNodes.add(childNode);
+				Object nodeInfo = childNode.getUserObject();
+				if( nodeInfo instanceof TestError)
+				{
+					TestError error = (TestError)nodeInfo;
+					String error.getIgnoreState();
+/* ignore */
+				}
+			}
+		}
+
+		Main.map.repaint();
+		DataSet.fireSelectionChanged(Main.ds.getSelected());
+
+		plugin.validateAction.doValidate(e, false);
+	}
+
     /**
      * Sets the selection of the map to the current selected items.
@@ -177,10 +218,12 @@
 	{
 		String actionCommand = e.getActionCommand();
-		if( actionCommand.equals("Select"))
+		if( actionCommand.equals("select"))
 			setSelectedItems();
-		else if( actionCommand.equals("Validate"))
-	    	plugin.validateAction.actionPerformed(e);
-		else if( actionCommand.equals("Fix"))
-	    	fixErrors(e); 
+		else if( actionCommand.equals("validate"))
+			plugin.validateAction.actionPerformed(e);
+		else if( actionCommand.equals("fix"))
+			fixErrors(e);
+		else if( actionCommand.equals("ignore"))
+			ignoreErrors(e);
 	}
 
@@ -211,31 +254,32 @@
             }  
         }
-        
-        lastSelectedNode = node;
-    	if( node == null ) 
-    		return hasFixes;
+
+		lastSelectedNode = node;
+		if( node == null )
+			return hasFixes;
 
 		Enumeration<DefaultMutableTreeNode> children = node.breadthFirstEnumeration();
 		while( children.hasMoreElements() )
 		{
-    		DefaultMutableTreeNode childNode = children.nextElement();
-    		Object nodeInfo = childNode.getUserObject();
-    		if( nodeInfo instanceof TestError)
-    		{
-    			TestError error = (TestError)nodeInfo;
-                error.setSelected(true);
-                
-    			hasFixes = hasFixes || error.isFixable();
-    			if( addSelected )
-    			{
-        			sel.addAll( error.getPrimitives() );
-    			}
-    		}
+			DefaultMutableTreeNode childNode = children.nextElement();
+			Object nodeInfo = childNode.getUserObject();
+			if( nodeInfo instanceof TestError)
+			{
+				TestError error = (TestError)nodeInfo;
+				error.setSelected(true);
+
+				hasFixes = hasFixes || error.isFixable();
+				if( addSelected )
+				{
+					sel.addAll( error.getPrimitives() );
+				}
+			}
 		}
-        selectButton.setEnabled(true);
+		selectButton.setEnabled(true);
+		ignoreButton.setEnabled(true);
 		
 		return hasFixes;
 	}
-    
+
 	/**
 	 * Watches for clicks.
@@ -243,23 +287,24 @@
 	public class ClickWatch extends MouseAdapter 
 	{
-        @Override 
-		public void mouseClicked(MouseEvent e) 
+		@Override
+		public void mouseClicked(MouseEvent e)
 		{
-            fixButton.setEnabled(false);
-            selectButton.setEnabled(false);
-            
+			fixButton.setEnabled(false);
+			ignoreButton.setEnabled(false);
+			selectButton.setEnabled(false);
+
 			boolean isDblClick = e.getClickCount() > 1;
-            Collection<OsmPrimitive> sel = isDblClick ? new HashSet<OsmPrimitive>(40) : null;
-			
+			Collection<OsmPrimitive> sel = isDblClick ? new HashSet<OsmPrimitive>(40) : null;
+
 			boolean hasFixes = setSelection(sel, isDblClick);
-	        fixButton.setEnabled(hasFixes);
-	        
-	        if( isDblClick)
+			fixButton.setEnabled(hasFixes);
+
+			if(isDblClick)
 			{
-	    		Main.ds.setSelected(sel);
+				Main.ds.setSelected(sel);
 			}
 		}
 	}
-	
+
 	/**
 	 * Watches for tree selection.
@@ -267,19 +312,20 @@
 	public class SelectionWatch implements TreeSelectionListener 
 	{
-        @SuppressWarnings("unchecked")
-		public void valueChanged(TreeSelectionEvent e) 
+		@SuppressWarnings("unchecked")
+		public void valueChanged(TreeSelectionEvent e)
 		{
-	        fixButton.setEnabled(false);
-            selectButton.setEnabled(false);
-        	
+			fixButton.setEnabled(false);
+			ignoreButton.setEnabled(false);
+			selectButton.setEnabled(false);
+
 			if(e.getSource() instanceof JScrollPane)
-            {
-                System.out.println(e.getSource());
-                return;
-            }
-        	
+			{
+				System.out.println(e.getSource());
+				return;
+			}
+
 			boolean hasFixes = setSelection(null, false);
-	        fixButton.setEnabled(hasFixes);
-            Main.map.repaint();            
+			fixButton.setEnabled(hasFixes);
+			Main.map.repaint();
 		}
 	}
Index: applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/TagChecker.java
===================================================================
--- applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/TagChecker.java	(revision 9111)
+++ applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/TagChecker.java	(revision 9111)
@@ -0,0 +1,56 @@
+package org.openstreetmap.josm.plugins.validator.tests;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.util.*;
+
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.data.osm.Node;
+import org.openstreetmap.josm.plugins.validator.Severity;
+import org.openstreetmap.josm.plugins.validator.Test;
+import org.openstreetmap.josm.plugins.validator.TestError;
+import org.openstreetmap.josm.plugins.validator.util.Bag;
+
+/**
+ * Check area type ways for errors
+ *
+ * @author stoecker
+ */
+public class TagChecker extends Test  {
+	/** The already detected errors */
+	Bag<Way, Way> _errorWays;
+
+	/**
+	 * Constructor
+	 */
+	public TagChecker()
+	{
+		super(tr("Tag Checker."),
+			  tr("This tests if major tags are used as expected."));
+	}
+
+	@Override
+	public void startTest()
+	{
+		_errorWays = new Bag<Way, Way>();
+	}
+
+	@Override
+	public void endTest()
+	{
+		_errorWays = null;
+	}
+	
+	@Override
+	public void visit(Node n)
+	{
+/* ... */
+	}
+
+	@Override
+	public void visit(Way w)
+	{
+/* ... */
+	}
+}
Index: applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/UnclosedWays.java
===================================================================
--- applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/UnclosedWays.java	(revision 9100)
+++ applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/UnclosedWays.java	(revision 9111)
@@ -28,5 +28,5 @@
 	{
 		super(tr("Unclosed Ways."),
-			  tr("This test if ways which should be circular are closed."));
+			  tr("This tests if ways which should be circular are closed."));
 	}
 
@@ -101,10 +101,10 @@
 			type = tr("waterway type {0}", tr(test));
 		}
-		test = w.get("junction");
+		/*test = w.get("junction");
 		if(test != null && test.equals("roundabout"))
 		{
 			force = true;
 			type = tr("junction type {0}", tr(test));
-		}
+		}*/
 		test = w.get("building");
 		if (test != null && ("true".equalsIgnoreCase(test) || "yes".equalsIgnoreCase(test) || "1".equals(test)))
Index: applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/util/Util.java
===================================================================
--- applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/util/Util.java	(revision 9100)
+++ applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/util/Util.java	(revision 9111)
@@ -44,11 +44,11 @@
 	 * @return The created button
 	 */
-    public static JButton createButton(String name, String icon, String tooltip, ActionListener action) 
-    {
-		JButton button = new JButton(tr(name), ImageProvider.get(icon));
-		button.setActionCommand(name);
+    public static JButton createButton(String name, String actionname, String icon, String tooltip, ActionListener action)
+    {
+		JButton button = new JButton(name, ImageProvider.get(icon));
+		button.setActionCommand(actionname);
 		button.addActionListener(action);
 		button.setToolTipText(tr(tooltip));
-		button.putClientProperty("help", "Dialog/SelectionList/" + name);
+		button.putClientProperty("help", "Dialog/SelectionList/" + actionname);
 		return button;
 	}
