Index: /trunk/src/org/openstreetmap/josm/data/osm/AbstractPrimitive.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/AbstractPrimitive.java	(revision 9459)
+++ /trunk/src/org/openstreetmap/josm/data/osm/AbstractPrimitive.java	(revision 9460)
@@ -145,10 +145,4 @@
     }
 
-    /**
-     * Replies the version number as returned by the API. The version is 0 if the id is 0 or
-     * if this primitive is incomplete.
-     *
-     * @see PrimitiveData#setVersion(int)
-     */
     @Override
     public int getVersion() {
@@ -156,9 +150,4 @@
     }
 
-    /**
-     * Replies the id of this primitive.
-     *
-     * @return the id of this primitive.
-     */
     @Override
     public long getId() {
@@ -178,6 +167,6 @@
 
     /**
-     *
-     * @return True if primitive is new (not yet uploaded the server, id &lt;= 0)
+     * Determines if this primitive is new.
+     * @return {@code true} if this primitive is new (not yet uploaded the server, id &lt;= 0)
      */
     @Override
@@ -186,10 +175,4 @@
     }
 
-    /**
-     *
-     * @return True if primitive is new or undeleted
-     * @see #isNew()
-     * @see #isUndeleted()
-     */
     @Override
     public boolean isNewOrUndeleted() {
@@ -197,16 +180,4 @@
     }
 
-    /**
-     * Sets the id and the version of this primitive if it is known to the OSM API.
-     *
-     * Since we know the id and its version it can't be incomplete anymore. incomplete
-     * is set to false.
-     *
-     * @param id the id. &gt; 0 required
-     * @param version the version &gt; 0 required
-     * @throws IllegalArgumentException if id &lt;= 0
-     * @throws IllegalArgumentException if version &lt;= 0
-     * @throws DataIntegrityProblemException if id is changed and primitive was already added to the dataset
-     */
     @Override
     public void setOsmId(long id, int version) {
@@ -239,9 +210,4 @@
     }
 
-    /**
-     * Replies the user who has last touched this object. May be null.
-     *
-     * @return the user who has last touched this object. May be null.
-     */
     @Override
     public User getUser() {
@@ -249,9 +215,4 @@
     }
 
-    /**
-     * Sets the user who has last touched this object.
-     *
-     * @param user the user
-     */
     @Override
     public void setUser(User user) {
@@ -259,11 +220,4 @@
     }
 
-    /**
-     * Replies the id of the changeset this primitive was last uploaded to.
-     * 0 if this primitive wasn't uploaded to a changeset yet or if the
-     * changeset isn't known.
-     *
-     * @return the id of the changeset this primitive was last uploaded to.
-     */
     @Override
     public int getChangesetId() {
@@ -271,12 +225,4 @@
     }
 
-    /**
-     * Sets the changeset id of this primitive. Can't be set on a new
-     * primitive.
-     *
-     * @param changesetId the id. &gt;= 0 required.
-     * @throws IllegalStateException if this primitive is new.
-     * @throws IllegalArgumentException if id &lt; 0
-     */
     @Override
     public void setChangesetId(int changesetId) {
@@ -291,9 +237,4 @@
     }
 
-    /**
-     * Replies the unique primitive id for this primitive
-     *
-     * @return the unique primitive id for this primitive
-     */
     @Override
     public PrimitiveId getPrimitiveId() {
@@ -315,11 +256,4 @@
     }
 
-    /**
-     * Time of last modification to this object. This is not set by JOSM but
-     * read from the server and delivered back to the server unmodified. It is
-     * used to check against edit conflicts.
-     *
-     * @return date of last modification
-     */
     @Override
     public Date getTimestamp() {
@@ -349,9 +283,4 @@
     }
 
-    /**
-     * Marks this primitive as being modified.
-     *
-     * @param modified true, if this primitive is to be modified
-     */
     @Override
     public void setModified(boolean modified) {
@@ -359,14 +288,4 @@
     }
 
-    /**
-     * Replies <code>true</code> if the object has been modified since it was loaded from
-     * the server. In this case, on next upload, this object will be updated.
-     *
-     * Deleted objects are deleted from the server. If the objects are added (id=0),
-     * the modified is ignored and the object is added to the server.
-     *
-     * @return <code>true</code> if the object has been modified since it was loaded from
-     * the server
-     */
     @Override
     public boolean isModified() {
@@ -374,10 +293,4 @@
     }
 
-    /**
-     * Replies <code>true</code>, if the object has been deleted.
-     *
-     * @return <code>true</code>, if the object has been deleted.
-     * @see #setDeleted(boolean)
-     */
     @Override
     public boolean isDeleted() {
@@ -385,33 +298,14 @@
     }
 
