diff --git a/src/main/java/com/gitblit/auth/AuthenticationProvider.java b/src/main/java/com/gitblit/auth/AuthenticationProvider.java
index 6205fd7..f6511ba 100644
--- a/src/main/java/com/gitblit/auth/AuthenticationProvider.java
+++ b/src/main/java/com/gitblit/auth/AuthenticationProvider.java
@@ -15,13 +15,8 @@
  */
 package com.gitblit.auth;
 
-import java.io.ByteArrayOutputStream;
 import java.io.File;
-import java.io.IOException;
-import java.io.ObjectOutputStream;
 import java.math.BigInteger;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -33,6 +28,7 @@
 import com.gitblit.models.TeamModel;
 import com.gitblit.models.UserModel;
 import com.gitblit.utils.ArrayUtils;
+import com.gitblit.utils.DeepCopier;
 import com.gitblit.utils.StringUtils;
 
 public abstract class AuthenticationProvider {
@@ -83,69 +79,35 @@
 		}
 	}
 
-	/**
-	 * Utility method to calculate the checksum of an object.
-	 * @param sourceObject The object from which to establish the checksum.
-	 * @return The checksum
-	 * @throws IOException
-	 * @throws NoSuchAlgorithmException
-	 */
-	private BigInteger checksum(Object sourceObject) throws IOException, NoSuchAlgorithmException {
-
-	    if (sourceObject == null) {
-	      return BigInteger.ZERO;   
-	    }
-
-	    ByteArrayOutputStream baos = new ByteArrayOutputStream();
-	    ObjectOutputStream oos = new ObjectOutputStream(baos);
-	    oos.writeObject(sourceObject);
-	    oos.close();
-
-	    MessageDigest m = MessageDigest.getInstance("SHA1");
-	    m.update(baos.toByteArray());
-
-	    return new BigInteger(1, m.digest());
-	}
-	
 	protected void updateUser(UserModel userModel) {
 		final UserModel userLocalDB = userManager.getUserModel(userModel.getName());
-		try {
-			// Establish the checksum of the current version of the user
-			final BigInteger userCurrentCheck = checksum(userModel);
-			// Establish the checksum of the stored version of the user
-			final BigInteger userLocalDBcheck = checksum(userLocalDB);
-			// Compare the checksums
-			if (!userCurrentCheck.equals(userLocalDBcheck))
-			{
-				// If mismatch, save the new instance.
-				userManager.updateUserModel(userModel);
-			}
-		} catch (NoSuchAlgorithmException | IOException e) {
-			// Trace any potential error.
-			if (logger.isErrorEnabled()) {
-				logger.error(e.getMessage());
-			}
+
+		// Establish the checksum of the current version of the user
+		final BigInteger userCurrentCheck = DeepCopier.checksum(userModel);
+
+		// Establish the checksum of the stored version of the user
+		final BigInteger userLocalDBcheck = DeepCopier.checksum(userLocalDB);
+
+		// Compare the checksums
+		if (!userCurrentCheck.equals(userLocalDBcheck)) {
+			// If mismatch, save the new instance.
+			userManager.updateUserModel(userModel);
 		}
 	}
 
 	protected void updateTeam(TeamModel teamModel) {
 		final TeamModel teamLocalDB = userManager.getTeamModel(teamModel.name);
-		try {
-			// Establish the checksum of the current version of the team
-			final BigInteger teamCurrentCheck = checksum(teamModel);
-			// Establish the checksum of the stored version of the team
-			final BigInteger teamLocalDBcheck = checksum(teamLocalDB);
-			// Compare the checksums
-			if (!teamCurrentCheck.equals(teamLocalDBcheck))
-			{
-				// If mismatch, save the new instance.
-				userManager.updateTeamModel(teamModel);
-			}
-		} catch (NoSuchAlgorithmException | IOException e) {
-			// Trace any potential error.
-			if (logger.isErrorEnabled()) {
-				logger.error(e.getMessage());
-			}
+
+		// Establish the checksum of the current version of the team
+		final BigInteger teamCurrentCheck = DeepCopier.checksum(teamModel);
+
+		// Establish the checksum of the stored version of the team
+		final BigInteger teamLocalDBcheck = DeepCopier.checksum(teamLocalDB);
+
+		// Compare the checksums
+		if (!teamCurrentCheck.equals(teamLocalDBcheck)) {
+			// If mismatch, save the new instance.
+			userManager.updateTeamModel(teamModel);
 		}
 	}
 
diff --git a/src/main/java/com/gitblit/utils/DeepCopier.java b/src/main/java/com/gitblit/utils/DeepCopier.java
index 5d89606..fc76f1a 100644
--- a/src/main/java/com/gitblit/utils/DeepCopier.java
+++ b/src/main/java/com/gitblit/utils/DeepCopier.java
@@ -23,10 +23,43 @@
 import java.io.ObjectOutputStream;
 import java.io.PipedInputStream;
 import java.io.PipedOutputStream;
+import java.math.BigInteger;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
 
 public class DeepCopier {
 
 	/**
+	 * Utility method to calculate the checksum of an object.
+	 * @param sourceObject The object from which to establish the checksum.
+	 * @return The checksum
+	 * @throws IOException
+	 */
+	public static BigInteger checksum(Object sourceObject) {
+
+	    if (sourceObject == null) {
+	      return BigInteger.ZERO;
+	    }
+
+	    try {
+		    ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		    ObjectOutputStream oos = new ObjectOutputStream(baos);
+		    oos.writeObject(sourceObject);
+		    oos.close();
+
+	    	MessageDigest m = MessageDigest.getInstance("SHA-1");
+	    	m.update(baos.toByteArray());
+	    	return new BigInteger(1, m.digest());
+	    } catch (IOException e) {
+	    	throw new RuntimeException(e);
+	    } catch (NoSuchAlgorithmException e) {
+	    	// impossible
+	    }
+
+	    return BigInteger.ZERO;
+	}
+
+	/**
 	 * Produce a deep copy of the given object. Serializes the entire object to
 	 * a byte array in memory. Recommended for relatively small objects.
 	 */
