Index: src/edu/ucsb/nceas/metacat/DocumentImpl.java
===================================================================
--- src/edu/ucsb/nceas/metacat/DocumentImpl.java	(revision 6000)
+++ src/edu/ucsb/nceas/metacat/DocumentImpl.java	(revision 6001)
@@ -56,6 +56,7 @@
 
 import edu.ucsb.nceas.metacat.accesscontrol.AccessControlInterface;
 import edu.ucsb.nceas.metacat.accesscontrol.AccessControlList;
+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.database.DatabaseService;
@@ -3169,8 +3170,10 @@
      * @param docid
      *            the ID of the document to be deleted from the database
      */
-    public static void delete(String accnum, String user, String[] groups, String notifyServer)
-            throws Exception
+    public static void delete(String accnum, String user, 
+      String[] groups, String notifyServer)
+      throws SQLException, InsufficientKarmaException, McdbDocNotFoundException,
+      Exception
     {
 
         DBConnection conn = null;
@@ -3199,9 +3202,9 @@
                 rs.close();
                 pstmt.close();
                 conn.increaseUsageCount(1);
-                throw new Exception("Docid " + accnum + " does not exist. "
-                                    + "Please check that you have also specified the"
-                                    + " revision number of the document.");
+                throw new McdbDocNotFoundException("Docid " + accnum  + 
+                  " does not exist. Please check that you have also " +
+                  "specified the revision number of the document.");
             }
             rs.close();
             pstmt.close();
@@ -3214,15 +3217,16 @@
               isXML = false;
             }
 
-            logMetacat.info("DocumentImpl.delete - Start deleting doc " + docid + "...");
+            logMetacat.info("DocumentImpl.delete - Start deleting doc " + 
+              docid + "...");
             double start = System.currentTimeMillis()/1000;
             // check for 'write' permission for 'user' to delete this document
             if (!hasAllPermission(user, groups, accnum)) {
                 if(!AuthUtil.isAdministrator(user, groups)){
-                    throw new Exception(
-                        "User " + user
-                        + " does not have permission to delete XML Document #"
-                        + accnum);
+                    throw new InsufficientKarmaException(
+                        "User " + user + 
+                        " does not have permission to delete XML Document #" + 
+                        accnum);
                 }
             }
 
@@ -3370,7 +3374,11 @@
            double end = System.currentTimeMillis()/1000;
            logMetacat.info("DocumentImpl.delete - total delete time is:  " + (end - start));
 
-        } catch (Exception e) {
+        } catch ( SQLException sqle ) {
+          logMetacat.error("DocumentImpl.delete - SQL error: " + sqle.getMessage());
+          throw sqle;
+          
+        } catch ( Exception e ) {
             logMetacat.error("DocumentImpl.delete - General error: " + e.getMessage());
             throw e;
         } finally {
Index: src/edu/ucsb/nceas/metacat/dataone/CrudService.java
===================================================================
--- src/edu/ucsb/nceas/metacat/dataone/CrudService.java	(revision 6000)
+++ src/edu/ucsb/nceas/metacat/dataone/CrudService.java	(revision 6001)
@@ -968,11 +968,22 @@
         {
             DocumentImpl.delete(docid, sessionData.getUserName(), sessionData.getGroupNames(), null);
         }
-        catch(Exception e)
+        catch(SQLException e)
         {
             throw new ServiceFailure("1350", "Could not delete document: " + e.getMessage());
         }
-        
+        catch(McdbDocNotFoundException e)
+        {
+          throw new ServiceFailure("1350", "Could not delete document: " + e.getMessage());
+        }
+        catch(InsufficientKarmaException e)
+        {
+          throw new ServiceFailure("1350", "Could not delete document: " + e.getMessage());
+        }
+        catch(Exception e)
+        {
+          throw new ServiceFailure("1350", "Could not delete document: " + e.getMessage());
+        }
         return guid;
     }
 
Index: src/edu/ucsb/nceas/metacat/replication/ReplicationHandler.java
===================================================================
--- src/edu/ucsb/nceas/metacat/replication/ReplicationHandler.java	(revision 6000)
+++ src/edu/ucsb/nceas/metacat/replication/ReplicationHandler.java	(revision 6001)
@@ -32,8 +32,10 @@
 import edu.ucsb.nceas.metacat.DocumentImpl;
 import edu.ucsb.nceas.metacat.DocumentImplWrapper;
 import edu.ucsb.nceas.metacat.EventLog;
