diff --git a/cadc-access-control/build.gradle b/cadc-access-control/build.gradle
index ede8363c28484fb52497ac550722e94f078c9e86..ee3e1a0c1bee6c67a385fac84e4bb09af5abe170 100644
--- a/cadc-access-control/build.gradle
+++ b/cadc-access-control/build.gradle
@@ -15,7 +15,7 @@ sourceCompatibility = 1.7
 
 group = 'org.opencadc'
 
-version = '1.1.2'
+version = '1.1.3'
 
 mainClassName = 'ca.nrc.cadc.ac.client.Main'
 
diff --git a/cadc-access-control/src/main/java/ca/nrc/cadc/ac/GroupURI.java b/cadc-access-control/src/main/java/ca/nrc/cadc/ac/GroupURI.java
index 16265fbfbd6bca861a4710138a0413c20df8d914..68a87acd53e6edc2c59ddfaced6b0813dae0b324 100644
--- a/cadc-access-control/src/main/java/ca/nrc/cadc/ac/GroupURI.java
+++ b/cadc-access-control/src/main/java/ca/nrc/cadc/ac/GroupURI.java
@@ -83,7 +83,6 @@ public class GroupURI
     private static Logger log = Logger.getLogger(GroupURI.class);
 
     private URI uri;
-    private String name;
 
     /**
      * Attempts to create a URI using the specified uri.
@@ -99,8 +98,6 @@ public class GroupURI
             throw new IllegalArgumentException("Null URI");
         }
 
-        this.uri = uri;
-
         // Ensure the scheme is correct
         if (uri.getScheme() == null)
         {
@@ -117,13 +114,9 @@ public class GroupURI
             throw new IllegalArgumentException("Missing authority and/or path.");
         }
 
-        log.debug("URI: " + uri);
-        log.debug("  scheme: " + uri.getScheme());
-        log.debug("  authority: " + uri.getAuthority());
-        log.debug("  path: " + uri.getPath());
-
         String fragment = uri.getFragment();
         String query = uri.getQuery();
+        String name = null;
         if (query == null)
         {
             if (fragment != null)
@@ -144,6 +137,9 @@ public class GroupURI
             }
             name = query;
         }
+
+        this.uri = URI.create(
+            uri.getScheme() + "://" + uri.getAuthority() + uri.getPath() + "?" + name);
     }
 
     /**
@@ -156,16 +152,16 @@ public class GroupURI
     }
 
     @Override
-    public boolean equals(Object rhs)
+    public boolean equals(Object other)
     {
-        if (rhs == null)
+        if (other == null)
             return false;
-        if (this == rhs)
+        if (this == other)
             return true;
-        if (rhs instanceof GroupURI)
+        if (other instanceof GroupURI)
         {
-            GroupURI vu = (GroupURI) rhs;
-            return uri.toString().equals(vu.uri.toString());
+            GroupURI otherURI = (GroupURI) other;
+            return uri.equals(otherURI.getURI());
         }
         return false;
     }
@@ -180,16 +176,6 @@ public class GroupURI
         return uri;
     }
 
-    /**
-     * Returns the decoded authority component of the URI.
-     *
-     * @return authority of the URI, or null if the authority is undefined.
-     */
-    public String getAuthority()
-    {
-        return uri.getAuthority();
-    }
-
     /**
      * Returns the decoded fragment component of the URI.
      *
@@ -197,18 +183,18 @@ public class GroupURI
      */
     public String getName()
     {
-        return name;
+        return uri.getQuery();
     }
 
     public URI getServiceID()
     {
-        String serviceID = uri.getScheme() +
+        String serviceIDString = uri.getScheme() +
             "://" +
             uri.getAuthority() +
             uri.getPath();
         try
         {
-            return new URI(serviceID);
+            return new URI(serviceIDString);
         }
         catch (URISyntaxException e)
         {
@@ -220,7 +206,7 @@ public class GroupURI
     @Override
     public String toString()
     {
-        return getServiceID() + "?" + name;
+        return uri.toString();
     }
 
 }
diff --git a/cadc-access-control/src/test/java/ca/nrc/cadc/ac/GroupURITest.java b/cadc-access-control/src/test/java/ca/nrc/cadc/ac/GroupURITest.java
index 423f7df9f070bf2d8771c67a31bdb40e3adf28f0..db202c749558b9fa17c202d7d667894105840280 100644
--- a/cadc-access-control/src/test/java/ca/nrc/cadc/ac/GroupURITest.java
+++ b/cadc-access-control/src/test/java/ca/nrc/cadc/ac/GroupURITest.java
@@ -18,6 +18,18 @@ public class GroupURITest
         Log4jInit.setLevel("ca.nrc.cadc.ac", Level.DEBUG);
     }
 
+    @Test
+    public void testEquals()
+    {
+        GroupURI uri1 = new GroupURI("ivo://example.org/gms?name");
+        GroupURI uri2 = new GroupURI("ivo://example.org/gms?name");
+        Assert.assertTrue(uri1.equals(uri2));
+
+        uri1 = new GroupURI("ivo://example.org/gms?name");
+        uri2 = new GroupURI("ivo://example.org/gms#name");
+        Assert.assertTrue(uri1.equals(uri2));
+    }
+
     @Test
     public void testMalformed()
     {
@@ -46,7 +58,6 @@ public class GroupURITest
         {
             GroupURI g = new GroupURI("ivo://my.authority/gms?name");
             Assert.assertEquals("ivo", g.getURI().getScheme());
-            Assert.assertEquals("my.authority", g.getAuthority());
             Assert.assertEquals("/gms", g.getURI().getPath());
             Assert.assertEquals("name", g.getName());
             Assert.assertEquals("ivo://my.authority/gms", g.getServiceID().toString());
@@ -65,7 +76,6 @@ public class GroupURITest
         {
             GroupURI g = new GroupURI("ivo://my.authority/gms#name");
             Assert.assertEquals("ivo", g.getURI().getScheme());
-            Assert.assertEquals("my.authority", g.getAuthority());
             Assert.assertEquals("/gms", g.getURI().getPath());
             Assert.assertEquals("name", g.getName());
             Assert.assertEquals("ivo://my.authority/gms", g.getServiceID().toString());