Index: src/edu/ucsb/nceas/metacat/dataone/MNodeService.java
===================================================================
--- src/edu/ucsb/nceas/metacat/dataone/MNodeService.java	(revision 6647)
+++ src/edu/ucsb/nceas/metacat/dataone/MNodeService.java	(revision 6648)
@@ -98,6 +98,7 @@
 import edu.ucsb.nceas.metacat.client.InsufficientKarmaException;
 import edu.ucsb.nceas.metacat.database.DBConnection;
 import edu.ucsb.nceas.metacat.database.DBConnectionPool;
+import edu.ucsb.nceas.metacat.dataone.hazelcast.HazelcastService;
 import edu.ucsb.nceas.metacat.properties.PropertyService;
 import edu.ucsb.nceas.metacat.util.SystemUtil;
 import edu.ucsb.nceas.utilities.PropertyNotFoundException;
@@ -216,6 +217,9 @@
                 DocumentImpl.delete(localId, username, groupnames, null);
                 EventLog.getInstance().log(request.getRemoteAddr(), request.getHeader("User-Agent"), username, localId, Event.DELETE.xmlValue());
 
+                // remove the system metadata for it
+                HazelcastService.getInstance().getSystemMetadataMap().remove(pid);
+                
             } catch (McdbDocNotFoundException e) {
                 throw new NotFound("1340", "The provided identifier was invalid.");
 
Index: src/edu/ucsb/nceas/metacat/dataone/hazelcast/HazelcastService.java
===================================================================
--- src/edu/ucsb/nceas/metacat/dataone/hazelcast/HazelcastService.java	(revision 6647)
+++ src/edu/ucsb/nceas/metacat/dataone/hazelcast/HazelcastService.java	(revision 6648)
@@ -318,7 +318,8 @@
 	 */
 	@Override
 	public void entryRemoved(EntryEvent<Identifier, SystemMetadata> event) {
-	  // we don't remove objects
+		// we typically don't remove objects in Metacat, but can remove System Metadata
+		IdentifierManager.getInstance().deleteSystemMetadata(event.getValue().getIdentifier().getValue());
 	  
 	}
 	
Index: src/edu/ucsb/nceas/metacat/IdentifierManager.java
===================================================================
--- src/edu/ucsb/nceas/metacat/IdentifierManager.java	(revision 6647)
+++ src/edu/ucsb/nceas/metacat/IdentifierManager.java	(revision 6648)
@@ -1713,28 +1713,57 @@
         }
     }
     
-    private void deleteSystemMetadata(String guid)
+    public void deleteSystemMetadata(String guid)
     {        
         
         int serialNumber = -1;
         DBConnection dbConn = null;
+        String query = null;
+        PreparedStatement stmt = null;
+        int rows = 0;
         try {
 
             // Get a database connection from the pool
-            dbConn = DBConnectionPool.getDBConnection("IdentifierManager.insertSystemMetadata");
+            dbConn = DBConnectionPool.getDBConnection("IdentifierManager.deleteSystemMetadata");
             serialNumber = dbConn.getCheckOutSerialNumber();
 
-            // Execute the statement
-            String query = "delete from " + TYPE_SYSTEM_METADATA + " where guid = ? ";
-            PreparedStatement stmt = dbConn.prepareStatement(query);
+            // remove main system metadata entry
+            query = "delete from " + TYPE_SYSTEM_METADATA + " where guid = ? ";
+            stmt = dbConn.prepareStatement(query);
             stmt.setString(1, guid);
             logMetacat.debug("delete system metadata: " + stmt.toString());
-            int rows = stmt.executeUpdate();
-
+            rows = stmt.executeUpdate();
             stmt.close();
+            
+            // remove the systemMetadataReplicationPolicy
+            query = "delete from systemMetadataReplicationPolicy " + 
+            "where guid = ?";
+            stmt = dbConn.prepareStatement(query);
+            stmt.setString(1, guid);
+            logMetacat.debug("delete systemMetadataReplicationPolicy: " + stmt.toString());
+            rows = stmt.executeUpdate();
+            stmt.close();
+            
+            // remove the systemMetadataReplicationStatus
+            query = "delete from systemMetadataReplicationStatus " + 
+            "where guid = ?";
+            stmt = dbConn.prepareStatement(query);
+            stmt.setString(1, guid);
+            logMetacat.debug("delete systemMetadataReplicationStatus: " + stmt.toString());
+            rows = stmt.executeUpdate();
+            stmt.close();
+            
+            // TODO: remove the xml_access?
+            // Metacat keeps "deleted" documents so we should not remove access rules.
+            
         } catch (Exception e) {
             e.printStackTrace();
             logMetacat.error("Error while deleting " + TYPE_SYSTEM_METADATA + " record: " + guid, e );
+            try {
+				dbConn.rollback();
+			} catch (SQLException sqle) {
+	            logMetacat.error("Error while rolling back delete for record: " + guid, sqle );
+			}
         } finally {
             // Return database connection to the pool
             DBConnectionPool.returnDBConnection(dbConn, serialNumber);
