diff --git a/projects/cadcUtil/doc/uml/UserAuth.png b/projects/cadcUtil/doc/uml/UserAuth.png
index 053d993747f04b238aa68e67445000713fca7e23..c36dfcc1fe9c2513edec0e715a4318b130ea89a2 100644
Binary files a/projects/cadcUtil/doc/uml/UserAuth.png and b/projects/cadcUtil/doc/uml/UserAuth.png differ
diff --git a/projects/cadcUtil/src/ca/nrc/cadc/auth/model/Group.java b/projects/cadcUtil/src/ca/nrc/cadc/auth/model/Group.java
index 41e2b98d1706e66387baab863ceecf23b0a23c31..30c155ceac2bcab7655029f42a0e9d4d013f308f 100644
--- a/projects/cadcUtil/src/ca/nrc/cadc/auth/model/Group.java
+++ b/projects/cadcUtil/src/ca/nrc/cadc/auth/model/Group.java
@@ -170,88 +170,11 @@ public class Group
             return false;
         }
         Group other = (Group) obj;
-        if (description == null)
-        {
-            if (other.description != null)
-            {
-                return false;
-            }
-        }
-        else if (!description.equals(other.description))
-        {
-            return false;
-        }
-        if (groupRead == null)
-        {
-            if (other.groupRead != null)
-            {
-                return false;
-            }
-        }
-        else if (!groupRead.equals(other.groupRead))
-        {
-            return false;
-        }
-        if (groupWrite == null)
-        {
-            if (other.groupWrite != null)
-            {
-                return false;
-            }
-        }
-        else if (!groupWrite.equals(other.groupWrite))
-        {
-            return false;
-        }
-        if (groupID == null)
-        {
-            if (other.groupID != null)
-            {
-                return false;
-            }
-        }
-        else if (!groupID.equals(other.groupID))
-        {
-            return false;
-        }
-        if (groupMembers == null)
-        {
-            if (other.groupMembers != null)
-            {
-                return false;
-            }
-        }
-        else if (!groupMembers.equals(other.groupMembers))
-        {
-            return false;
-        }
-        if (!owner.equals(other.owner))
-        {
-            return false;
-        }
-        if (properties == null)
-        {
-            if (other.properties != null)
-            {
-                return false;
-            }
-        }
-        else if (!properties.equals(other.properties))
-        {
-            return false;
-        }
-        if (userMembers == null)
-        {
-            if (other.userMembers != null)
-            {
-                return false;
-            }
-        }
-        else if (!userMembers.equals(other.userMembers))
+        if (!groupID.equals(other.groupID))
         {
             return false;
         }
-        return (publicRead == other.publicRead);
+        return true;
     }
     
     @Override
diff --git a/projects/cadcUtil/src/ca/nrc/cadc/auth/model/PosixDetails.java b/projects/cadcUtil/src/ca/nrc/cadc/auth/model/PosixDetails.java
index dd8ea444040d0ca5f02939ee87f40c032bc5c18d..ba6cf69f504e5a914a79b4835278d326657bc0f8 100644
--- a/projects/cadcUtil/src/ca/nrc/cadc/auth/model/PosixDetails.java
+++ b/projects/cadcUtil/src/ca/nrc/cadc/auth/model/PosixDetails.java
@@ -139,21 +139,6 @@ public class PosixDetails
         {
             return false;
         }
-        if (loginShell == null)
-        {
-            if (other.loginShell != null)
-            {
-                return false;
-            }
-        }
-        else if (!loginShell.equals(other.loginShell))
-        {
-            return false;
-        }
-        if (uid != other.uid)
-        {
-            return false;
-        }
         return true;
     }
 
diff --git a/projects/cadcUtil/src/ca/nrc/cadc/auth/model/User.java b/projects/cadcUtil/src/ca/nrc/cadc/auth/model/User.java
index f455ad983e0eeddebd973bce98dd0e76859d1094..74ab9ad64f170ed2a1de9333fbf9da82afb13f19 100644
--- a/projects/cadcUtil/src/ca/nrc/cadc/auth/model/User.java
+++ b/projects/cadcUtil/src/ca/nrc/cadc/auth/model/User.java
@@ -108,30 +108,7 @@ public class User<T extends Principal>
         {
             return false;
         }
-        if (userDetails == null)
-        {
-            if (other.userDetails != null)
-            {
-                return false;
-            }
-        }
-        else if (!userDetails.equals(other.userDetails))
-        {
-            return false;
-        }
-        if (posixDetails == null)
-        {
-            if (other.posixDetails != null)
-            {
-                return false;
-            }
-        }
-        else if (!posixDetails.equals(other.posixDetails))
-        {
-            return false;
-        }
-        return this.getPrincipals().equals(other.getPrincipals());
-
+        return true;
     }
     
     @Override
