diff --git a/rosjava/src/main/java/org/ros/internal/node/server/master/TopicRegistrationInfo.java b/rosjava/src/main/java/org/ros/internal/node/server/master/TopicRegistrationInfo.java
index 236dda78b0108080523f3b6633a5497518fbce9d..57fe543d46906294470cfc48070b24bf53940bd7 100644
--- a/rosjava/src/main/java/org/ros/internal/node/server/master/TopicRegistrationInfo.java
+++ b/rosjava/src/main/java/org/ros/internal/node/server/master/TopicRegistrationInfo.java
@@ -17,14 +17,13 @@
 package org.ros.internal.node.server.master;
 
 import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Sets;
 
 import org.ros.master.client.TopicSystemState;
 import org.ros.namespace.GraphName;
 import org.ros.node.topic.Subscriber;
 
-import java.util.List;
 import java.util.Set;
 
 /**
@@ -117,8 +116,8 @@ public class TopicRegistrationInfo {
    * 
    * @return an immutable list of publishers
    */
-  public List<NodeRegistrationInfo> getPublishers() {
-    return ImmutableList.copyOf(publishers);
+  public Set<NodeRegistrationInfo> getPublishers() {
+    return ImmutableSet.copyOf(publishers);
   }
 
   /**
@@ -153,8 +152,8 @@ public class TopicRegistrationInfo {
    * 
    * @return an immutable list of publishers
    */
-  public List<NodeRegistrationInfo> getSubscribers() {
-    return ImmutableList.copyOf(subscribers);
+  public Set<NodeRegistrationInfo> getSubscribers() {
+    return ImmutableSet.copyOf(subscribers);
   }
 
   /**
diff --git a/rosjava/src/test/java/org/ros/internal/node/server/master/MasterRegistrationManagerImplTest.java b/rosjava/src/test/java/org/ros/internal/node/server/master/MasterRegistrationManagerImplTest.java
index 12d07f93248b3a83bb00346d670ba7d0f6106603..eff7334cdb5e68f0a00a4f70c7ba3f74be3367a2 100644
--- a/rosjava/src/test/java/org/ros/internal/node/server/master/MasterRegistrationManagerImplTest.java
+++ b/rosjava/src/test/java/org/ros/internal/node/server/master/MasterRegistrationManagerImplTest.java
@@ -10,7 +10,6 @@ import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 
-import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
 
 import org.junit.Before;
@@ -64,7 +63,7 @@ public class MasterRegistrationManagerImplTest {
 
     // Make sure only publisher in the topic is the topic we got for the node
     // name
-    assertEquals(Lists.newArrayList(node), topic.getPublishers());
+    assertEquals(Sets.newHashSet(node), topic.getPublishers());
 
     // No attempt for node shutdown
     verify(registrationListener, Mockito.never()).onNodeReplacement(node);
@@ -97,7 +96,7 @@ public class MasterRegistrationManagerImplTest {
 
     // Make sure only subscriber in the topic is the topic we got for the node
     // name
-    assertEquals(Lists.newArrayList(node), topic.getSubscribers());
+    assertEquals(Sets.newHashSet(node), topic.getSubscribers());
 
     // No attempt for node shutdown
     verify(registrationListener, Mockito.never()).onNodeReplacement(node);
@@ -383,7 +382,7 @@ public class MasterRegistrationManagerImplTest {
     assertEquals(Sets.newHashSet(topicPublisher2), node2.getPublishers());
 
     // Both publishers in topic
-    assertEquals(Lists.newArrayList(node1, node2), topicPublisher1.getPublishers());
+    assertEquals(Sets.newHashSet(node1, node2), topicPublisher1.getPublishers());
 
     // No attempt for node shutdown
     verify(registrationListener, Mockito.never()).onNodeReplacement(node1);
@@ -497,7 +496,7 @@ public class MasterRegistrationManagerImplTest {
     // and the node will show this published topic.
     assertTrue(topic1.getPublishers().isEmpty());
     assertEquals(Sets.newHashSet(topic2), node.getPublishers());
-    assertEquals(Lists.newArrayList(node), topic2.getPublishers());
+    assertEquals(Sets.newHashSet(node), topic2.getPublishers());
   }
 
   /**
@@ -559,7 +558,7 @@ public class MasterRegistrationManagerImplTest {
     // and the node will show this subscribed topic.
     assertTrue(topic1.getSubscribers().isEmpty());
     assertEquals(Sets.newHashSet(topic2), node.getSubscribers());
-    assertEquals(Lists.newArrayList(node), topic2.getSubscribers());
+    assertEquals(Sets.newHashSet(node), topic2.getSubscribers());
   }
 
   /**
diff --git a/rosjava_bootstrap/src/main/java/org/ros/namespace/GraphName.java b/rosjava_bootstrap/src/main/java/org/ros/namespace/GraphName.java
index 4892cb251b7043107a835098ea613446626aa6f5..a58d32b3d1dacfb557d5d980500db1dca57cc7ec 100644
--- a/rosjava_bootstrap/src/main/java/org/ros/namespace/GraphName.java
+++ b/rosjava_bootstrap/src/main/java/org/ros/namespace/GraphName.java
@@ -271,6 +271,9 @@ public class GraphName {
     if (isRoot()) {
       return other.toGlobal();
     }
+    if (other.isEmpty()) {
+      return this;
+    }
     return new GraphName(toString() + SEPARATOR + other.toString());
   }
 
diff --git a/rosjava_bootstrap/src/test/java/org/ros/namespace/GraphNameTest.java b/rosjava_bootstrap/src/test/java/org/ros/namespace/GraphNameTest.java
index 4f7b99b20df2499f8a98fde6064effa862cae1f5..ac5217a147efdd2cc607590b21e657a7aae0e01a 100644
--- a/rosjava_bootstrap/src/test/java/org/ros/namespace/GraphNameTest.java
+++ b/rosjava_bootstrap/src/test/java/org/ros/namespace/GraphNameTest.java
@@ -175,6 +175,7 @@ public class GraphNameTest {
   public void testJoin() {
     assertEquals(GraphName.of("/bar"), GraphName.of("/").join(GraphName.of("bar")));
     assertEquals(GraphName.of("bar"), GraphName.of("").join(GraphName.of("bar")));
+    assertEquals(GraphName.of("bar"), GraphName.of("bar").join(GraphName.of("")));
     assertEquals(GraphName.of("foo/bar"), GraphName.of("foo").join(GraphName.of("bar")));
     assertEquals(GraphName.of("/foo/bar"), GraphName.of("/foo").join(GraphName.of("bar")));
     assertEquals(GraphName.of("/bar"), GraphName.of("/foo").join(GraphName.of("/bar")));
@@ -201,5 +202,4 @@ public class GraphNameTest {
     assertTrue(latch.await(1, TimeUnit.SECONDS));
     assertEquals(sampleSize, anonymousGraphNames.size());
   }
-
 }