diff --git a/src/rosjava_actionlib/rosjava_actionlib/src/main/java/com/github/ekumen/rosjava_actionlib/ActionClient.java b/src/rosjava_actionlib/rosjava_actionlib/src/main/java/com/github/ekumen/rosjava_actionlib/ActionClient.java
index 0fb4546e00c82c4b4f71fb63c211ff0888ad4d41..2d832e1677e1df2700aa45b1c54318ffa3b42e69 100644
--- a/src/rosjava_actionlib/rosjava_actionlib/src/main/java/com/github/ekumen/rosjava_actionlib/ActionClient.java
+++ b/src/rosjava_actionlib/rosjava_actionlib/src/main/java/com/github/ekumen/rosjava_actionlib/ActionClient.java
@@ -43,6 +43,7 @@ public class ActionClient<T_ACTION_GOAL extends Message,
   T_ACTION_RESULT extends Message> extends DefaultSubscriberListener {
 
   T_ACTION_GOAL actionGoal;
+  ClientGoalManager goalManager;
   String actionGoalType;
   String actionResultType;
   String actionFeedbackType;
@@ -82,6 +83,7 @@ public class ActionClient<T_ACTION_GOAL extends Message,
     this.actionResultType = actionResultType;
     goalIdGenerator = new GoalIDGenerator(node);
     connect(node);
+    goalManager = new ClientGoalManager();
   }
 
   public void attachListener(ActionClientListener target) {
diff --git a/src/rosjava_actionlib/rosjava_actionlib/src/main/java/com/github/ekumen/rosjava_actionlib/ClientGoalManager.java b/src/rosjava_actionlib/rosjava_actionlib/src/main/java/com/github/ekumen/rosjava_actionlib/ClientGoalManager.java
new file mode 100644
index 0000000000000000000000000000000000000000..c8be6c532515acd0e01b321757acc18c3af995dc
--- /dev/null
+++ b/src/rosjava_actionlib/rosjava_actionlib/src/main/java/com/github/ekumen/rosjava_actionlib/ClientGoalManager.java
@@ -0,0 +1,39 @@
+/**
+ * Copyright 2015 Ekumen www.ekumenlabs.com
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.github.ekumen.rosjava_actionlib;
+
+import actionlib_msgs.GoalID;
+import actionlib_msgs.GoalStatus;
+
+/**
+ * Class that binds and action goal with a state machine to track its state.
+ * @author Ernesto Corbellini ecorbellini@ekumenlabs.com
+ */
+public class ClientGoalManager<T_ACTION_GOAL extends Message> {
+  public ActionGoal<T_ACTION_GOAL> actionGoal = null;
+  public ClientStateMachine stateMachine = null;
+
+  public void sendGoal(ActionGoal<T_ACTION_GOAL> ag) {
+    actionGoal = ag;
+    stateMachine = new ClientStateMachine();
+    stateMachine.setState(ClientStateMachine.ClientStates.WAITING_FOR_GOAL_ACK);
+  }
+
+  public boolean cancelGoal() {
+    return stateMachine.cancelGoal();
+  }
+}