Index: src/org/openstreetmap/josm/actions/SplitWayAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/SplitWayAction.java	(revision 1485)
+++ src/org/openstreetmap/josm/actions/SplitWayAction.java	(working copy)
@@ -253,8 +253,6 @@
             Way wayToAdd = new Way();
             if (selectedWay.keys != null) {
                 wayToAdd.keys = new HashMap<String, String>(selectedWay.keys);
-                wayToAdd.checkTagged();
-                wayToAdd.checkDirectionTagged();
             }
             newWays.add(wayToAdd);
             wayToAdd.nodes.addAll(chunkIt.next());
Index: src/org/openstreetmap/josm/actions/search/SearchCompiler.java
===================================================================
--- src/org/openstreetmap/josm/actions/search/SearchCompiler.java	(revision 1485)
+++ src/org/openstreetmap/josm/actions/search/SearchCompiler.java	(working copy)
@@ -314,7 +314,7 @@
 
     private static class Untagged extends Match {
         @Override public boolean match(OsmPrimitive osm) {
-            return !osm.tagged;
+            return !osm.isTagged();
         }
         @Override public String toString() {return "untagged";}
     }
Index: src/org/openstreetmap/josm/actions/UnGlueAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/UnGlueAction.java	(revision 1485)
+++ src/org/openstreetmap/josm/actions/UnGlueAction.java	(working copy)
@@ -139,7 +139,6 @@
 
         Node c = new Node(selectedNode);
         c.keys = null;
-        c.tagged = false;
         c.selected = false;
         cmds.add(new ChangeCommand(selectedNode, c));
         
@@ -188,7 +187,7 @@
             return false;
         
         selectedNode = (Node)n;
-        return  selectedNode.tagged;
+        return  selectedNode.isTagged();
     }
 
     /**
Index: src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
===================================================================
--- src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java	(revision 1485)
+++ src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java	(working copy)
@@ -401,7 +401,7 @@
                     trkseg = new ArrayList<WayPoint>();
                     trk.trackSegs.add(trkseg);
                 }
-                if (!n.tagged) {
+                if (!n.isTagged()) {
                     doneNodes.add(n);
                 }
                 WayPoint wpt = new WayPoint(n.coor);
Index: src/org/openstreetmap/josm/gui/dialogs/RelationEditor.java
===================================================================
--- src/org/openstreetmap/josm/gui/dialogs/RelationEditor.java	(revision 1485)
+++ src/org/openstreetmap/josm/gui/dialogs/RelationEditor.java	(working copy)
@@ -409,8 +409,7 @@
         if (RelationEditor.this.relation == null) {
             // If the user wanted to create a new relation, but hasn't added any members or
             // tags, don't add an empty relation
-            clone.checkTagged();
-            if(clone.members.size() == 0 && !clone.tagged)
+            if(clone.members.size() == 0 && !clone.isTagged())
                 return;
             Main.main.undoRedo.add(new AddCommand(clone));
             DataSet.fireSelectionChanged(Main.ds.getSelected());
Index: src/org/openstreetmap/josm/io/OsmReader.java
===================================================================
--- src/org/openstreetmap/josm/io/OsmReader.java	(revision 1485)
+++ src/org/openstreetmap/josm/io/OsmReader.java	(working copy)
@@ -104,8 +104,6 @@
                osm.user = user;
                osm.visible = visible;
                osm.version = version;
-               osm.checkTagged();
-               osm.checkDirectionTagged();
                osm.mappaintStyle = null;
           }
      }
Index: src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java
===================================================================
--- src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java	(revision 1485)
+++ src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java	(working copy)
@@ -162,7 +162,7 @@
 
         //profilerN = 0;
         for (final OsmPrimitive osm : data.ways)
-            if (!osm.deleted && !osm.selected && osm.tagged)
+            if (!osm.deleted && !osm.selected && osm.isTagged())
             {
                 osm.visit(this);
         //        profilerN++;
@@ -170,7 +170,7 @@
         displaySegments();
 
         for (final OsmPrimitive osm : data.ways)
-            if (!osm.deleted && !osm.selected && !osm.tagged)
+            if (!osm.deleted && !osm.selected && !osm.isTagged())
             {
                 osm.visit(this);
         //        profilerN++;
@@ -254,7 +254,7 @@
             drawNode(n, highlightColor, selectedNodeSize, selectedNodeRadius, fillSelectedNode);
         else if (n.selected)
             drawNode(n, selectedColor, selectedNodeSize, selectedNodeRadius, fillSelectedNode);
-        else if(n.tagged)
+        else if(n.isTagged())
             drawNode(n, nodeColor, taggedNodeSize, taggedNodeRadius, fillUnselectedNode);
         else
             drawNode(n, nodeColor, unselectedNodeSize, unselectedNodeRadius, fillUnselectedNode);
@@ -300,7 +300,7 @@
            (even if the tag is negated as in oneway=false) or the way is selected */
 
         boolean showThisDirectionArrow = w.selected
