diff --git a/src/rosjava_actionlib/rosjava_actionlib/src/main/java/com/github/ekumen/rosjava_actionlib/TestClient.java b/src/rosjava_actionlib/rosjava_actionlib/src/main/java/com/github/ekumen/rosjava_actionlib/TestClient.java
index 75cf59c74658fc6e146210f5a9554a210e43c578..c599f3b0982cff04a05916b6239417d2c45d53e7 100644
--- a/src/rosjava_actionlib/rosjava_actionlib/src/main/java/com/github/ekumen/rosjava_actionlib/TestClient.java
+++ b/src/rosjava_actionlib/rosjava_actionlib/src/main/java/com/github/ekumen/rosjava_actionlib/TestClient.java
@@ -27,28 +27,44 @@ public class TestClient extends AbstractNodeMain implements ActionClientListener
   @Override
   public void onStart(ConnectedNode node) {
     ac = new ActionClient<FibonacciActionGoal, FibonacciActionFeedback, FibonacciActionResult>(node, "/fibonacci", FibonacciActionGoal._TYPE, FibonacciActionFeedback._TYPE, FibonacciActionResult._TYPE);
+    FibonacciActionGoal goalMessage;
     int repeat = 3;
+    int i;
+    String goalId = "fibonacci_test_";
 
     // Attach listener for the callbacks
     ac.attachListener(this);
 
     // Create Fibonacci goal message
-    FibonacciActionGoal goalMessage = (FibonacciActionGoal)ac.newGoalMessage();
-    FibonacciGoal fibonacciGoal = goalMessage.getGoal();
+    //goalMessage = (FibonacciActionGoal)ac.newGoalMessage();
+    //FibonacciGoal fibonacciGoal = goalMessage.getGoal();
 
     // set Fibonacci parameter
-    fibonacciGoal.setOrder(6);
+    //fibonacciGoal.setOrder(6);
 
-    while (repeat > 0) {
+    for (i = 0; i < repeat; i++) {
       sleep(10000);
-      System.out.println("Sending goal #" + repeat + "...");
-      ac.sendGoal(goalMessage);
+      System.out.println("Sending goal #" + i + "...");
+      goalMessage = (FibonacciActionGoal)ac.newGoalMessage();
+      goalMessage.getGoal().setOrder(i);
+      ac.sendGoal(goalMessage, goalId + i);
       System.out.println("Goal sent.");
-      //while(!resultReceived) sleep(100);
       resultReceived = false;
-      repeat--;
     }
 
+    // send another message and cancel it
+    goalId += i;
+    goalMessage = (FibonacciActionGoal)ac.newGoalMessage();
+    goalMessage.getGoal().setOrder(i);
+    System.out.println("Sending goal ID: " + goalId + "...");
+    ac.sendGoal(goalMessage, goalId);
+    System.out.println("Goal sent.");
+    sleep(2000);
+    System.out.println("Cancelling goal ID: " + goalId);
+    GoalID gid = ac.getGoalId(goalMessage);
+    ac.sendCancel(gid);
+    sleep(10000);
+
     System.exit(0);
   }