diff --git a/src/main/java/org/apache/gossip/manager/ActiveGossipThread.java b/src/main/java/org/apache/gossip/manager/ActiveGossipThread.java
index b966fcb..85d73d5 100644
--- a/src/main/java/org/apache/gossip/manager/ActiveGossipThread.java
+++ b/src/main/java/org/apache/gossip/manager/ActiveGossipThread.java
@@ -45,7 +45,7 @@
     while (keepRunning.get()) {
       try {
         TimeUnit.MILLISECONDS.sleep(gossipManager.getSettings().getGossipInterval());
-        sendMembershipList(gossipManager.getMyself(), gossipManager.getMemberList());
+        sendMembershipList(gossipManager.getMyself(), gossipManager.getLiveMembers());
       } catch (InterruptedException e) {
         GossipService.LOGGER.error(e);
         keepRunning.set(false);
diff --git a/src/main/java/org/apache/gossip/manager/GossipCore.java b/src/main/java/org/apache/gossip/manager/GossipCore.java
index ccfa951..7cfe8a9 100644
--- a/src/main/java/org/apache/gossip/manager/GossipCore.java
+++ b/src/main/java/org/apache/gossip/manager/GossipCore.java
@@ -153,10 +153,10 @@
     } catch (InterruptedException e) {
       throw new RuntimeException(e);
     } catch (ExecutionException e) {
-      System.err.println(e);
+      LOGGER.error(e.getMessage(), e);
       return null;
     } catch (TimeoutException e) {
-      System.err.println(e);
+      LOGGER.error(e.getMessage(), e);
       return null; 
     } finally {
       if (t != null){
@@ -207,7 +207,7 @@
                 senderMember.getUri(), senderMember.getId(),
                 senderMember.getHeartbeat(), gossipManager, gossipManager.getSettings()
                         .getCleanupInterval());
-        gossipManager.revivieMember(newLocalMember);
+        gossipManager.reviveMember(newLocalMember);
         newLocalMember.startTimeoutTimer();
       }
     }
@@ -215,20 +215,20 @@
       if (remoteMember.getId().equals(gossipManager.getMyself().getId())) {
         continue;
       }
-      if (gossipManager.getMemberList().contains(remoteMember)) {
-        LocalGossipMember localMember = gossipManager.getMemberList().get(
-                gossipManager.getMemberList().indexOf(remoteMember));
+      if (gossipManager.getLiveMembers().contains(remoteMember)) {
+        LocalGossipMember localMember = gossipManager.getLiveMembers().get(
+                gossipManager.getLiveMembers().indexOf(remoteMember));
         if (remoteMember.getHeartbeat() > localMember.getHeartbeat()) {
           localMember.setHeartbeat(remoteMember.getHeartbeat());
           localMember.resetTimeoutTimer();
         }
-      } else if (!gossipManager.getMemberList().contains(remoteMember)
+      } else if (!gossipManager.getLiveMembers().contains(remoteMember)
               && !gossipManager.getDeadList().contains(remoteMember)) {
         LocalGossipMember newLocalMember = new LocalGossipMember(remoteMember.getClusterName(),
                 remoteMember.getUri(), remoteMember.getId(),
                 remoteMember.getHeartbeat(), gossipManager, gossipManager.getSettings()
                         .getCleanupInterval());
-        gossipManager.createOrRevivieMember(newLocalMember);
+        gossipManager.createOrReviveMember(newLocalMember);
         newLocalMember.startTimeoutTimer();
       } else {
         if (gossipManager.getDeadList().contains(remoteMember)) {
@@ -239,7 +239,7 @@
                     remoteMember.getUri(), remoteMember.getId(),
                     remoteMember.getHeartbeat(), gossipManager, gossipManager.getSettings()
                             .getCleanupInterval());
-            gossipManager.revivieMember(newLocalMember);
+            gossipManager.reviveMember(newLocalMember);
             newLocalMember.startTimeoutTimer();
             LOGGER.debug("Removed remote member " + remoteMember.getAddress()
                     + " from dead list and added to local member list.");
@@ -247,14 +247,14 @@
             LOGGER.debug("me " + gossipManager.getMyself());
             LOGGER.debug("sender " + senderMember);
             LOGGER.debug("remote " + remoteList);
-            LOGGER.debug("live " + gossipManager.getMemberList());
+            LOGGER.debug("live " + gossipManager.getLiveMembers());
             LOGGER.debug("dead " + gossipManager.getDeadList());
           }
         } else {
           LOGGER.debug("me " + gossipManager.getMyself());
           LOGGER.debug("sender " + senderMember);
           LOGGER.debug("remote " + remoteList);
-          LOGGER.debug("live " + gossipManager.getMemberList());
+          LOGGER.debug("live " + gossipManager.getLiveMembers());
           LOGGER.debug("dead " + gossipManager.getDeadList());
           // throw new IllegalArgumentException("wtf");
         }
