Index: /trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	(revision 5753)
+++ /trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	(revision 5754)
@@ -26,4 +26,5 @@
 import org.openstreetmap.josm.tools.Predicate;
 import org.openstreetmap.josm.tools.template_engine.TemplateEngineDataProvider;
+
 
 /**
@@ -101,4 +102,10 @@
 
     /**
+     * If the primitive is annotated with a tag such as note, fixme, etc.
+     * Match the "work in progress" tags in default elemstyles.xml.
+     */
+    protected static final int FLAG_ANNOTATED = 1 << 12;
+
+    /**
      * Replies the sub-collection of {@link OsmPrimitive}s of type <code>type</code> present in
      * another collection of {@link OsmPrimitive}s. The result collection is a list.
@@ -606,24 +613,27 @@
     }
 
-    /*----------------------------------
-     * UNINTERESTING AND DIRECTION KEYS
-     *----------------------------------*/
-
+    /*---------------------------------------------------
+     * WORK IN PROGRESS, UNINTERESTING AND DIRECTION KEYS
+     *--------------------------------------------------*/
+
+    private static volatile Collection<String> workinprogress = null;
     private static volatile Collection<String> uninteresting = null;
     private static volatile Collection<String> discardable = null;
     
     /**
-     * Contains a list of "uninteresting" keys that do not make an object
+     * Returns a list of "uninteresting" keys that do not make an object
      * "tagged".  Entries that end with ':' are causing a whole namespace to be considered
      * "uninteresting".  Only the first level namespace is considered.
      * Initialized by isUninterestingKey()
+     * @return The list of uninteresting keys.
      */
     public static Collection<String> getUninterestingKeys() {
         if (uninteresting == null) {
             LinkedList<String> l = new LinkedList<String>(Arrays.asList(
-                "source", "source_ref", "source:", "note", "comment",
-                "converted_by", "watch", "watch:", "fixme", "FIXME",
+                "source", "source_ref", "source:", "comment",
+                "converted_by", "watch", "watch:",
                 "description", "attribution"));
             l.addAll(getDiscardableKeys());
+            l.addAll(getWorkInProgressKeys());
             uninteresting = Main.pref.getCollection("tags.uninteresting", l);
         }
@@ -634,7 +644,8 @@
      * Returns a list of keys which have been deemed uninteresting to the point
      * that they can be silently removed from data which is being edited.
+     * @return The list of discardable keys.
      */
     public static Collection<String> getDiscardableKeys() {
-        if(discardable == null) {
+        if (discardable == null) {
             discardable = Main.pref.getCollection("tags.discardable",
                     Arrays.asList("created_by",
@@ -647,7 +658,23 @@
         return discardable;
     }
-
-    /**
-     * Returns true if key is considered "uninteresting".
+    
+    /**
+     * Returns a list of "work in progress" keys that do not make an object
+     * "tagged" but "annotated".
+     * @return The list of work in progress keys.
+     * @since 5754
+     */
+    public static Collection<String> getWorkInProgressKeys() {
+        if (workinprogress == null) {
+            workinprogress = Main.pref.getCollection("tags.workinprogress",
+                    Arrays.asList("note", "fixme", "FIXME"));
+        }
+        return workinprogress;
+    }
+
+    /**
+     * Determines if key is considered "uninteresting".
+     * @param key The key to check
+     * @return true if key is considered "uninteresting".
      */
     public static boolean isUninterestingKey(String key) {
@@ -713,12 +740,35 @@
     }
 
-    /**
-     * true if this object is considered "tagged". To be "tagged", an object
+    private void updateAnnotated() {
+        if (keys != null) {
+            for (String key: keySet()) {
+                if (getWorkInProgressKeys().contains(key)) {
+                    updateFlagsNoLock(FLAG_ANNOTATED, true);
+                    return;
+                }
+            }
+        }
+        updateFlagsNoLock(FLAG_ANNOTATED, false);
+    }
+
+    /**
+     * Determines if this object is considered "tagged". To be "tagged", an object
      * must have one or more "interesting" tags. "created_by" and "source"
      * are typically considered "uninteresting" and do not make an object
      * "tagged".
+     * @return true if this object is considered "tagged"
      */
     public boolean isTagged() {
         return (flags & FLAG_TAGGED) != 0;
+    }
+    
+    /**
+     * Determines if this object is considered "annotated". To be "annotated", an object
+     * must have one or more "work in progress" tags, such as "note" or "fixme".
+     * @return true if this object is considered "annotated"
+     * @since 5754
+     */
+    public boolean isAnnotated() {
+        return (flags & FLAG_ANNOTATED) != 0;
     }
 
@@ -803,4 +853,5 @@
         updateDirectionFlags();
         updateTagged();
+        updateAnnotated();
         if (dataSet != null) {
             dataSet.fireTagsChanged(this, originalKeys);
Index: /trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/WireframeMapRenderer.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/WireframeMapRenderer.java	(revision 5753)
+++ /trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/WireframeMapRenderer.java	(revision 5754)
@@ -248,5 +248,5 @@
                 color = selectedColor;
             } else if (n.isConnectionNode()) {
-                if (n.isTagged()) {
+                if (isNodeTagged(n)) {
                     color = taggedConnectionColor;
                 } else {
@@ -254,5 +254,5 @@
                 }
             } else {
-                if (n.isTagged()) {
+                if (isNodeTagged(n)) {
                     color = taggedColor;
                 } else {
@@ -262,10 +262,10 @@
 
             final int size = max((ds.isSelected(n) ? selectedNodeSize : 0),
-                    (n.isTagged() ? taggedNodeSize : 0),
+                    (isNodeTagged(n) ? taggedNodeSize : 0),
                     (n.isConnectionNode() ? connectionNodeSize : 0),
                     unselectedNodeSize);
 
             final boolean fill = (ds.isSelected(n) && fillSelectedNode) ||
-            (n.isTagged() && fillTaggedNode) ||
+            (isNodeTagged(n) && fillTaggedNode) ||
             (n.isConnectionNode() && fillConnectionNode) ||
             fillUnselectedNode;
@@ -273,4 +273,8 @@
             drawNode(n, color, size, fill);
         }
+    }
+    
+    private boolean isNodeTagged(Node n) {
+        return n.isTagged() || n.isAnnotated();
     }
 
