Index: src/main/java/org/apache/jackrabbit/jcr2spi/state/WorkspaceItemStateFactory.java
===================================================================
--- src/main/java/org/apache/jackrabbit/jcr2spi/state/WorkspaceItemStateFactory.java	(revision 598755)
+++ src/main/java/org/apache/jackrabbit/jcr2spi/state/WorkspaceItemStateFactory.java	(working copy)
@@ -37,10 +37,7 @@
 import javax.jcr.RepositoryException;
 import javax.jcr.ItemExistsException;
 import javax.jcr.ItemNotFoundException;
-import java.util.HashSet;
-import java.util.Set;
 import java.util.Collections;
-import java.util.Arrays;
 import java.util.Iterator;
 import java.util.List;
 import java.util.ArrayList;
@@ -160,25 +157,24 @@
      * @see ItemStateFactory#getNodeReferences(NodeState)
      * @param nodeState
      */
-    public NodeReferences getNodeReferences(NodeState nodeState) {
+    public PropertyId[] getNodeReferences(NodeState nodeState) {
         NodeEntry entry = nodeState.getNodeEntry();
         // shortcut
-        if (entry.getUniqueID() == null || !entry.hasPropertyEntry(NameConstants.JCR_UUID)) {
+        if (entry.getUniqueID() == null
+                || !entry.hasPropertyEntry(NameConstants.JCR_UUID)) {
             // for sure not referenceable
-            return EmptyNodeReferences.getInstance();
+            return new PropertyId[0];
         }
 
         // nodestate has a unique ID and is potentially mix:referenceable
         // => try to retrieve references
         try {
             NodeInfo nInfo = service.getNodeInfo(sessionInfo, entry.getWorkspaceId());
-            return new NodeReferencesImpl(nInfo.getReferences());
+            return nInfo.getReferences();
         } catch (RepositoryException e) {
-            // ignore
+            log.debug("Unable to determine references to {}", nodeState);
+            return new PropertyId[0];
         }
-        // exception or no matching entry found.
-        log.debug("Unable to determine references for NodeState " + nodeState);
-        return EmptyNodeReferences.getInstance();
     }
 
     //------------------------------------------------------------< private >---
@@ -425,43 +421,4 @@
         return parent;
     }
 
-    //-----------------------------------------------------< NodeReferences >---
-    /**
-     * <code>NodeReferences</code> represents the references (i.e. properties of
-     * type <code>REFERENCE</code>) to a particular node (denoted by its unique ID).
-     */
-    private class NodeReferencesImpl implements NodeReferences {
-
-        private PropertyId[] references;
-
-        /**
-         * Private constructor
-         *
-         * @param references
-         */
-        private NodeReferencesImpl(PropertyId[] references) {
-            this.references = references;
-        }
-
-        //-------------------------------------------------< NodeReferences >---
-        /**
-         * @see NodeReferences#isEmpty()
-         */
-        public boolean isEmpty() {
-            return references.length <= 0;
-        }
-
-        /**
-         * @see NodeReferences#iterator()
-         */
-        public Iterator iterator() {
-            if (references.length > 0) {
-                Set referenceIds = new HashSet();
-                referenceIds.addAll(Arrays.asList(references));
-                return Collections.unmodifiableSet(referenceIds).iterator();
-            } else {
-                return Collections.EMPTY_SET.iterator();
-            }
-        }
-    }
 }
Index: src/main/java/org/apache/jackrabbit/jcr2spi/state/EmptyNodeReferences.java
===================================================================
--- src/main/java/org/apache/jackrabbit/jcr2spi/state/EmptyNodeReferences.java	(revision 598755)
+++ src/main/java/org/apache/jackrabbit/jcr2spi/state/EmptyNodeReferences.java	(working copy)
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.jcr2spi.state;
-
-import java.util.Collections;
-import java.util.Iterator;
-
-/**
- * <code>EmptyNodeReferences</code>...
- */
-class EmptyNodeReferences implements NodeReferences {
-
-    private static NodeReferences INSTANCE;
-
-    private EmptyNodeReferences() {
-
-    }
-
-    static NodeReferences getInstance() {
-        if (INSTANCE == null) {
-            INSTANCE = new EmptyNodeReferences();
-        }
-        return INSTANCE;
-    }
-
-    public boolean isEmpty() {
-        return true;
-    }
-
-    public Iterator iterator() {
-        return Collections.EMPTY_LIST.iterator();
-    }
-}
\ No newline at end of file
Index: src/main/java/org/apache/jackrabbit/jcr2spi/state/NodeState.java
===================================================================
--- src/main/java/org/apache/jackrabbit/jcr2spi/state/NodeState.java	(revision 598755)
+++ src/main/java/org/apache/jackrabbit/jcr2spi/state/NodeState.java	(working copy)
@@ -24,6 +24,7 @@
 import org.apache.jackrabbit.spi.Name;
 import org.apache.jackrabbit.spi.NodeId;
 import org.apache.jackrabbit.spi.ItemId;
