Index: C:/data/jackrabbit/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/PropertyId.java
===================================================================
--- C:/data/jackrabbit/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/PropertyId.java	(revision 591293)
+++ C:/data/jackrabbit/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/PropertyId.java	(working copy)
@@ -24,7 +24,7 @@
  * property using the UUID of the parent node and the qualified name of
  * the property. Once created a property identifier instance is immutable.
  */
-public class PropertyId extends ItemId {
+public class PropertyId implements ItemId {
 
     /** Serial version UID of this class. */
     static final long serialVersionUID = 1118783735407446009L;
Index: C:/data/jackrabbit/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeId.java
===================================================================
--- C:/data/jackrabbit/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeId.java	(revision 591293)
+++ C:/data/jackrabbit/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeId.java	(working copy)
@@ -22,29 +22,23 @@
  * Node identifier. An instance of this class identifies a node using its UUID.
  * Once created a node identifier instance is immutable.
  */
-public class NodeId extends ItemId {
+public class NodeId extends UUID implements ItemId {
 
     /** Serial version UID of this class. */
     static final long serialVersionUID = 7380115476447060008L;
 
-    /** UUID of the identified node */
-    private final UUID uuid;
-
-    /** the precalculated hashcode */
-    private final int hashCode;
-
     /**
      * Creates a node identifier instance for the identified node.
      *
      * @param uuid node UUID
      */
     public NodeId(UUID uuid) {
-        if (uuid == null) {
-            throw new IllegalArgumentException("uuid can not be null");
-        }
-        this.uuid = uuid;
-        this.hashCode = uuid.hashCode();
+        super(uuid.getMostSignificantBits(), uuid.getLeastSignificantBits());
     }
+    
+    private NodeId(String uuid) {
+        super(uuid);
+    }    
 
     /**
      * Returns <code>true</code> as this class represents a node identifier,
@@ -63,7 +57,7 @@
      * @return node UUID
      */
     public UUID getUUID() {
-        return uuid;
+        return this;
     }
 
     /**
@@ -82,7 +76,7 @@
         if (s == null) {
             throw new IllegalArgumentException("invalid NodeId literal");
         }
-        return new NodeId(new UUID(s));
+        return new NodeId(s);
     }
 
     //-------------------------------------------< java.lang.Object overrides >
@@ -94,26 +88,16 @@
             return true;
         }
         if (obj instanceof NodeId) {
-            return uuid.equals(((NodeId) obj).uuid);
+            return super.equals((NodeId) obj);
         }
         return false;
     }
-
+    
     /**
      * {@inheritDoc}
-     *
-     * Returns the same as <code>this.getUUID().toString()</code>
      */
-    public String toString() {
-        return uuid.toString();
-    }
-
-    /**
-     * {@inheritDoc}
-     *
-     * Returns the same as <code>this.getUUID().hashCode()</code>
-     */
     public int hashCode() {
-        return hashCode;
+        return super.hashCode();
     }
+
 }
 
Index: C:/data/jackrabbit/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemId.java
===================================================================
--- C:/data/jackrabbit/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemId.java	(revision 591293)
+++ C:/data/jackrabbit/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemId.java	(working copy)
@@ -16,18 +16,13 @@
  */
 package org.apache.jackrabbit.core;
 
-import java.io.Serializable;
-
 /**
  * <code>ItemId</code> serves as the base class for the concrete classes
  * <code>PropertyId</code> and <code>NodeId</code> who uniquely identify
  * nodes and properties in a workspace.
  */
-public abstract class ItemId implements Serializable {
+public interface ItemId {
 
-    /** Serialization UID of this class. */
-    static final long serialVersionUID = -5138008726453328226L;
-
     /**
      * Returns <code>true</code> if this id denotes a <code>Node</code>.
      *
@@ -36,7 +31,7 @@
      * @see PropertyId
      * @see NodeId
      */
-    public abstract boolean denotesNode();
+    boolean denotesNode();
 
 }
 
