Index: src/edu/ucsb/nceas/metacat/IdentifierManager.java
===================================================================
--- src/edu/ucsb/nceas/metacat/IdentifierManager.java	(revision 9248)
+++ src/edu/ucsb/nceas/metacat/IdentifierManager.java	(revision 9249)
@@ -1682,7 +1682,7 @@
      * @param startTime
      * @param endTime
      * @param objectFormat
-     * @param replicaStatus
+     * @param nodeId
      * @param start
      * @param count
      * @return ObjectList
@@ -1691,7 +1691,7 @@
      * @throws PropertyNotFoundException 
      */
     public ObjectList querySystemMetadata(Date startTime, Date endTime,
-        ObjectFormatIdentifier objectFormatId, boolean replicaStatus,
+        ObjectFormatIdentifier objectFormatId, NodeReference nodeId,
         int start, int count, Identifier identifier, boolean isSID) 
         throws SQLException, PropertyNotFoundException, ServiceException {
         ObjectList ol = new ObjectList();
@@ -1756,7 +1756,7 @@
                 f4 = true;
             }
 
-            if (!replicaStatus) {
+            /*if (!replicaStatus) {
                 String currentNodeId = PropertyService.getInstance().getProperty("dataone.nodeId");
                 if (!f1 && !f2 && !f3 && !f4) {
                     whereClauseSql += " where authoritive_member_node = '" +
@@ -1765,8 +1765,17 @@
                     whereClauseSql += " and authoritive_member_node = '" +
                         currentNodeId.trim() + "'";
                 }
+            }*/
+            
+            if (nodeId != null && nodeId.getValue() != null && !nodeId.getValue().trim().equals("")) {
+                if (!f1 && !f2 && !f3 && !f4) {
+                    whereClauseSql += " where authoritive_member_node = '" +
+                        nodeId.getValue().trim() + "'";
+                } else {
+                    whereClauseSql += " and authoritive_member_node = '" +
+                        nodeId.getValue().trim() + "'";
+                }
             }
-            
            
             
             // connection
Index: src/edu/ucsb/nceas/metacat/dataone/CNodeService.java
===================================================================
--- src/edu/ucsb/nceas/metacat/dataone/CNodeService.java	(revision 9248)
+++ src/edu/ucsb/nceas/metacat/dataone/CNodeService.java	(revision 9249)
@@ -2035,8 +2035,8 @@
       Integer start, Integer count)
       throws InvalidRequest, InvalidToken, NotAuthorized, NotImplemented,
       ServiceFailure {
-      boolean replicaStatus= true;
-      return super.listObjects(session, startTime, endTime, formatid, identifier, replicaStatus, start, count);
+
+      return super.listObjects(session, startTime, endTime, formatid, identifier, nodeId, start, count);
   }
 
   
Index: src/edu/ucsb/nceas/metacat/dataone/D1NodeService.java
===================================================================
--- src/edu/ucsb/nceas/metacat/dataone/D1NodeService.java	(revision 9248)
+++ src/edu/ucsb/nceas/metacat/dataone/D1NodeService.java	(revision 9249)
@@ -1539,7 +1539,7 @@
    * @throws InvalidRequest
    * @throws NotImplemented
    */