+import edu.ucsb.nceas.metacat.McdbDocNotFoundException;
 import edu.ucsb.nceas.metacat.accesscontrol.AccessControlForSingleFile;
 import edu.ucsb.nceas.metacat.accesscontrol.XMLAccessDAO;
+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.database.DatabaseService;
@@ -695,6 +697,30 @@
       }
 
     }//try
+    catch(McdbDocNotFoundException e)
+    {
+      logMetacat.error("ReplicationHandler.handleDeleteSingleDocument - " + ReplicationService.METACAT_REPL_ERROR_MSG); 
+      logReplication.error("ReplicationHandler.handleDeleteSingleDocument - Failed to delete doc " + docId +
+                                 " in db because because " + e.getMessage());
+      throw new HandlerException("ReplicationHandler.handleDeleteSingleDocument - generic exception " 
+    		  + "when handling document: " + e.getMessage());
+    }
+    catch(InsufficientKarmaException e)
+    {
+      logMetacat.error("ReplicationHandler.handleDeleteSingleDocument - " + ReplicationService.METACAT_REPL_ERROR_MSG); 
+      logReplication.error("ReplicationHandler.handleDeleteSingleDocument - Failed to delete doc " + docId +
+                                 " in db because because " + e.getMessage());
+      throw new HandlerException("ReplicationHandler.handleDeleteSingleDocument - generic exception " 
+    		  + "when handling document: " + e.getMessage());
+    }
+    catch(SQLException e)
+    {
+      logMetacat.error("ReplicationHandler.handleDeleteSingleDocument - " + ReplicationService.METACAT_REPL_ERROR_MSG); 
+      logReplication.error("ReplicationHandler.handleDeleteSingleDocument - Failed to delete doc " + docId +
+                                 " in db because because " + e.getMessage());
+      throw new HandlerException("ReplicationHandler.handleDeleteSingleDocument - generic exception " 
+    		  + "when handling document: " + e.getMessage());
+    }
     catch(Exception e)
     {
       logMetacat.error("ReplicationHandler.handleDeleteSingleDocument - " + ReplicationService.METACAT_REPL_ERROR_MSG); 
Index: src/edu/ucsb/nceas/metacat/replication/ReplicationService.java
===================================================================
--- src/edu/ucsb/nceas/metacat/replication/ReplicationService.java	(revision 6000)
+++ src/edu/ucsb/nceas/metacat/replication/ReplicationService.java	(revision 6001)
@@ -69,6 +69,7 @@
 import edu.ucsb.nceas.metacat.accesscontrol.AccessControlForSingleFile;
 import edu.ucsb.nceas.metacat.accesscontrol.PermOrderException;
 import edu.ucsb.nceas.metacat.accesscontrol.XMLAccessDAO;
+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.database.DatabaseService;
@@ -752,6 +753,21 @@
 			EventLog.getInstance().log(request.getRemoteAddr(), REPLICATIONUSER, docid,
 					"delete");
 			logReplication.info("ReplicationService.handleForceReplicateDeleteRequest - document " + docid + " was successfully deleted ");
+		} catch (McdbDocNotFoundException e) {
+			logMetacat.error("ReplicationService.handleForceReplicateDeleteRequest - " + ReplicationService.METACAT_REPL_ERROR_MSG);                         
+			logReplication.error("document " + docid
+					+ " failed to delete because " + e.getMessage());
+			logReplication.error("ReplicationService.handleForceReplicateDeleteRequest - error: " + e.getMessage());
+		} catch (InsufficientKarmaException e) {
+			logMetacat.error("ReplicationService.handleForceReplicateDeleteRequest - " + ReplicationService.METACAT_REPL_ERROR_MSG);                         
+			logReplication.error("document " + docid
+					+ " failed to delete because " + e.getMessage());
+			logReplication.error("ReplicationService.handleForceReplicateDeleteRequest - error: " + e.getMessage());
+		} catch (SQLException e) {
+			logMetacat.error("ReplicationService.handleForceReplicateDeleteRequest - " + ReplicationService.METACAT_REPL_ERROR_MSG);                         
+			logReplication.error("document " + docid
+					+ " failed to delete because " + e.getMessage());
+			logReplication.error("ReplicationService.handleForceReplicateDeleteRequest - error: " + e.getMessage());
 		} catch (Exception e) {
 			logMetacat.error("ReplicationService.handleForceReplicateDeleteRequest - " + ReplicationService.METACAT_REPL_ERROR_MSG);                         
 			logReplication.error("document " + docid