diff --git a/src/main/java/org/apache/gossip/manager/GossipManager.java b/src/main/java/org/apache/gossip/manager/GossipManager.java
index 7a10c91..59ad91f 100644
--- a/src/main/java/org/apache/gossip/manager/GossipManager.java
+++ b/src/main/java/org/apache/gossip/manager/GossipManager.java
@@ -108,7 +108,7 @@
     }
   }
 
-  public void revivieMember(LocalGossipMember m) {
+  public void reviveMember(LocalGossipMember m) {
     for (Entry<LocalGossipMember, GossipState> it : this.members.entrySet()) {
       if (it.getKey().getId().equals(m.getId())) {
         it.getKey().disableTimer();
@@ -121,7 +121,7 @@
     }
   }
 
-  public void createOrRevivieMember(LocalGossipMember m) {
+  public void createOrReviveMember(LocalGossipMember m) {
     members.put(m, GossipState.UP);
     if (listener != null) {
       listener.gossipEvent(m, GossipState.UP);
@@ -136,7 +136,7 @@
    * 
    * @return a read only list of members found in the UP state
    */
-  public List<LocalGossipMember> getMemberList() {
+  public List<LocalGossipMember> getLiveMembers() {
     List<LocalGossipMember> up = new ArrayList<>();
     for (Entry<LocalGossipMember, GossipState> entry : members.entrySet()) {
       if (GossipState.UP.equals(entry.getValue())) {
diff --git a/src/main/java/org/apache/gossip/manager/impl/OnlyProcessReceivedPassiveGossipThread.java b/src/main/java/org/apache/gossip/manager/impl/OnlyProcessReceivedPassiveGossipThread.java
index 79b04ce..0b51573 100644
--- a/src/main/java/org/apache/gossip/manager/impl/OnlyProcessReceivedPassiveGossipThread.java
+++ b/src/main/java/org/apache/gossip/manager/impl/OnlyProcessReceivedPassiveGossipThread.java
@@ -55,7 +55,7 @@
                 senderMember.getUri(), senderMember.getId(),
                 senderMember.getHeartbeat(), gossipManager, gossipManager.getSettings()
                         .getCleanupInterval());
-        gossipManager.revivieMember(newLocalMember);
+        gossipManager.reviveMember(newLocalMember);
         newLocalMember.startTimeoutTimer();
       }
     }
@@ -63,20 +63,20 @@
       if (remoteMember.getId().equals(gossipManager.getMyself().getId())) {
         continue;
       }
-      if (gossipManager.getMemberList().contains(remoteMember)) {
-        LocalGossipMember localMember = gossipManager.getMemberList().get(
-                gossipManager.getMemberList().indexOf(remoteMember));
+      if (gossipManager.getLiveMembers().contains(remoteMember)) {
+        LocalGossipMember localMember = gossipManager.getLiveMembers().get(
+                gossipManager.getLiveMembers().indexOf(remoteMember));
         if (remoteMember.getHeartbeat() > localMember.getHeartbeat()) {
           localMember.setHeartbeat(remoteMember.getHeartbeat());
           localMember.resetTimeoutTimer();
         }
-      } else if (!gossipManager.getMemberList().contains(remoteMember)
+      } else if (!gossipManager.getLiveMembers().contains(remoteMember)
               && !gossipManager.getDeadList().contains(remoteMember)) {
         LocalGossipMember newLocalMember = new LocalGossipMember(remoteMember.getClusterName(),
                 remoteMember.getUri(), remoteMember.getId(),
                 remoteMember.getHeartbeat(), gossipManager, gossipManager.getSettings()
                         .getCleanupInterval());
-        gossipManager.createOrRevivieMember(newLocalMember);
+        gossipManager.createOrReviveMember(newLocalMember);
         newLocalMember.startTimeoutTimer();
       } else {
         if (gossipManager.getDeadList().contains(remoteMember)) {
@@ -87,7 +87,7 @@
                     remoteMember.getUri(), remoteMember.getId(),
                     remoteMember.getHeartbeat(), gossipManager, gossipManager.getSettings()
                             .getCleanupInterval());
-            gossipManager.revivieMember(newLocalMember);
+            gossipManager.reviveMember(newLocalMember);
             newLocalMember.startTimeoutTimer();
             LOGGER.debug("Removed remote member " + remoteMember.getAddress()
                     + " from dead list and added to local member list.");
@@ -95,14 +95,14 @@
             LOGGER.debug("me " + gossipManager.getMyself());
             LOGGER.debug("sender " + senderMember);
             LOGGER.debug("remote " + remoteList);
-            LOGGER.debug("live " + gossipManager.getMemberList());
+            LOGGER.debug("live " + gossipManager.getLiveMembers());
             LOGGER.debug("dead " + gossipManager.getDeadList());
           }
         } else {
           LOGGER.debug("me " + gossipManager.getMyself());
           LOGGER.debug("sender " + senderMember);
           LOGGER.debug("remote " + remoteList);
-          LOGGER.debug("live " + gossipManager.getMemberList());
+          LOGGER.debug("live " + gossipManager.getLiveMembers());
           LOGGER.debug("dead " + gossipManager.getDeadList());
           // throw new IllegalArgumentException("wtf");
         }
diff --git a/src/main/java/org/apache/gossip/manager/random/RandomActiveGossipThread.java b/src/main/java/org/apache/gossip/manager/random/RandomActiveGossipThread.java
index da8ed22..b39a748 100644
--- a/src/main/java/org/apache/gossip/manager/random/RandomActiveGossipThread.java
+++ b/src/main/java/org/apache/gossip/manager/random/RandomActiveGossipThread.java
@@ -65,6 +65,7 @@
       member = memberList.get(randomNeighborIndex);
     } else {
       GossipService.LOGGER.debug("I am alone in this world.");
+      
     }
     return member;
   }
diff --git a/src/test/java/org/apache/gossip/ShutdownDeadtimeTest.java b/src/test/java/org/apache/gossip/ShutdownDeadtimeTest.java
index 0420444..98acb05 100644
--- a/src/test/java/org/apache/gossip/ShutdownDeadtimeTest.java
+++ b/src/test/java/org/apache/gossip/ShutdownDeadtimeTest.java
@@ -33,10 +33,6 @@
 import org.apache.log4j.Logger;
 import org.junit.Test;
 
-import org.apache.gossip.GossipMember;
-import org.apache.gossip.GossipService;
-import org.apache.gossip.GossipSettings;
-import org.apache.gossip.RemoteGossipMember;
 import org.apache.gossip.event.GossipListener;
 import org.apache.gossip.event.GossipState;
 
@@ -78,7 +74,7 @@
           public Integer call() throws Exception {
               int total = 0;
               for (int i = 0; i < clusterMembers; ++i) {
-                  total += clients.get(i).get_gossipManager().getMemberList().size();
+                  total += clients.get(i).get_gossipManager().getLiveMembers().size();
               }
               return total;
           }}).afterWaitingAtMost(20, TimeUnit.SECONDS).isEqualTo(20);
@@ -94,7 +90,7 @@
           public Integer call() throws Exception {
               int total = 0;
               for (int i = 0; i < clusterMembers; ++i) {
-                  total += clients.get(i).get_gossipManager().getMemberList().size();
+                  total += clients.get(i).get_gossipManager().getLiveMembers().size();
               }
               return total;
           }}).afterWaitingAtMost(20, TimeUnit.SECONDS).isEqualTo(16);
