Index: /applications/editors/josm/plugins/validator/build.xml
===================================================================
--- /applications/editors/josm/plugins/validator/build.xml	(revision 19228)
+++ /applications/editors/josm/plugins/validator/build.xml	(revision 19229)
@@ -26,5 +26,5 @@
 	  ** update before publishing 
 	-->
-	<property name="commit.message" value="Fixed JOSM ticket  #4231 - Validator: duplicate nodes test should round to OSM precision" />
+	<property name="commit.message" value="Fixed JOSM ticket #4220 - validator: check for FIXME=*" />
 	<property name="plugin.main.version" value="2694" />
 
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 19228)
+++ /applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/TagChecker.java	(revision 19229)
@@ -547,13 +547,14 @@
                 }
             }
-            if( checkFixmes && value != null && value.length() > 0 )
-            {
-                if( (value.contains("FIXME") || value.contains("check and delete") || key.contains("todo") || key.contains("fixme"))
-                && !withErrors.contains(p, "FIXME"))
-                {
-                    errors.add( new TestError(this, Severity.OTHER, tr("FIXMES"), FIXME, p) );
-                    withErrors.add(p, "FIXME");
-                }
-            }
+			if (checkFixmes && value != null && value.length() > 0) {
+				if ((value.toLowerCase().contains("FIXME")
+						|| value.contains("check and delete")
+						|| key.contains("todo") || key.toLowerCase().contains("fixme"))
+						&& !withErrors.contains(p, "FIXME")) {
+					errors.add(new TestError(this, Severity.OTHER,
+							tr("FIXMES"), FIXME, p));
+					withErrors.add(p, "FIXME");
+				}
+			}
         }
     }
Index: /applications/editors/josm/plugins/validator/test/org/openstreetmap/josm/plugins/validator/tests/TagCheckerTest.groovy
===================================================================
--- /applications/editors/josm/plugins/validator/test/org/openstreetmap/josm/plugins/validator/tests/TagCheckerTest.groovy	(revision 19229)
+++ /applications/editors/josm/plugins/validator/test/org/openstreetmap/josm/plugins/validator/tests/TagCheckerTest.groovy	(revision 19229)
@@ -0,0 +1,57 @@
+package org.openstreetmap.josm.plugins.validator.tests;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+import org.openstreetmap.josm.plugins.validator.tests.TagChecker
+import org.openstreetmap.josm.data.osm.Node;
+import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.data.coor.LatLon
+import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
+
+
+class TagCheckerTest {
+	
+	@BeforeClass
+	static public void init() {
+		TagChecker.initializeData()
+	}
+	
+	@Test
+	public void fixme_lowercase() {
+		TagChecker t  = new TagChecker()
+		
+		def ds = new DataSet()
+		def n1 = new Node(new LatLon(1.0,1.0))
+		n1.put("fixme", "suvey later")
+		ds.addPrimitive n1
+
+		def nodes = [n1]
+
+		t.startTest NullProgressMonitor.INSTANCE
+		t.visit nodes
+		t.endTest()
+		
+		assert t.@errors.size() == 1
+	}
+	
+	@Test
+	public void fixme_upercase() {
+		TagChecker t  = new TagChecker()
+		
+		def ds = new DataSet()
+		def n1 = new Node(new LatLon(1.0,1.0))
+		n1.put("FIXME", "suvey later")
+		ds.addPrimitive n1
+		
+		def nodes = [n1]
+		
+		t.startTest NullProgressMonitor.INSTANCE
+		t.visit nodes
+		t.endTest()
+		
+		assert t.@errors.size() == 1
+	}
+	
+}