diff --git a/projects/cadcUtil/test/src/ca/nrc/cadc/auth/model/GroupTest.java b/projects/cadcUtil/test/src/ca/nrc/cadc/auth/model/GroupTest.java
index 2fb6f9cea6101e31b6de7d5ac60dd478a2ca2754..85c45dcbd9c25e8757a507b4ebb2049baf615bb2 100644
--- a/projects/cadcUtil/test/src/ca/nrc/cadc/auth/model/GroupTest.java
+++ b/projects/cadcUtil/test/src/ca/nrc/cadc/auth/model/GroupTest.java
@@ -64,53 +64,33 @@ public class GroupTest
         
         group2 = new Group("TestGroup", owner);
         assertEquals(group1.hashCode(), group2.hashCode());
-        assertFalse(group1.equals(group2));
+        assertEquals(group1,group2);
         
         group2.getUserMembers().add(user);
         assertEquals(group1.hashCode(), group2.hashCode());
-        assertEquals(group1, group2);
+        assertEquals(group1,group2);
         
         group1.getGroupMembers().add(group2);
         assertEquals(group1.hashCode(), group2.hashCode());
-        assertFalse(group1.equals(group2));
-        
-        group2.getGroupMembers().add(group2);
-        assertEquals(group1.hashCode(), group2.hashCode());
-        assertEquals(group1, group2);
+        assertEquals(group1,group2);
         
         group1.description = "Test group";
         assertEquals(group1.hashCode(), group2.hashCode());
-        assertFalse(group1.equals(group2));
-        
-        group2.description = "Test group";
-        assertEquals(group1.hashCode(), group2.hashCode());
-        assertEquals(group1, group2);
+        assertEquals(group1,group2);
         
         // group read and write equality tests     
         group1.groupRead = group2;
         assertEquals(group1.hashCode(), group2.hashCode());
-        assertFalse(group1.equals(group2));
-        
-        group2.groupRead = group2;
-        assertEquals(group1.hashCode(), group2.hashCode());
-        assertEquals(group1, group2);
+        assertEquals(group1,group2);
         
         // group write equality tests
         group1.groupWrite = group2;
         assertEquals(group1.hashCode(), group2.hashCode());
-        assertFalse(group1.equals(group2));
-        
-        group2.groupWrite = group2;
-        assertEquals(group1.hashCode(), group2.hashCode());
-        assertEquals(group1, group2);
-        
+        assertEquals(group1,group2);
+
         group1.publicRead = true;
         assertEquals(group1.hashCode(), group2.hashCode());
-        assertFalse(group1.equals(group2));
-        
-        group2.publicRead = true;
-        assertEquals(group1.hashCode(), group2.hashCode());
-        assertEquals(group1, group2);
+        assertEquals(group1,group2);
         
         group2 = new Group("NewTestGroup", owner);
         assertFalse(group1.hashCode() == group2.hashCode());
@@ -119,4 +99,31 @@ public class GroupTest
         // test toString
         System.out.println(group1);
     }
+    
+    @Test
+    public void exceptionTests()
+    {
+        boolean thrown = false;
+        try
+        {
+            new Group(null, new User<HttpPrincipal>(new HttpPrincipal("owner")));
+        }
+        catch(IllegalArgumentException e)
+        {
+            thrown = true;
+        }
+        assertTrue(thrown);
+        
+        
+        thrown = false;
+        try
+        {
+            new Group("NewTestGroup", null);
+        }
+        catch(IllegalArgumentException e)
+        {
+            thrown = true;
+        }
+        assertTrue(thrown);
+    }
 }
diff --git a/projects/cadcUtil/test/src/ca/nrc/cadc/auth/model/UserTest.java b/projects/cadcUtil/test/src/ca/nrc/cadc/auth/model/UserTest.java
index c87163ed805b65b6e4ccb429c34ea0e8eb6c6bef..547b37d44244bf9debb9506374fd14daf5907022 100644
--- a/projects/cadcUtil/test/src/ca/nrc/cadc/auth/model/UserTest.java
+++ b/projects/cadcUtil/test/src/ca/nrc/cadc/auth/model/UserTest.java
@@ -36,7 +36,7 @@ package ca.nrc.cadc.auth.model;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotSame;
+import static org.junit.Assert.assertTrue;
 
 import javax.security.auth.x500.X500Principal;
 
@@ -45,6 +45,7 @@ import org.junit.Test;
 
 import ca.nrc.cadc.auth.HttpPrincipal;
 import ca.nrc.cadc.auth.NumericPrincipal;