-        || (showDirectionArrow && (!showRelevantDirectionsOnly || w.hasDirectionKeys));
+        || (showDirectionArrow && (!showRelevantDirectionsOnly || w.hasDirectionKeys()));
         /* head only takes over control if the option is true,
            the direction should be shown at all and not only because it's selected */
         boolean showOnlyHeadArrowOnly = showThisDirectionArrow && !w.selected && showHeadArrowOnly;
@@ -312,7 +312,7 @@
             wayColor = highlightColor;
         } else if(w.selected) {
             wayColor = selectedColor;
-        } else if (!w.tagged) {
+        } else if (!w.isTagged()) {
             wayColor = untaggedWayColor;
         } else {
             wayColor = dfltWayColor;
Index: src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java
===================================================================
--- src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java	(revision 1485)
+++ src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java	(working copy)
@@ -156,7 +156,7 @@
             drawNode(n, highlightColor, selectedNodeSize, selectedNodeRadius, fillSelectedNode);
         else if (n.selected)
             drawNode(n, selectedColor, selectedNodeSize, selectedNodeRadius, fillSelectedNode);
-        else if (n.tagged)
+        else if (n.isTagged())
             drawNode(n, nodeColor, taggedNodeSize, taggedNodeRadius, fillUnselectedNode);
         else
             drawNode(n, nodeColor, unselectedNodeSize, unselectedNodeRadius, fillUnselectedNode);
@@ -244,7 +244,7 @@
            the way is tagged with a direction key
            (even if the tag is negated as in oneway=false) or the way is selected */
         boolean showDirection = w.selected || ((!useRealWidth) && (showDirectionArrow
-        && (!showRelevantDirectionsOnly || w.hasDirectionKeys)));
+        && (!showRelevantDirectionsOnly || w.hasDirectionKeys())));
         /* head only takes over control if the option is true,
            the direction should be shown at all and not only because it's selected */
         boolean showOnlyHeadArrowOnly = showDirection && !w.selected && showHeadArrowOnly;
Index: src/org/openstreetmap/josm/data/osm/Way.java
===================================================================
--- src/org/openstreetmap/josm/data/osm/Way.java	(revision 1485)
+++ src/org/openstreetmap/josm/data/osm/Way.java	(working copy)
@@ -91,7 +91,6 @@
         super.cloneFrom(osm);
         nodes.clear();
         nodes.addAll(((Way)osm).nodes);