@@ -127,7 +123,7 @@
           public Integer call() throws Exception {
               int total = 0;
               for (int i = 0; i < clusterMembers; ++i) {
-                  total += clients.get(i).get_gossipManager().getMemberList().size();
+                  total += clients.get(i).get_gossipManager().getLiveMembers().size();
               }
               return total;
           }}).afterWaitingAtMost(20, TimeUnit.SECONDS).isEqualTo(20);
diff --git a/src/test/java/org/apache/gossip/StartupSettingsTest.java b/src/test/java/org/apache/gossip/StartupSettingsTest.java
index 363b4e2..4b064ec 100644
--- a/src/test/java/org/apache/gossip/StartupSettingsTest.java
+++ b/src/test/java/org/apache/gossip/StartupSettingsTest.java
@@ -17,10 +17,6 @@
  */
 package org.apache.gossip;
 
-import org.apache.gossip.GossipMember;
-import org.apache.gossip.GossipService;
-import org.apache.gossip.GossipSettings;
-import org.apache.gossip.StartupSettings;
 import org.apache.log4j.Logger;
 import org.json.JSONException;
 import org.junit.Test;
@@ -60,7 +56,7 @@
     
     TUnit.assertThat(new Callable<Integer> (){
       public Integer call() throws Exception {
-          return firstService.get_gossipManager().getMemberList().size();
+          return firstService.get_gossipManager().getLiveMembers().size();
       }}).afterWaitingAtMost(30, TimeUnit.SECONDS).isEqualTo(0);
     final GossipService serviceUnderTest = new GossipService(
             StartupSettings.fromJSONFile( settingsFile )
@@ -68,7 +64,7 @@
     serviceUnderTest.start();
     TUnit.assertThat(new Callable<Integer> (){
       public Integer call() throws Exception {
-          return serviceUnderTest.get_gossipManager().getMemberList().size();
+          return serviceUnderTest.get_gossipManager().getLiveMembers().size();
       }}).afterWaitingAtMost(10, TimeUnit.SECONDS).isEqualTo(1);
     firstService.shutdown();
     serviceUnderTest.shutdown();
diff --git a/src/test/java/org/apache/gossip/TenNodeThreeSeedTest.java b/src/test/java/org/apache/gossip/TenNodeThreeSeedTest.java
index d194efe..dd7d021 100644
--- a/src/test/java/org/apache/gossip/TenNodeThreeSeedTest.java
+++ b/src/test/java/org/apache/gossip/TenNodeThreeSeedTest.java
@@ -32,10 +32,6 @@
 import org.apache.log4j.Logger;
 import org.junit.Test;
 
-import org.apache.gossip.GossipMember;
-import org.apache.gossip.GossipService;
-import org.apache.gossip.GossipSettings;
-import org.apache.gossip.RemoteGossipMember;
 import org.apache.gossip.event.GossipListener;
 import org.apache.gossip.event.GossipState;
 
@@ -84,7 +80,7 @@
       public Integer call() throws Exception {
         int total = 0;
         for (int i = 0; i < clusterMembers; ++i) {
-          total += clients.get(i).get_gossipManager().getMemberList().size();
+          total += clients.get(i).get_gossipManager().getLiveMembers().size();
         }
         return total;
       }}).afterWaitingAtMost(20, TimeUnit.SECONDS).isEqualTo(20);
diff --git a/src/test/java/org/apache/gossip/manager/RandomGossipManagerBuilderTest.java b/src/test/java/org/apache/gossip/manager/RandomGossipManagerBuilderTest.java
index d753676..4d77460 100644
--- a/src/test/java/org/apache/gossip/manager/RandomGossipManagerBuilderTest.java
+++ b/src/test/java/org/apache/gossip/manager/RandomGossipManagerBuilderTest.java
@@ -74,7 +74,7 @@
         .settings(new GossipSettings())
         .gossipMembers(null).build();
 
-    Assert.assertNotNull(gossipManager.getMemberList());
+    Assert.assertNotNull(gossipManager.getLiveMembers());
   }
 
   @Test
@@ -89,8 +89,8 @@
         .settings(new GossipSettings())
         .uri(new URI("udp://localhost:8000"))
         .gossipMembers(memberList).build();
-    Assert.assertEquals(1, gossipManager.getMemberList().size());
-    Assert.assertEquals(member.getId(), gossipManager.getMemberList().get(0).getId());
+    Assert.assertEquals(1, gossipManager.getLiveMembers().size());
+    Assert.assertEquals(member.getId(), gossipManager.getLiveMembers().get(0).getId());
   }
 
 }
\ No newline at end of file
