Add id field
diff --git a/src/main/java/com/google/code/gossip/GossipMember.java b/src/main/java/com/google/code/gossip/GossipMember.java
index 90f4fd2..f34aead 100644
--- a/src/main/java/com/google/code/gossip/GossipMember.java
+++ b/src/main/java/com/google/code/gossip/GossipMember.java
@@ -17,6 +17,8 @@
 	public static final String JSON_PORT = "port";

 	/** The JSON key for the heartbeat property. */

 	public static final String JSON_HEARTBEAT = "heartbeat";

+	

+	public static final String JSON_ID = "id";

 

 	/** The hostname or IP address of this gossip member. */

 	protected String _host;

@@ -27,16 +29,19 @@
 	/** The current heartbeat of this gossip member. */

 	protected int _heartbeat;

 	

+	protected String _id;

+	

 	/**

 	 * Constructor.

 	 * @param host The hostname or IP address.

 	 * @param port The port number.

 	 * @param heartbeat The current heartbeat.

 	 */

-	public GossipMember(String host, int port, int heartbeat) {

+	public GossipMember(String host, int port, String id, int heartbeat) {

 		_host = host;

 		_port = port;

 		_heartbeat = heartbeat;

+		_id = id;

 	}

 	

 	/**

@@ -78,14 +83,20 @@
 	public void setHeartbeat(int heartbeat) {

 		this._heartbeat = heartbeat;

 	}

+	

+	

+	public String getId() {

+    return _id;

+  }

 

-	/**

-	 * @see java.lang.Object#toString()

-	 */

+  public void setId(String _id) {

+    this._id = _id;

+  }

+

 	public String toString() {

-		return "Member [address=" + getAddress() + ", heartbeat=" + _heartbeat + "]";

+		return "Member [address=" + getAddress() + ", id=" + _id + ", heartbeat=" + _heartbeat + "]";

 	}

-

+	  

 	/**

 	 * @see java.lang.Object#hashCode()

 	 */

@@ -128,6 +139,7 @@
 			JSONObject jsonObject = new JSONObject();

 			jsonObject.put(JSON_HOST, _host);

 			jsonObject.put(JSON_PORT, _port);

+			jsonObject.put(JSON_ID, _id);

 			jsonObject.put(JSON_HEARTBEAT, _heartbeat);

 			return jsonObject;

 		} catch (JSONException e) {

diff --git a/src/main/java/com/google/code/gossip/GossipService.java b/src/main/java/com/google/code/gossip/GossipService.java
index 2604b8e..cd71731 100644
--- a/src/main/java/com/google/code/gossip/GossipService.java
+++ b/src/main/java/com/google/code/gossip/GossipService.java
@@ -25,7 +25,7 @@
 	 * @throws UnknownHostException

 	 */

 	public GossipService(StartupSettings startupSettings) throws InterruptedException, UnknownHostException {

-		this(InetAddress.getLocalHost().getHostAddress(), startupSettings.getPort(), startupSettings.getLogLevel(), startupSettings.getGossipMembers(), startupSettings.getGossipSettings());

+		this(InetAddress.getLocalHost().getHostAddress(), startupSettings.getPort(), "", startupSettings.getLogLevel(), startupSettings.getGossipMembers(), startupSettings.getGossipSettings());

 	}

 

 	/**

@@ -34,8 +34,8 @@
 	 * @throws InterruptedException

 	 * @throws UnknownHostException

 	 */

-	public GossipService(String ipAddress, int port, int logLevel, ArrayList<GossipMember> gossipMembers, GossipSettings settings) throws InterruptedException, UnknownHostException {

-		_gossipManager = new RandomGossipManager(ipAddress, port, settings, gossipMembers);

+	public GossipService(String ipAddress, int port, String id, int logLevel, ArrayList<GossipMember> gossipMembers, GossipSettings settings) throws InterruptedException, UnknownHostException {

+		_gossipManager = new RandomGossipManager(ipAddress, port, id, settings, gossipMembers);

 	}

 	

 	public void start() {

diff --git a/src/main/java/com/google/code/gossip/LocalGossipMember.java b/src/main/java/com/google/code/gossip/LocalGossipMember.java
index 429f39e..6920d23 100644
--- a/src/main/java/com/google/code/gossip/LocalGossipMember.java
+++ b/src/main/java/com/google/code/gossip/LocalGossipMember.java
@@ -20,8 +20,8 @@
 	 * @param gossipService The GossipService object.

 	 * @param cleanupTimeout The cleanup timeout for this gossip member.

 	 */

-	public LocalGossipMember(String hostname, int port, int heartbeat, NotificationListener notificationListener, int cleanupTimeout) {

-		super(hostname, port, heartbeat);

+	public LocalGossipMember(String hostname, int port, String id, int heartbeat, NotificationListener notificationListener, int cleanupTimeout) {

+		super(hostname, port, id, heartbeat);

 		

 		this.timeoutTimer = new GossipTimeoutTimer(cleanupTimeout, notificationListener, this);

 	}

diff --git a/src/main/java/com/google/code/gossip/RemoteGossipMember.java b/src/main/java/com/google/code/gossip/RemoteGossipMember.java
index a133adc..d6403e0 100644
--- a/src/main/java/com/google/code/gossip/RemoteGossipMember.java
+++ b/src/main/java/com/google/code/gossip/RemoteGossipMember.java
@@ -13,8 +13,8 @@
 	 * @param port The port number.

 	 * @param heartbeat The current heartbeat.

 	 */

-	public RemoteGossipMember(String hostname, int port, int heartbeat) {

-		super(hostname, port, heartbeat);

+	public RemoteGossipMember(String hostname, int port, String id, int heartbeat) {

+		super(hostname, port, id, heartbeat);

 	}

 	

 	/**

@@ -22,7 +22,7 @@
 	 * @param host The hostname or IP address.

 	 * @param port The port number.

 	 */

-	public RemoteGossipMember(String hostname, int port) {

-		super(hostname, port, 0);

+	public RemoteGossipMember(String hostname, int port, String id) {

+		super(hostname, port, id, 0);

 	}

 }

diff --git a/src/main/java/com/google/code/gossip/StartupSettings.java b/src/main/java/com/google/code/gossip/StartupSettings.java
index 442034c..8cc1275 100644
--- a/src/main/java/com/google/code/gossip/StartupSettings.java
+++ b/src/main/java/com/google/code/gossip/StartupSettings.java
@@ -147,7 +147,7 @@
 		JSONArray membersJSON = jsonObject.getJSONArray("members");

 		for (int i=0; i<membersJSON.length(); i++) {

 			JSONObject memberJSON = membersJSON.getJSONObject(i);

-			RemoteGossipMember member = new RemoteGossipMember(memberJSON.getString("host"), memberJSON.getInt("port"));

+			RemoteGossipMember member = new RemoteGossipMember(memberJSON.getString("host"), memberJSON.getInt("port"), "");

 			settings.addGossipMember(member);

 			System.out.print(member.getAddress());

 			if (i < (membersJSON.length() - 1))

diff --git a/src/main/java/com/google/code/gossip/examples/GossipExample.java b/src/main/java/com/google/code/gossip/examples/GossipExample.java
index 2c6ee29..5b6df28 100644
--- a/src/main/java/com/google/code/gossip/examples/GossipExample.java
+++ b/src/main/java/com/google/code/gossip/examples/GossipExample.java
@@ -51,13 +51,13 @@
 			// Create the gossip members and put them in a list and give them a port number starting with 2000.

 			ArrayList<GossipMember> startupMembers = new ArrayList<GossipMember>();

 			for (int i=0; i<NUMBER_OF_CLIENTS; ++i) {

-				startupMembers.add(new RemoteGossipMember(myIpAddress, 2000+i));

+				startupMembers.add(new RemoteGossipMember(myIpAddress, 2000+i, ""));

 			}

 			

 			// Lets start the gossip clients.

 			// Start the clients, waiting cleaning-interval + 1 second between them which will show the dead list handling.

 			for (GossipMember member : startupMembers) {

-				GossipService gossipService = new GossipService(myIpAddress, member.getPort(), LogLevel.DEBUG, startupMembers, settings);

+				GossipService gossipService = new GossipService(myIpAddress, member.getPort(), "", LogLevel.DEBUG, startupMembers, settings);

 				clients.add(gossipService);

 				gossipService.start();

 				sleep(settings.getCleanupInterval() + 1000);

diff --git a/src/main/java/com/google/code/gossip/manager/GossipManager.java b/src/main/java/com/google/code/gossip/manager/GossipManager.java
index ebc185b..d7d9fa4 100644
--- a/src/main/java/com/google/code/gossip/manager/GossipManager.java
+++ b/src/main/java/com/google/code/gossip/manager/GossipManager.java
@@ -41,20 +41,20 @@
 	

 	private Class<? extends ActiveGossipThread> _activeGossipThreadClass;

 	

-	public GossipManager(Class<? extends PassiveGossipThread> passiveGossipThreadClass, Class<? extends ActiveGossipThread> activeGossipThreadClass, String address, int port, GossipSettings settings, ArrayList<GossipMember> gossipMembers) {

+  public GossipManager(Class<? extends PassiveGossipThread> passiveGossipThreadClass,

+          Class<? extends ActiveGossipThread> activeGossipThreadClass, String address, int port,

+          String id, GossipSettings settings, ArrayList<GossipMember> gossipMembers) {

 		_passiveGossipThreadClass = passiveGossipThreadClass;

 		_activeGossipThreadClass = activeGossipThreadClass;

 		_settings = settings;

-		_me = new LocalGossipMember(address, port, 0, this, settings.getCleanupInterval());

+		_me = new LocalGossipMember(address, port, id, 0, this, settings.getCleanupInterval());

 		_memberList = new ArrayList<LocalGossipMember>();

 		_deadList = new ArrayList<LocalGossipMember>();		

-		GossipService.LOGGER.debug("Startup member list:");

-		GossipService.LOGGER.debug("---------------------");

-		GossipService.LOGGER.debug(_me);

-

 		for (GossipMember startupMember : gossipMembers) {

 			if (!startupMember.equals(_me)) {

-				LocalGossipMember member = new LocalGossipMember(startupMember.getHost(), startupMember.getPort(), 0, this, settings.getCleanupInterval());

+        LocalGossipMember member = new LocalGossipMember(startupMember.getHost(),

+                startupMember.getPort(), startupMember.getId(), 0, this,

+                settings.getCleanupInterval());

 				_memberList.add(member);

 				GossipService.LOGGER.debug(member);

 			} 

diff --git a/src/main/java/com/google/code/gossip/manager/PassiveGossipThread.java b/src/main/java/com/google/code/gossip/manager/PassiveGossipThread.java
index 3f51008..61c87bb 100644
--- a/src/main/java/com/google/code/gossip/manager/PassiveGossipThread.java
+++ b/src/main/java/com/google/code/gossip/manager/PassiveGossipThread.java
@@ -86,10 +86,11 @@
             JSONArray jsonArray = new JSONArray(receivedMessage);

             for (int i = 0; i < jsonArray.length(); i++) {

               JSONObject memberJSONObject = jsonArray.getJSONObject(i);

-              if (memberJSONObject.length() == 3) {

+              if (memberJSONObject.length() == 4) {

                 RemoteGossipMember member = new RemoteGossipMember(

                         memberJSONObject.getString(GossipMember.JSON_HOST),

                         memberJSONObject.getInt(GossipMember.JSON_PORT),

+                        memberJSONObject.getString(GossipMember.JSON_PORT),

                         memberJSONObject.getInt(GossipMember.JSON_HEARTBEAT));

                 GossipService.LOGGER.debug(member.toString());

                 // This is the first member found, so this should be the member who is communicating

@@ -100,7 +101,7 @@
                 remoteGossipMembers.add(member);

               } else {

                 GossipService.LOGGER

-                        .error("The received member object does not contain 3 objects:\n"

+                        .error("The received member object does not contain 4 objects:\n"

                                 + memberJSONObject.toString());

               }

 

diff --git a/src/main/java/com/google/code/gossip/manager/impl/OnlyProcessReceivedPassiveGossipThread.java b/src/main/java/com/google/code/gossip/manager/impl/OnlyProcessReceivedPassiveGossipThread.java
index dffe9f8..743f555 100644
--- a/src/main/java/com/google/code/gossip/manager/impl/OnlyProcessReceivedPassiveGossipThread.java
+++ b/src/main/java/com/google/code/gossip/manager/impl/OnlyProcessReceivedPassiveGossipThread.java
@@ -71,14 +71,14 @@
 									// Remove it from the dead list.

 									gossipManager.getDeadList().remove(localDeadMember);

 									// Add it as a new member and add it to the member list.

-									LocalGossipMember newLocalMember = new LocalGossipMember(remoteMember.getHost(), remoteMember.getPort(), remoteMember.getHeartbeat(), gossipManager, gossipManager.getSettings().getCleanupInterval());

+									LocalGossipMember newLocalMember = new LocalGossipMember(remoteMember.getHost(), remoteMember.getPort(), remoteMember.getId(), remoteMember.getHeartbeat(), gossipManager, gossipManager.getSettings().getCleanupInterval());

 									gossipManager.getMemberList().add(newLocalMember);

 									newLocalMember.startTimeoutTimer();

 									GossipService.LOGGER.info("Removed remote member " + remoteMember.getAddress() + " from dead list and added to local member list.");

 								}

 							} else {

 								// Brand spanking new member - welcome.

-								LocalGossipMember newLocalMember = new LocalGossipMember(remoteMember.getHost(), remoteMember.getPort(), remoteMember.getHeartbeat(), gossipManager, gossipManager.getSettings().getCleanupInterval());

+								LocalGossipMember newLocalMember = new LocalGossipMember(remoteMember.getHost(), remoteMember.getPort(), remoteMember.getId(), remoteMember.getHeartbeat(), gossipManager, gossipManager.getSettings().getCleanupInterval());

 								gossipManager.getMemberList().add(newLocalMember);

 								newLocalMember.startTimeoutTimer();

 								GossipService.LOGGER.info("Added new remote member " + remoteMember.getAddress() + " to local member list.");

diff --git a/src/main/java/com/google/code/gossip/manager/random/RandomGossipManager.java b/src/main/java/com/google/code/gossip/manager/random/RandomGossipManager.java
index 70e18a0..9e2c60f 100644
--- a/src/main/java/com/google/code/gossip/manager/random/RandomGossipManager.java
+++ b/src/main/java/com/google/code/gossip/manager/random/RandomGossipManager.java
@@ -8,7 +8,7 @@
 import com.google.code.gossip.manager.impl.OnlyProcessReceivedPassiveGossipThread;

 

 public class RandomGossipManager extends GossipManager {

-	public RandomGossipManager(String address, int port, GossipSettings settings, ArrayList<GossipMember> gossipMembers) {

-		super(OnlyProcessReceivedPassiveGossipThread.class, RandomActiveGossipThread.class, address, port, settings, gossipMembers);

+	public RandomGossipManager(String address, int port, String id, GossipSettings settings, ArrayList<GossipMember> gossipMembers) {

+		super(OnlyProcessReceivedPassiveGossipThread.class, RandomActiveGossipThread.class, address, port, id, settings, gossipMembers);

 	}

 }

diff --git a/src/test/java/io/teknek/gossip/TenNodeThreeSeedTest.java b/src/test/java/io/teknek/gossip/TenNodeThreeSeedTest.java
index 19519bd..eaf77ef 100644
--- a/src/test/java/io/teknek/gossip/TenNodeThreeSeedTest.java
+++ b/src/test/java/io/teknek/gossip/TenNodeThreeSeedTest.java
@@ -22,12 +22,12 @@
     int seedNodes = 3;
     ArrayList<GossipMember> startupMembers = new ArrayList<GossipMember>();
     for (int i = 1; i < seedNodes+1; ++i) {
-      startupMembers.add(new RemoteGossipMember("127.0.0." + i, 2000));
+      startupMembers.add(new RemoteGossipMember("127.0.0." + i, 2000, i+""));
     }
     ArrayList<GossipService> clients = new ArrayList<GossipService>();
     int clusterMembers = 5;
     for (int i = 1; i < clusterMembers+1; ++i) {
-      GossipService gossipService = new GossipService("127.0.0."+i, 2000, LogLevel.DEBUG, startupMembers, settings);
+      GossipService gossipService = new GossipService("127.0.0."+i, 2000, i+"", LogLevel.DEBUG, startupMembers, settings);
       clients.add(gossipService);
       gossipService.start();
       Thread.sleep(1000);