-    /**
-     * Replies <code>true</code> if the object has been deleted on the server and was undeleted by the user.
-     * @return <code>true</code> if the object has been undeleted
-     */
+    @Override
     public boolean isUndeleted() {
         return (flags & (FLAG_VISIBLE + FLAG_DELETED)) == 0;
     }
 
-    /**
-     * Replies <code>true</code>, if the object is usable
-     * (i.e. complete and not deleted).
-     *
-     * @return <code>true</code>, if the object is usable.
-     * @see #setDeleted(boolean)
-     */
+    @Override
     public boolean isUsable() {
         return (flags & (FLAG_DELETED + FLAG_INCOMPLETE)) == 0;
     }
 
-    /**
-     * Checks if object is known to the server.
-     * Replies true if this primitive is either unknown to the server (i.e. its id
-     * is 0) or it is known to the server and it hasn't be deleted on the server.
-     * Replies false, if this primitive is known on the server and has been deleted
-     * on the server.
-     *
-     * @return <code>true</code>, if the object is visible on server.
-     * @see #setVisible(boolean)
-     */
     @Override
     public boolean isVisible() {
@@ -419,11 +313,4 @@
     }
 
-    /**
-     * Sets whether this primitive is visible, i.e. whether it is known on the server
-     * and not deleted on the server.
-     *
-     * @see #isVisible()
-     * @throws IllegalStateException if visible is set to false on an primitive with id==0
-     */
     @Override
     public void setVisible(boolean visible) {
@@ -433,11 +320,4 @@
     }
 
