Index: src/edu/ucsb/nceas/metacat/dataone/MNodeService.java
===================================================================
--- src/edu/ucsb/nceas/metacat/dataone/MNodeService.java	(revision 9049)
+++ src/edu/ucsb/nceas/metacat/dataone/MNodeService.java	(revision 9050)
@@ -242,6 +242,12 @@
         boolean allowed = false;
         allowed = isAdminAuthorized(session);
         
+        String serviceFailureCode = "2902";
+        Identifier sid = getPIDForSID(pid, serviceFailureCode);
+        if(sid != null) {
+            pid = sid;
+        }
+        
         //check if it is the authoritative member node
         if(!allowed) {
             allowed = isAuthoritativeMNodeAdmin(session, pid);
Index: src/edu/ucsb/nceas/metacat/dataone/v1/MNodeService.java
===================================================================
--- src/edu/ucsb/nceas/metacat/dataone/v1/MNodeService.java	(revision 9049)
+++ src/edu/ucsb/nceas/metacat/dataone/v1/MNodeService.java	(revision 9050)
@@ -130,6 +130,10 @@
 	@Override
 	public Identifier archive(Identifier pid) throws InvalidToken,
 			ServiceFailure, NotAuthorized, NotFound, NotImplemented {
+	    String serviceFailure = "2912";
+        String notFound = "2911";
+        impl.checkV1SystemMetaPidExist(pid, serviceFailure, "The object specified by "+pid.getValue()+" couldn't be identified if it exists",  notFound, 
+                "The object specified by "+pid.getValue()+" does not exist at this node.");
 		return impl.archive(null, pid);
 	}
 
@@ -138,6 +142,10 @@
 	public Identifier archive(Session session, Identifier pid)
 			throws InvalidToken, ServiceFailure, NotAuthorized, NotFound,
 			NotImplemented {
+	    String serviceFailure = "2912";
+        String notFound = "2911";
+        impl.checkV1SystemMetaPidExist(pid, serviceFailure, "The object specified by "+pid.getValue()+" couldn't be identified if it exists",  notFound, 
+                "The object specified by "+pid.getValue()+" does not exist at this node.");
 		return impl.archive(session, pid);
 	}
 
@@ -174,6 +182,10 @@
 	@Override
 	public Identifier delete(Identifier pid) throws InvalidToken,
 			ServiceFailure, NotAuthorized, NotFound, NotImplemented {
+	    String serviceFailure = "2902";
+        String notFound = "2901";
+        impl.checkV1SystemMetaPidExist(pid, serviceFailure, "The object specified by "+pid.getValue()+" couldn't be identified if it exists",  notFound, 
+                "The object specified by "+pid.getValue()+" does not exist at this node.");
 		return impl.delete(null, pid);
 	}
 
@@ -182,6 +194,10 @@
 	public Identifier delete(Session session, Identifier pid)
 			throws InvalidToken, ServiceFailure, NotAuthorized, NotFound,
 			NotImplemented {
+	    String serviceFailure = "2902";
+        String notFound = "2901";
+        impl.checkV1SystemMetaPidExist(pid, serviceFailure, "The object specified by "+pid.getValue()+" couldn't be identified if it exists",  notFound, 
+                "The object specified by "+pid.getValue()+" does not exist at this node.");
 		return impl.delete(session, pid);
 	}
 
Index: src/edu/ucsb/nceas/metacat/dataone/v1/CNodeService.java
===================================================================
--- src/edu/ucsb/nceas/metacat/dataone/v1/CNodeService.java	(revision 9049)
+++ src/edu/ucsb/nceas/metacat/dataone/v1/CNodeService.java	(revision 9050)
@@ -339,6 +339,10 @@
 	@Override
 	public Identifier archive(Identifier pid) throws InvalidToken,
 			ServiceFailure, NotAuthorized, NotFound, NotImplemented {
+	    String serviceFailure = "4972";
+        String notFound = "4971";
+        impl.checkV1SystemMetaPidExist(pid, serviceFailure, "The object specified by "+pid.getValue()+" couldn't be identified if it exists",  notFound, 
+                "The object specified by "+pid.getValue()+" does not exist at this node.");
 		return impl.archive(null, pid);
 	}
 
@@ -347,6 +351,10 @@
 	public Identifier archive(Session session, Identifier pid)
 			throws InvalidToken, ServiceFailure, InvalidRequest, NotAuthorized,
 			NotFound, NotImplemented {
+	    String serviceFailure = "4972";
+        String notFound = "4971";
+        impl.checkV1SystemMetaPidExist(pid, serviceFailure, "The object specified by "+pid.getValue()+" couldn't be identified if it exists",  notFound, 
+                "The object specified by "+pid.getValue()+" does not exist at this node.");
 		return impl.archive(session, pid);
 	}
 
@@ -384,6 +392,10 @@
 	@Override
 	public Identifier delete(Identifier pid) throws InvalidToken,
 			ServiceFailure, NotAuthorized, NotFound, NotImplemented {
+	    String serviceFailure = "4962";
+        String notFound = "4961";
+        impl.checkV1SystemMetaPidExist(pid, serviceFailure, "The object specified by "+pid.getValue()+" couldn't be identified if it exists",  notFound, 
+                "The object specified by "+pid.getValue()+" does not exist at this node.");
 		return impl.delete(null, pid);
 	}
 
@@ -392,6 +404,10 @@
 	public Identifier delete(Session session, Identifier pid)
 			throws InvalidToken, ServiceFailure, InvalidRequest, NotAuthorized,
 			NotFound, NotImplemented {
+	    String serviceFailure = "4962";
+        String notFound = "4961";
+        impl.checkV1SystemMetaPidExist(pid, serviceFailure, "The object specified by "+pid.getValue()+" couldn't be identified if it exists",  notFound, 
+                "The object specified by "+pid.getValue()+" does not exist at this node.");
 		return impl.delete(session, pid);
 	}
 
Index: src/edu/ucsb/nceas/metacat/dataone/CNodeService.java
===================================================================
--- src/edu/ucsb/nceas/metacat/dataone/CNodeService.java	(revision 9049)
+++ src/edu/ucsb/nceas/metacat/dataone/CNodeService.java	(revision 9050)
@@ -362,6 +362,12 @@
           throw new ServiceFailure("4960", "The provided identifier was invalid.");
           
       }