-        checkDirectionTagged();
     }
 
     @Override public String toString() {
Index: src/org/openstreetmap/josm/data/osm/OsmPrimitive.java
===================================================================
--- src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	(revision 1485)
+++ src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	(working copy)
@@ -106,19 +106,6 @@
     public User user = null;
 
     /**
-     * true if this object is considered "tagged". To be "tagged", an object
-     * must have one or more "non-standard" tags. "created_by" and "source"
-     * are typically considered "standard" tags and do not make an object
-     * "tagged".
-     */
-    public boolean tagged = false;
-
-    /**
-     * true if this object has direction dependent tags (e.g. oneway)
-     */
-    public boolean hasDirectionKeys = false;
-
-    /**
      * If set to true, this object is currently selected.
      */
     public volatile boolean selected = false;
@@ -241,8 +228,6 @@
                 keys = new HashMap<String, String>();
             keys.put(key, value);
         }
-        checkTagged();
-        checkDirectionTagged();
         mappaintStyle = null;
     }
     /**
@@ -254,8 +239,6 @@
             if (keys.isEmpty())
                 keys = null;
         }
-        checkTagged();
-        checkDirectionTagged();
         mappaintStyle = null;
     }
 
@@ -291,7 +274,6 @@
         selected = osm.selected;
         timestamp = osm.timestamp;
         version = osm.version;
-        tagged = osm.tagged;
         incomplete = osm.incomplete;
         clearCached();
         clearErrors();
@@ -320,39 +302,40 @@
     }
 
     /**
-     * Updates the "tagged" flag. "keys" property should probably be made private
-     * to make sure this gets called when keys are set.
+     * true if this object is considered "tagged". To be "tagged", an object
+     * must have one or more "non-standard" tags. "created_by" and "source"
+     * are typically considered "standard" tags and do not make an object
+     * "tagged".
      */
-    public void checkTagged() {
-        tagged = false;
+    public boolean isTagged() {
+        // TODO Cache value after keys are made private
         if(uninteresting == null)
             uninteresting = Main.pref.getCollection("tags.uninteresting",
             Arrays.asList(new String[]{"source","note","comment","converted_by","created_by"}));
         if (keys != null) {
             for (Entry<String,String> e : keys.entrySet()) {
                 if (!uninteresting.contains(e.getKey())) {
-                    tagged = true;
-                    break;
+                    return true;
                 }
             }
         }
+        return false;
     }
     /**
-     * Updates the "hasDirectionKeys" flag. "keys" property should probably be made private
-     * to make sure this gets called when keys are set.
+     * true if this object has direction dependent tags (e.g. oneway)
      */
-    public void checkDirectionTagged() {
-        hasDirectionKeys = false;
+    public boolean hasDirectionKeys() {
+        // TODO Cache value after keys are made private
         if(directionKeys == null)
             directionKeys = Main.pref.getCollection("tags.direction",
             Arrays.asList(new String[]{"oneway","incline","incline_steep","aerialway"}));
         if (keys != null) {
             for (Entry<String,String> e : keys.entrySet()) {
                 if (directionKeys.contains(e.getKey())) {
-                    hasDirectionKeys = true;
-                    break;
+                    return true;
                 }
             }
         }
+        return false;
     }
 }
Index: src/org/openstreetmap/josm/command/DeleteCommand.java
===================================================================
--- src/org/openstreetmap/josm/command/DeleteCommand.java	(revision 1485)
+++ src/org/openstreetmap/josm/command/DeleteCommand.java	(working copy)
@@ -188,7 +188,7 @@
             for (OsmPrimitive osm : del) {
                 if (osm instanceof Way) {
                     for (Node n : ((Way) osm).nodes) {
-                        if (!n.tagged) {
+                        if (!n.isTagged()) {
                             CollectBackReferencesVisitor v = new CollectBackReferencesVisitor(Main.ds, false);
                             n.visit(v);
                             v.data.removeAll(del);
@@ -321,8 +321,6 @@
             Way wnew2 = new Way();
             if (wnew.keys != null) {
                 wnew2.keys = new HashMap<String, String>(wnew.keys);
-                wnew2.checkTagged();
-                wnew2.checkDirectionTagged();
             }
             wnew2.nodes.addAll(n2);
             cmds.add(new AddCommand(wnew2))