-  public ObjectList listObjects(Session session, Date startTime, Date endTime, ObjectFormatIdentifier objectFormatId, Identifier identifier, Boolean replicaStatus, Integer start,
+  public ObjectList listObjects(Session session, Date startTime, Date endTime, ObjectFormatIdentifier objectFormatId, Identifier identifier, NodeReference nodeId, Integer start,
           Integer count) throws NotAuthorized, InvalidRequest, NotImplemented, ServiceFailure, InvalidToken {
 
       ObjectList objectList = null;
@@ -1553,7 +1553,7 @@
           if(identifier != null) {
               isSid = IdentifierManager.getInstance().systemMetadataSIDExists(identifier);
           }
-          objectList = IdentifierManager.getInstance().querySystemMetadata(startTime, endTime, objectFormatId, replicaStatus, start, count, identifier, isSid);
+          objectList = IdentifierManager.getInstance().querySystemMetadata(startTime, endTime, objectFormatId, nodeId, start, count, identifier, isSid);
       } catch (Exception e) {
           throw new ServiceFailure("1580", "Error querying system metadata: " + e.getMessage());
       }
Index: src/edu/ucsb/nceas/metacat/dataone/MNodeService.java
===================================================================
--- src/edu/ucsb/nceas/metacat/dataone/MNodeService.java	(revision 9248)
+++ src/edu/ucsb/nceas/metacat/dataone/MNodeService.java	(revision 9249)
@@ -928,8 +928,18 @@
     @Override
     public ObjectList listObjects(Session session, Date startTime, Date endTime, ObjectFormatIdentifier objectFormatId, Identifier identifier, Boolean replicaStatus, Integer start,
             Integer count) throws NotAuthorized, InvalidRequest, NotImplemented, ServiceFailure, InvalidToken {
-
-        return super.listObjects(session, startTime, endTime, objectFormatId, identifier, replicaStatus, start, count);
+        NodeReference nodeId = null;
+        if(!replicaStatus) {
+            //not include those objects whose authoritative node is not this mn
+            nodeId = new NodeReference();
+            try {
+                String currentNodeId = PropertyService.getInstance().getProperty("dataone.nodeId"); // return only pids for which this mn
+                nodeId.setValue(currentNodeId);
+            } catch(Exception e) {
+                throw new ServiceFailure("1580", e.getMessage());
+            }
+        }
+        return super.listObjects(session, startTime, endTime, objectFormatId, identifier, nodeId, start, count);
     }
 
     /**
Index: src/edu/ucsb/nceas/metacat/dataone/SyncAccessPolicy.java
===================================================================
--- src/edu/ucsb/nceas/metacat/dataone/SyncAccessPolicy.java	(revision 9248)
+++ src/edu/ucsb/nceas/metacat/dataone/SyncAccessPolicy.java	(revision 9249)
@@ -52,6 +52,7 @@
 import org.dataone.service.types.v1.AccessPolicy;
 import org.dataone.service.types.v1.AccessRule;
 import org.dataone.service.types.v1.Identifier;
+import org.dataone.service.types.v1.NodeReference;
 import org.dataone.service.types.v1.ObjectFormatIdentifier;
 import org.dataone.service.types.v1.ObjectInfo;
 import org.dataone.service.types.v1.ObjectList;
@@ -316,8 +317,16 @@
 			Date startTime = null;
 			Date endTime = null;
 			ObjectFormatIdentifier objectFormatId = null;
-			Boolean replicaStatus = false; // return only pids for which this mn
-											// is
+			//Boolean replicaStatus = false; // return only pids for which this mn
+			NodeReference thisMN = new NodeReference();
+			try {
+			    String currentNodeId = PropertyService.getInstance().getProperty("dataone.nodeId"); // return only pids for which this mn
+			    thisMN.setValue(currentNodeId);
+			} catch (Exception e) {
+			    logMetacat.error("SyncAccessPolicy.run - can't get the node id of this member node from the metacat property file since :"+e.getMessage());
+			    return;
+			}
+							// is
 			ObjectList objsToSync = null;
 			Integer count = 0;
 			Integer start = 0;
@@ -350,7 +359,7 @@
 			    
 				objsToSync = IdentifierManager.getInstance()
 						.querySystemMetadata(startTime, endTime,
-								objectFormatId, replicaStatus, start, count, id, isSid);
+								objectFormatId, thisMN, start, count, id, isSid);
 
 				logMetacat.debug("syncTask total # of guids: "
 						+ objsToSync.getTotal() + ", count for this page: "
@@ -383,7 +392,7 @@
 					objsToSync = IdentifierManager
 							.getInstance()
 							.querySystemMetadata(startTime, endTime,
-									objectFormatId, replicaStatus, start, count, id, isSid);
+									objectFormatId, thisMN, start, count, id, isSid);
 				} catch (Exception e) {
 					logMetacat.error("Error syncing ids");
 					syncError = true;
Index: src/edu/ucsb/nceas/metacat/dataone/v1/CNodeService.java
===================================================================
--- src/edu/ucsb/nceas/metacat/dataone/v1/CNodeService.java	(revision 9248)
+++ src/edu/ucsb/nceas/metacat/dataone/v1/CNodeService.java	(revision 9249)
@@ -74,6 +74,7 @@
 
 import edu.ucsb.nceas.metacat.IdentifierManager;
 import edu.ucsb.nceas.metacat.dataone.convert.LogV2toV1Converter;
+import edu.ucsb.nceas.metacat.properties.PropertyService;
 
 /**
  * Represents Metacat's implementation of the DataONE Coordinating Node service
@@ -321,7 +322,18 @@
 			ObjectFormatIdentifier formatid, Boolean replicaStatus, Integer start,
 			Integer count) throws InvalidRequest, InvalidToken, NotAuthorized,
 			NotImplemented, ServiceFailure {
-		return impl.listObjects(null, startTime, endTime, formatid, null, replicaStatus, start, count);
+	    NodeReference nodeId = null;
+        if(!replicaStatus) {
+            //not include those objects whose authoritative node is not this mn
+            nodeId = new NodeReference();
+            try {
+                String currentNodeId = PropertyService.getInstance().getProperty("dataone.nodeId"); // return only pids for which this mn
+                nodeId.setValue(currentNodeId);
+            } catch(Exception e) {
+                throw new ServiceFailure("1580", e.getMessage());
+            }
+        }
+		return impl.listObjects(null, startTime, endTime, formatid, null, nodeId, start, count);
 	}
 
 	@Override
@@ -330,7 +342,18 @@
 			ObjectFormatIdentifier formatid, Boolean replicaStatus, Integer start,
 			Integer count) throws InvalidRequest, InvalidToken, NotAuthorized,
 			NotImplemented, ServiceFailure {
-		return impl.listObjects(session, startTime, endTime, formatid, null, replicaStatus, start, count);
+	    NodeReference nodeId = null;
+        if(!replicaStatus) {
+            //not include those objects whose authoritative node is not this mn
+            nodeId = new NodeReference();
+            try {
+                String currentNodeId = PropertyService.getInstance().getProperty("dataone.nodeId"); // return only pids for which this mn
+                nodeId.setValue(currentNodeId);
+            } catch(Exception e) {
+                throw new ServiceFailure("1580", e.getMessage());
+            }
+        }
+		return impl.listObjects(session, startTime, endTime, formatid, null, nodeId, start, count);
 	}
 
 	@Override
Index: src/edu/ucsb/nceas/metacat/restservice/v2/CNResourceHandler.java
===================================================================
--- src/edu/ucsb/nceas/metacat/restservice/v2/CNResourceHandler.java	(revision 9248)
+++ src/edu/ucsb/nceas/metacat/restservice/v2/CNResourceHandler.java	(revision 9249)
@@ -1279,7 +1279,8 @@
         Date endTime = null;
         ObjectFormatIdentifier formatId = null;
         Identifier identifier = null;
-        boolean replicaStatus = true;
+        //boolean replicaStatus = true;
+        NodeReference nodeId = null;
         int start = 0;
         int count = 1000;
         Enumeration<String> paramlist = request.getParameterNames();
@@ -1315,8 +1316,12 @@
             } else if (name.equals("identifier") && value != null) {
             	identifier = new Identifier();
             	identifier.setValue(value);
-            } else if (name.equals("replicaStatus") && value != null) {
-                replicaStatus = Boolean.parseBoolean(value);
+            /*} else if (name.equals("replicaStatus") && value != null) {
+                replicaStatus = Boolean.parseBoolean(value);*/
+            } else if (name.equals("nodeId") && value != null) {
+                nodeId = new NodeReference();
+                nodeId.setValue(value);
+                logMetacat.debug("the nodeId value is "+nodeId.getValue());
             } else if (name.equals("start") && value != null) {
                 start = Integer.valueOf(value);
             } else if (name.equals("count") && value != null) {
@@ -1326,12 +1331,12 @@
         // make the call
         logMetacat.debug("session: " + session + " fromDate: " + startTime
                 + " toDate: " + endTime + " formatId: " + formatId
-                + " replicaStatus: " + replicaStatus + " start: " + start
+                + " start: " + start
                 + " count: " + count);        
 
         // get the list
         ObjectList ol = CNodeService.getInstance(request).listObjects(session,
-                startTime, endTime, formatId, identifier, replicaStatus, start, count);
+                startTime, endTime, formatId, identifier, nodeId, start, count);
 
         // send it
         OutputStream out = response.getOutputStream();
