diff --git a/src/main/java/org/apache/gossip/crdt/GrowOnlyCounter.java b/src/main/java/org/apache/gossip/crdt/GrowOnlyCounter.java
index 9156142..dd1505a 100644
--- a/src/main/java/org/apache/gossip/crdt/GrowOnlyCounter.java
+++ b/src/main/java/org/apache/gossip/crdt/GrowOnlyCounter.java
@@ -111,7 +111,7 @@
       counter = 0L;
     }
     
-    public GrowOnlyCounter.Builder increment(Integer count) {
+    public GrowOnlyCounter.Builder increment(Long count) {
       counter += count;
       return this;
     }
diff --git a/src/main/java/org/apache/gossip/examples/StandAloneNodeCrdtOrSet.java b/src/main/java/org/apache/gossip/examples/StandAloneNodeCrdtOrSet.java
index 00f1279..0c5c0d5 100644
--- a/src/main/java/org/apache/gossip/examples/StandAloneNodeCrdtOrSet.java
+++ b/src/main/java/org/apache/gossip/examples/StandAloneNodeCrdtOrSet.java
@@ -24,6 +24,7 @@
 import java.util.Arrays;
 import org.apache.gossip.GossipSettings;
 import org.apache.gossip.RemoteMember;
+import org.apache.gossip.crdt.GrowOnlyCounter;
 import org.apache.gossip.crdt.OrSet;
 import org.apache.gossip.manager.GossipManager;
 import org.apache.gossip.manager.GossipManagerBuilder;
@@ -51,6 +52,9 @@
       System.out.println("---------- " + (gossipService.findCrdt("abc") == null ? "": 
           gossipService.findCrdt("abc").value()));
       System.out.println("********** " + gossipService.findCrdt("abc"));
+      System.out.println("^^^^^^^^^^ " + (gossipService.findCrdt("def") == null ? "": 
+        gossipService.findCrdt("def").value()));
+      System.out.println("$$$$$$$$$$ " + gossipService.findCrdt("def"));
       try {
         Thread.sleep(2000);
       } catch (Exception e) {}
@@ -65,13 +69,31 @@
         String val = line.substring(2);
         if (op == 'a'){
           addData(val, gossipService);
-        } else {
+        } else if (op == 'r') {
           removeData(val, gossipService);
+        } else if (op == 'g'){
+          gcount(val, gossipService);
         }
       }
     }
   }
   
+  private static void gcount(String val, GossipManager gossipManager){
+    GrowOnlyCounter c = (GrowOnlyCounter) gossipManager.findCrdt("def");
+    Long l = Long.valueOf(val);
+    if (c == null){
+      c = new GrowOnlyCounter(new GrowOnlyCounter.Builder(gossipManager).increment((l)));
+    } else {
+      c = new GrowOnlyCounter(c, new GrowOnlyCounter.Builder(gossipManager).increment((l)));
+    }
+    SharedDataMessage m = new SharedDataMessage();
+    m.setExpireAt(Long.MAX_VALUE);
+    m.setKey("def");
+    m.setPayload(c);
+    m.setTimestamp(System.currentTimeMillis());
+    gossipManager.merge(m);
+  }
+  
   private static void removeData(String val, GossipManager gossipService){
     @SuppressWarnings("unchecked")
     OrSet<String> s = (OrSet<String>) gossipService.findCrdt("abc");
diff --git a/src/test/java/org/apache/gossip/DataTest.java b/src/test/java/org/apache/gossip/DataTest.java
index 5ca7be7..f0c2186 100644
--- a/src/test/java/org/apache/gossip/DataTest.java
+++ b/src/test/java/org/apache/gossip/DataTest.java
@@ -115,7 +115,7 @@
     {
       SharedDataMessage d = new SharedDataMessage();
       d.setKey(gCounterKey);
-      d.setPayload(new GrowOnlyCounter(new GrowOnlyCounter.Builder(clients.get(0)).increment(1)));
+      d.setPayload(new GrowOnlyCounter(new GrowOnlyCounter.Builder(clients.get(0)).increment(1L)));
       d.setExpireAt(Long.MAX_VALUE);
       d.setTimestamp(System.currentTimeMillis());
       clients.get(0).merge(d);
@@ -123,7 +123,7 @@
     {
       SharedDataMessage d = new SharedDataMessage();
       d.setKey(gCounterKey);
-      d.setPayload(new GrowOnlyCounter(new GrowOnlyCounter.Builder(clients.get(1)).increment(2)));
+      d.setPayload(new GrowOnlyCounter(new GrowOnlyCounter.Builder(clients.get(1)).increment(2L)));
       d.setExpireAt(Long.MAX_VALUE);
       d.setTimestamp(System.currentTimeMillis());
       clients.get(1).merge(d);
@@ -133,7 +133,7 @@
   private void givenIncreaseOther(final List<GossipManager> clients) {
     GrowOnlyCounter gc = (GrowOnlyCounter) clients.get(1).findCrdt(gCounterKey);
     GrowOnlyCounter gc2 = new GrowOnlyCounter(gc,
-            new GrowOnlyCounter.Builder(clients.get(1)).increment(4));
+            new GrowOnlyCounter.Builder(clients.get(1)).increment(4L));
 
     SharedDataMessage d = new SharedDataMessage();
     d.setKey(gCounterKey);
@@ -195,7 +195,7 @@
   }
   
 
-  private void assertThatCountIsUpdated(final List<GossipManager> clients, int finalCount) {
+  private void assertThatCountIsUpdated(final List<GossipManager> clients, long finalCount) {
     TUnit.assertThat(() -> {
       return clients.get(0).findCrdt(gCounterKey);
     }).afterWaitingAtMost(10, TimeUnit.SECONDS).isEqualTo(new GrowOnlyCounter(
diff --git a/src/test/java/org/apache/gossip/crdt/OrSetTest.java b/src/test/java/org/apache/gossip/crdt/OrSetTest.java
index b3d8af3..b19f221 100644
--- a/src/test/java/org/apache/gossip/crdt/OrSetTest.java
+++ b/src/test/java/org/apache/gossip/crdt/OrSetTest.java
@@ -37,7 +37,7 @@
     OrSet<Integer> i = new OrSet<>(new OrSet.Builder<Integer>().add(4).add(5).add(6).remove(5));
     Assert.assertArrayEquals(Arrays.asList(4, 6).toArray(), i.value().toArray());
   }
-  
+    
   @Test
   public void mergeTest(){
     OrSet<Integer> i = new OrSet<>(new OrSet.Builder<Integer>().add(4).add(5).add(6).remove(5));