-    /**
-     * Sets whether this primitive is deleted or not.
-     *
-     * Also marks this primitive as modified if deleted is true.
-     *
-     * @param deleted  true, if this primitive is deleted; false, otherwise
-     */
     @Override
     public void setDeleted(boolean deleted) {
@@ -774,10 +654,4 @@
     protected abstract void keysChangedImpl(Map<String, String> originalKeys);
 
-    /**
-     * Replies the name of this primitive. The default implementation replies the value
-     * of the tag <tt>name</tt> or null, if this tag is not present.
-     *
-     * @return the name of this primitive
-     */
     @Override
     public String getName() {
@@ -785,11 +659,4 @@
     }
 
-    /**
-     * Replies a localized name for this primitive given by the value of the name tags
-     * accessed from very specific (language variant) to more generic (default name).
-     *
-     * @see LanguageInfo#getLanguageCodes
-     * @return the name of this primitive, <code>null</code> if no name exists
-     */
     @Override
     public String getLocalName() {
Index: /trunk/src/org/openstreetmap/josm/data/osm/INode.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/INode.java	(revision 9459)
+++ /trunk/src/org/openstreetmap/josm/data/osm/INode.java	(revision 9460)
@@ -5,12 +5,32 @@
 import org.openstreetmap.josm.data.coor.LatLon;
 
+/**
+ * INode captures the common functions of {@link Node} and {@link NodeData}.
+ * @since 4098
+ */
 public interface INode extends IPrimitive {
 
+    /**
+     * Returns lat/lon coordinates of this node.
+     * @return lat/lon coordinates of this node
+     */
     LatLon getCoor();
 
+    /**
+     * Sets lat/lon coordinates of this node.
+     * @param coor lat/lon coordinates of this node
+     */
     void setCoor(LatLon coor);
 
+    /**
+     * Returns east/north coordinates of this node.
+     * @return east/north coordinates of this node
+     */
     EastNorth getEastNorth();
 
+    /**
+     * Sets east/north coordinates of this node.
+     * @param eastNorth east/north coordinates of this node
+     */
     void setEastNorth(EastNorth eastNorth);
 }
Index: /trunk/src/org/openstreetmap/josm/data/osm/IPrimitive.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/IPrimitive.java	(revision 9459)
+++ /trunk/src/org/openstreetmap/josm/data/osm/IPrimitive.java	(revision 9460)
@@ -5,56 +5,231 @@
 
 import org.openstreetmap.josm.data.osm.visitor.PrimitiveVisitor;
+import org.openstreetmap.josm.tools.LanguageInfo;
 
 /**
  * IPrimitive captures the common functions of {@link OsmPrimitive} and {@link PrimitiveData}.
+ * @since 4098
  */
 public interface IPrimitive extends Tagged, PrimitiveId {
 
+    /**
+     * Replies <code>true</code> if the object has been modified since it was loaded from
+     * the server. In this case, on next upload, this object will be updated.
+     *
+     * Deleted objects are deleted from the server. If the objects are added (id=0),
+     * the modified is ignored and the object is added to the server.
+     *
+     * @return <code>true</code> if the object has been modified since it was loaded from
+     * the server
+     */
     boolean isModified();
 
+    /**
+     * Marks this primitive as being modified.
+     *
+     * @param modified true, if this primitive is to be modified
+     */
     void setModified(boolean modified);
 
+    /**
+     * Checks if object is known to the server.
+     * Replies true if this primitive is either unknown to the server (i.e. its id
+     * is 0) or it is known to the server and it hasn't be deleted on the server.
+     * Replies false, if this primitive is known on the server and has been deleted
+     * on the server.
+     *
+     * @return <code>true</code>, if the object is visible on server.
+     * @see #setVisible(boolean)
+     */
     boolean isVisible();
 
+    /**
+     * Sets whether this primitive is visible, i.e. whether it is known on the server
+     * and not deleted on the server.
+     * @param visible {@code true} if this primitive is visible
+     *
+     * @throws IllegalStateException if visible is set to false on an primitive with id==0
+     * @see #isVisible()
+     */
     void setVisible(boolean visible);
 
+    /**
+     * Replies <code>true</code>, if the object has been deleted.
+     *
+     * @return <code>true</code>, if the object has been deleted.
+     * @see #setDeleted(boolean)
+     */
     boolean isDeleted();
 
+    /**
+     * Sets whether this primitive is deleted or not.
+     *
+     * Also marks this primitive as modified if deleted is true.
+     *
+     * @param deleted  true, if this primitive is deleted; false, otherwise
+     */
     void setDeleted(boolean deleted);
 
+    /**
+     * Determines if this primitive is incomplete.
+     * @return {@code true} if this primitive is incomplete, {@code false} otherwise
+     */
     boolean isIncomplete();
 
+    /**
+     * Replies <code>true</code> if the object has been deleted on the server and was undeleted by the user.
+     * @return <code>true</code> if the object has been undeleted
+     */
+    boolean isUndeleted();
+
+    /**
+     * Replies <code>true</code>, if the object is usable
+     * (i.e. complete and not deleted).
+     *
+     * @return <code>true</code>, if the object is usable.
+     * @see #setDeleted(boolean)
+     */
+    boolean isUsable();
+
+    /**
+     * Determines if this primitive is new or undeleted.
+     * @return True if primitive is new or undeleted
+     * @see #isNew()
+     * @see #isUndeleted()
+     */
     boolean isNewOrUndeleted();
 
+    /**
+     * Replies the id of this primitive.
+     *
+     * @return the id of this primitive.
+     */
     long getId();
 
+    /**
+     * Replies the unique primitive id for this primitive
+     *
+     * @return the unique primitive id for this primitive
+     */
     PrimitiveId getPrimitiveId();
 
+    /**
+     * Replies the version number as returned by the API. The version is 0 if the id is 0 or
+     * if this primitive is incomplete.
+     * @return the version number as returned by the API
+     *
+     * @see PrimitiveData#setVersion(int)
+     */
     int getVersion();
 
+    /**
+     * Sets the id and the version of this primitive if it is known to the OSM API.
+     *
+     * Since we know the id and its version it can't be incomplete anymore. incomplete
+     * is set to false.
+     *
+     * @param id the id. &gt; 0 required
+     * @param version the version &gt; 0 required
+     * @throws IllegalArgumentException if id &lt;= 0
+     * @throws IllegalArgumentException if version &lt;= 0
+     * @throws DataIntegrityProblemException if id is changed and primitive was already added to the dataset
+     */
     void setOsmId(long id, int version);
 
+    /**
+     * Replies the user who has last touched this object. May be null.
+     *
+     * @return the user who has last touched this object. May be null.
+     */
     User getUser();
 
+    /**
+     * Sets the user who has last touched this object.
+     *
+     * @param user the user
+     */
     void setUser(User user);
 
+    /**
+     * Time of last modification to this object. This is not set by JOSM but
+     * read from the server and delivered back to the server unmodified. It is
+     * used to check against edit conflicts.
+     *
+     * @return date of last modification
+     * @see #setTimestamp
+     */
     Date getTimestamp();
 
+    /**
+     * Time of last modification to this object. This is not set by JOSM but
+     * read from the server and delivered back to the server unmodified. It is
+     * used to check against edit conflicts.
+     *
+     * @return last modification as timestamp
+     * @see #setRawTimestamp
+     */
     int getRawTimestamp();
 
+    /**
+     * Sets time of last modification to this object
+     * @param timestamp date of last modification
+     * @see #getTimestamp
+     */
     void setTimestamp(Date timestamp);
 
+    /**
+     * Sets time of last modification to this object
+     * @param timestamp date of last modification
+     * @see #getRawTimestamp
+     */
     void setRawTimestamp(int timestamp);
 
+    /**
+     * Determines if this primitive has no timestam information.
+     * @return {@code true} if this primitive has no timestam information
+     * @see #getTimestamp
+     * @see #getRawTimestamp
+     */
     boolean isTimestampEmpty();
 
+    /**
+     * Replies the id of the changeset this primitive was last uploaded to.
+     * 0 if this primitive wasn't uploaded to a changeset yet or if the
+     * changeset isn't known.
+     *
+     * @return the id of the changeset this primitive was last uploaded to.
+     */
     int getChangesetId();
 
+    /**
+     * Sets the changeset id of this primitive. Can't be set on a new primitive.
+     *
+     * @param changesetId the id. &gt;= 0 required.
+     * @throws IllegalStateException if this primitive is new.
+     * @throws IllegalArgumentException if id &lt; 0
+     */
     void setChangesetId(int changesetId);
 
+    /**
+     * Makes the given visitor visit this primitive.
+     * @param visitor visitor
+     */
     void accept(PrimitiveVisitor visitor);
 
+    /**
+     * Replies the name of this primitive. The default implementation replies the value
+     * of the tag <tt>name</tt> or null, if this tag is not present.
+     *
+     * @return the name of this primitive
+     */
     String getName();
 
+    /**
+     * Replies a localized name for this primitive given by the value of the name tags
+     * accessed from very specific (language variant) to more generic (default name).
+     *
+     * @return the name of this primitive, <code>null</code> if no name exists
+     * @see LanguageInfo#getLanguageCodes
+     */
     String getLocalName();
 }
Index: /trunk/src/org/openstreetmap/josm/data/osm/IRelation.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/IRelation.java	(revision 9459)
+++ /trunk/src/org/openstreetmap/josm/data/osm/IRelation.java	(revision 9460)
@@ -2,12 +2,35 @@
 package org.openstreetmap.josm.data.osm;
 
+/**
+ * IRelation captures the common functions of {@link Relation} and {@link RelationData}.
+ * @since 4098
+ */
 public interface IRelation extends IPrimitive {
 
+    /**
+     * Returns the number of members.
+     * @return number of members
+     */
     int getMembersCount();
 
+    /**
+     * Returns id of the member at given index.
+     * @param idx member index
+     * @return id of the member at given index
+     */
     long getMemberId(int idx);
 
+    /**
+     * Returns role of the member at given index.
+     * @param idx member index
+     * @return role of the member at given index
+     */
     String getRole(int idx);
 
+    /**
+     * Returns type of the member at given index.
+     * @param idx member index
+     * @return type of the member at given index
+     */
     OsmPrimitiveType getMemberType(int idx);
 }
Index: /trunk/src/org/openstreetmap/josm/data/osm/IWay.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/IWay.java	(revision 9459)
+++ /trunk/src/org/openstreetmap/josm/data/osm/IWay.java	(revision 9460)
@@ -2,10 +2,28 @@
 package org.openstreetmap.josm.data.osm;
 
+/**
+ * IWay captures the common functions of {@link Way} and {@link WayData}.
+ * @since 4098
+ */
 public interface IWay extends IPrimitive {
 
+    /**
+     * Replies the number of nodes in this way.
+     *
+     * @return the number of nodes in this way.
+     */
     int getNodesCount();
 
+    /**
+     * Returns id of the node at given index.
+     * @param idx node index
+     * @return id of the node at given index
+     */
     long getNodeId(int idx);
 
+    /**
+     * Determines if this way is closed.
+     * @return {@code true} if this way is closed, {@code false} otherwise
+     */
     boolean isClosed();
 }
Index: /trunk/src/org/openstreetmap/josm/data/osm/Relation.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/Relation.java	(revision 9459)
+++ /trunk/src/org/openstreetmap/josm/data/osm/Relation.java	(revision 9460)
@@ -67,7 +67,4 @@
     }
 
-    /**
-     * @return number of members
-     */
     @Override
     public int getMembersCount() {
Index: /trunk/src/org/openstreetmap/josm/data/osm/Way.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/Way.java	(revision 9459)
+++ /trunk/src/org/openstreetmap/josm/data/osm/Way.java	(revision 9460)
@@ -99,10 +99,4 @@
     }
 
-    /**
-     * Replies the number of nodes in this way.
-     *
-     * @return the number of nodes in this way.
-     * @since 1862
-     */
     @Override
     public int getNodesCount() {