+import ca.nrc.cadc.auth.OpenIdPrincipal;
 
 public class UserTest
 {
@@ -66,13 +67,10 @@ public class UserTest
 
         user1.userDetails = new UserDetails("Joe", "Raymond",
                 "jr@email.com", "123 Street", "CADC", "Victoria", "CA");
-        assertFalse(user1.equals(user2));
-        assertEquals(user1.hashCode(), user2.hashCode());
-
-        user2.userDetails = user1.userDetails;
         assertEquals(user1, user2);
         assertEquals(user1.hashCode(), user2.hashCode());
 
+
         User<X500Principal> user3 = new User<X500Principal>(
                 new X500Principal("cn=aaa,ou=ca"));
         User<HttpPrincipal> user4 = new User<HttpPrincipal>(
@@ -81,20 +79,12 @@ public class UserTest
         assertFalse(user3.hashCode() == user4.hashCode());
 
         user1.getPrincipals().add(new X500Principal("cn=aaa,ou=ca"));
-        assertFalse(user1.equals(user2));
-        assertEquals(user1.hashCode(), user2.hashCode());
-
-        user2.getPrincipals().add(new X500Principal("cn=aaa,ou=ca"));
-        assertEquals(user1, user1);
+        assertEquals(user1, user2);
         assertEquals(user1.hashCode(), user2.hashCode());
 
         user1.posixDetails = new PosixDetails(12, 23,
                 "/home/myhome");
-        assertFalse(user1.equals(user2));
-        assertEquals(user1.hashCode(), user2.hashCode());
-
-        user2.getPrincipals().add(new X500Principal("cn=aaa,ou=ca"));
-        assertEquals(user1, user1);
+        assertEquals(user1, user2);
         assertEquals(user1.hashCode(), user2.hashCode());
 
         User<NumericPrincipal> user5 = new User<NumericPrincipal>(
@@ -107,4 +97,136 @@ public class UserTest
         System.out.println(user1.posixDetails);
         
     }
+    
+    @Test
+    public void exceptionTests()
+    {
+        boolean thrown = false;
+        try
+        {
+            new User<NumericPrincipal>(null);
+        }
+        catch(IllegalArgumentException e)
+        {
+            thrown = true;
+        }
+        assertTrue(thrown);
+        
+        thrown = false;
+        try
+        {
+            new UserDetails(null, "Raymond",
+                    "jr@email.com", "123 Street", "CADC", "Victoria", "CA");
+        }
+        catch(IllegalArgumentException e)
+        {
+            thrown = true;
+        }
+        assertTrue(thrown);
+        
+        thrown = false;
+        try
+        {
+            new UserDetails("Joe", null,
+                    "jr@email.com", "123 Street", "CADC", "Victoria", "CA");
+        }
+        catch(IllegalArgumentException e)
+        {
+            thrown = true;
+        }
+        assertTrue(thrown);
+        
+        thrown = false;
+        try
+        {
+            new UserDetails("Joe", "Raymond",
+                    null, "123 Street", "CADC", "Victoria", "CA");
+        }
+        catch(IllegalArgumentException e)
+        {
+            thrown = true;
+        }
+        assertTrue(thrown);
+        
+        thrown = false;
+        try
+        {
+            new UserDetails("Joe", "Raymond",
+                    "jr@email.com", null, "CADC", "Victoria", "CA");
+        }
+        catch(IllegalArgumentException e)
+        {
+            thrown = true;
+        }
+        assertTrue(thrown);
+        
+        thrown = false;
+        try
+        {
+            new UserDetails("Joe", "Raymond",
+                    "jr@email.com", "123 Street", null, "Victoria", "CA");
+        }
+        catch(IllegalArgumentException e)
+        {
+            thrown = true;
+        }
+        assertTrue(thrown);
+        
+        thrown = false;
+        try
+        {
+            new UserDetails("Joe", "Raymond",
+                    "jr@email.com", "123 Street", "CADC", null, "CA");
+        }
+        catch(IllegalArgumentException e)
+        {
+            thrown = true;
+        }
+        assertTrue(thrown);
+        
+        thrown = false;
+        try
+        {
+            new UserDetails("Joe", "Raymond",
+                    "jr@email.com", "123 Street", "CADC", "Victoria", null);
+        }
+        catch(IllegalArgumentException e)
+        {
+            thrown = true;
+        }
+        assertTrue(thrown);
+        
+        thrown = false;
+        try
+        {
+            new PosixDetails(11, 22, null);
+        }
+        catch(IllegalArgumentException e)
+        {
+            thrown = true;
+        }
+        assertTrue(thrown);
+        
+        thrown = false;
+        try
+        {
+            new HttpPrincipal(null);
+        }
+        catch(IllegalArgumentException e)
+        {
+            thrown = true;
+        }
+        assertTrue(thrown);
+        
+        thrown = false;
+        try
+        {
+            new OpenIdPrincipal(null);
+        }
+        catch(IllegalArgumentException e)
+        {
+            thrown = true;
+        }
+        assertTrue(thrown);
+    }
 }