+import org.apache.jackrabbit.spi.PropertyId;
 import org.apache.jackrabbit.spi.QNodeDefinition;
 import org.apache.jackrabbit.spi.NodeInfo;
 import org.apache.jackrabbit.name.NameConstants;
@@ -399,12 +400,12 @@
     }
 
     /**
-     * Return the <code>NodeReferences</code> present on this state or
-     * <code>null</code>.
+     * Returns the identifiers of all reference properties that point to
+     * this node.
      *
-     * @return references
+     * @return reference property identifiers
      */
-    public NodeReferences getNodeReferences() {
+    public PropertyId[] getNodeReferences() {
         return isf.getNodeReferences(this);
     }
 
Index: src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemStateFactory.java
===================================================================
--- src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemStateFactory.java	(revision 598755)
+++ src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemStateFactory.java	(working copy)
@@ -109,12 +109,13 @@
     public Iterator getChildNodeInfos(NodeId nodeId) throws ItemNotFoundException, RepositoryException;
 
     /**
-     * Returns the NodeReferences for the given NodeState.
+     * Returns the identifiers of all reference properties that  point to
+     * the given node.
      *
-     * @param nodeState
-     * @return NodeReferences
+     * @param nodeState reference target
+     * @return reference property identifiers
      */
-    public NodeReferences getNodeReferences(NodeState nodeState);
+    public PropertyId[] getNodeReferences(NodeState nodeState);
 
     /**
      * Adds the given <code>ItemStateCreationListener</code>.
Index: src/main/java/org/apache/jackrabbit/jcr2spi/state/NodeReferences.java
===================================================================
--- src/main/java/org/apache/jackrabbit/jcr2spi/state/NodeReferences.java	(revision 598755)
+++ src/main/java/org/apache/jackrabbit/jcr2spi/state/NodeReferences.java	(working copy)
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.jcr2spi.state;
-
-import java.util.Iterator;
-
-/**
- * <code>NodeReferences</code>...
- */
-public interface NodeReferences {
-
-    /**
-     * Returns a flag indicating whether the <code>Node</code> identified by this
-     * <code>NodeReferences</code> object is referenced by any Property.
-     *
-     * @return <code>true</code> if this object will return a non-empty iterator
-     * upon calls to {@link #iterator()}, <code>false</code> otherwise.
-     */
-    public boolean isEmpty();
-
-    /**
-     * @return an iterator over the <code>PropertyId</code>s refering to the
-     * node state identified by this <code>NodeReference</code>.
-     */
-    public Iterator iterator();
-}
Index: src/main/java/org/apache/jackrabbit/jcr2spi/state/TransientISFactory.java
===================================================================
--- src/main/java/org/apache/jackrabbit/jcr2spi/state/TransientISFactory.java	(revision 598755)
+++ src/main/java/org/apache/jackrabbit/jcr2spi/state/TransientISFactory.java	(working copy)
@@ -29,6 +29,7 @@
 
 import javax.jcr.RepositoryException;
 import javax.jcr.ItemNotFoundException;
+
 import java.util.Iterator;
 
 /**
@@ -141,9 +142,9 @@
      * @inheritDoc
      * @see ItemStateFactory#getNodeReferences(NodeState)
      */
-    public NodeReferences getNodeReferences(NodeState nodeState) {
+    public PropertyId[] getNodeReferences(NodeState nodeState) {
         if (nodeState.getStatus() == Status.NEW) {
-            return EmptyNodeReferences.getInstance();
+            return new PropertyId[0];
         }
         return workspaceStateFactory.getNodeReferences(nodeState);
     }
Index: src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java
===================================================================
--- src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java	(revision 599171)
+++ src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java	(working copy)
@@ -26,7 +26,6 @@
 import org.apache.jackrabbit.spi.Path;
 import org.apache.jackrabbit.jcr2spi.state.NodeState;
 import org.apache.jackrabbit.jcr2spi.state.ItemStateValidator;
-import org.apache.jackrabbit.jcr2spi.state.NodeReferences;
 import org.apache.jackrabbit.jcr2spi.state.Status;
 import org.apache.jackrabbit.jcr2spi.nodetype.NodeTypeManagerImpl;
 import org.apache.jackrabbit.jcr2spi.nodetype.EffectiveNodeType;
@@ -536,13 +535,8 @@
      */
     public PropertyIterator getReferences() throws RepositoryException {
         checkStatus();
-        NodeReferences refs = getNodeState().getNodeReferences();
-        if (refs.isEmpty()) {
-            // there are no references, return empty iterator
-            return PropertyIteratorAdapter.EMPTY;
-        } else {
-            return new LazyItemIterator(itemMgr, session.getHierarchyManager(), refs.iterator());
-        }
+        List refs = Arrays.asList(getNodeState().getNodeReferences());
+        return new LazyItemIterator(itemMgr, session.getHierarchyManager(), refs.iterator());
     }
 
     /**