+      
+      String serviceFailureCode = "4962";
+      Identifier sid = getPIDForSID(pid, serviceFailureCode);
+      if(sid != null) {
+          pid = sid;
+      }
 
 	  // check that it is CN/admin
 	  boolean allowed = isAdminAuthorized(session);
@@ -524,6 +530,12 @@
 	  // check that it is CN/admin
 	  boolean allowed = isAdminAuthorized(session);
 	  
+	  String serviceFailureCode = "4972";
+	  Identifier sid = getPIDForSID(pid, serviceFailureCode);
+	  if(sid != null) {
+	        pid = sid;
+	  }
+	  
 	  //check if it is the authoritative member node
 	  if(!allowed) {
 	      allowed = isAuthoritativeMNodeAdmin(session, pid);
Index: src/edu/ucsb/nceas/metacat/dataone/D1NodeService.java
===================================================================
--- src/edu/ucsb/nceas/metacat/dataone/D1NodeService.java	(revision 9049)
+++ src/edu/ucsb/nceas/metacat/dataone/D1NodeService.java	(revision 9050)
@@ -205,7 +205,7 @@
    */
   public Identifier delete(Session session, Identifier pid) 
       throws InvalidToken, ServiceFailure, NotAuthorized, NotFound, NotImplemented {
-
+      
       String localId = null;
       if (session == null) {
       	throw new InvalidToken("1330", "No session has been provided");
@@ -1651,6 +1651,12 @@
       if (pid == null || pid.getValue().trim().equals("")) {
           throw new ServiceFailure("1350", "The provided identifier was invalid.");
       }
+      
+      String serviceFailureCode = "1350";
+      Identifier sid = getPIDForSID(pid, serviceFailureCode);
+      if(sid != null) {
+          pid = sid;
+      }
 
       // check for the existing identifier
       try {
