diff --git a/message_generation/src/main/java/org/ros/internal/message/GenerateInterfaces.java b/message_generation/src/main/java/org/ros/internal/message/GenerateInterfaces.java
index 4d3b23e2180f7e1e64443e89030faf45731d8dfb..00bff33d1d11ad5a7d3fc6379c83b6e6b60258f2 100644
--- a/message_generation/src/main/java/org/ros/internal/message/GenerateInterfaces.java
+++ b/message_generation/src/main/java/org/ros/internal/message/GenerateInterfaces.java
@@ -24,6 +24,12 @@ import org.ros.exception.RosMessageRuntimeException;
 import org.ros.internal.message.definition.MessageDefinitionProviderChain;
 import org.ros.internal.message.definition.MessageDefinitionTupleParser;
 import org.ros.internal.message.action.ActionDefinitionFileProvider;
+import org.ros.internal.message.action.ActionGenerationTemplateActionGoal;
+import org.ros.internal.message.action.ActionGenerationTemplateActionResult;
+import org.ros.internal.message.action.ActionGenerationTemplateActionFeedback;
+import org.ros.internal.message.action.ActionGenerationTemplateGoal;
+import org.ros.internal.message.action.ActionGenerationTemplateResult;
+import org.ros.internal.message.action.ActionGenerationTemplateFeedback;
 import org.ros.internal.message.service.ServiceDefinitionFileProvider;
 import org.ros.internal.message.topic.TopicDefinitionFileProvider;
 import org.ros.message.MessageDeclaration;
@@ -46,6 +52,15 @@ public class GenerateInterfaces {
   private final ActionDefinitionFileProvider actionDefinitionFileProvider;
   private final MessageDefinitionProviderChain messageDefinitionProviderChain;
   private final MessageFactory messageFactory;
+
+  private final MessageGenerationTemplate actionGenerationTemplateGoal     = new ActionGenerationTemplateGoal();
+  private final MessageGenerationTemplate actionGenerationTemplateResult   = new ActionGenerationTemplateResult();
+  private final MessageGenerationTemplate actionGenerationTemplateFeedback = new ActionGenerationTemplateFeedback();
+
+  private final MessageGenerationTemplate actionGenerationTemplateActionGoal     = new ActionGenerationTemplateActionGoal();
+  private final MessageGenerationTemplate actionGenerationTemplateActionResult   = new ActionGenerationTemplateActionResult();
+  private final MessageGenerationTemplate actionGenerationTemplateActionFeedback = new ActionGenerationTemplateActionFeedback();
+
   static private final String ROS_PACKAGE_PATH = "ROS_PACKAGE_PATH";
 
   public GenerateInterfaces() {
@@ -153,16 +168,39 @@ public class GenerateInterfaces {
       writeInterface(actionDeclaration, outputDirectory, false);
       List<String> goalResultAndFeedback = MessageDefinitionTupleParser.parse(definition, 3);
 
-      MessageDeclaration goalDeclaration =
-              MessageDeclaration.of(actionType.getType() + "Goal", goalResultAndFeedback.get(0));
-      MessageDeclaration resultDeclaration =
-              MessageDeclaration.of(actionType.getType() + "Result", goalResultAndFeedback.get(1));
-      MessageDeclaration feedbackDeclaration =
-              MessageDeclaration.of(actionType.getType() + "Feedback", goalResultAndFeedback.get(2));
+      MessageDeclaration goalDeclaration = MessageDeclaration.of(
+              actionType.getType() + "Goal",
+              actionGenerationTemplateGoal.applyTemplate(goalResultAndFeedback.get(0))
+      );
+      MessageDeclaration resultDeclaration = MessageDeclaration.of(
+              actionType.getType() + "Result",
+              actionGenerationTemplateResult.applyTemplate(goalResultAndFeedback.get(1))
+      );
+      MessageDeclaration feedbackDeclaration = MessageDeclaration.of(
+              actionType.getType() + "Feedback",
+              actionGenerationTemplateFeedback.applyTemplate(goalResultAndFeedback.get(2))
+      );
+
+      MessageDeclaration actionGoalDeclaration = MessageDeclaration.of(
+              actionType.getType() + "ActionGoal",
+              actionGenerationTemplateActionGoal.applyTemplate(actionType.getType())
+      );
+      MessageDeclaration actionResultDeclaration = MessageDeclaration.of(
+              actionType.getType() + "ActionResult",
+              actionGenerationTemplateActionResult.applyTemplate(actionType.getType())
+      );
+      MessageDeclaration actionFeedbackDeclaration = MessageDeclaration.of(
+              actionType.getType() + "ActionFeedback",
+              actionGenerationTemplateActionFeedback.applyTemplate(actionType.getType())
+      );
 
       writeInterface(goalDeclaration, outputDirectory, true);
       writeInterface(resultDeclaration, outputDirectory, true);
       writeInterface(feedbackDeclaration, outputDirectory, true);
+
+      writeInterface(actionGoalDeclaration, outputDirectory, true);
+      writeInterface(actionResultDeclaration, outputDirectory, true);
+      writeInterface(actionFeedbackDeclaration, outputDirectory, true);
     }
   }
 
diff --git a/message_generation/src/main/java/org/ros/internal/message/MessageGenerationTemplate.java b/message_generation/src/main/java/org/ros/internal/message/MessageGenerationTemplate.java
new file mode 100644
index 0000000000000000000000000000000000000000..ba1ed921d80edc7f250bf68eaa9d5c8720ca2d81
--- /dev/null
+++ b/message_generation/src/main/java/org/ros/internal/message/MessageGenerationTemplate.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2012 Google Inc.
+ * 
+ * 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 org.ros.internal.message;
+
+/**
+ * @author arne.peters@tum.de (Arne Peters)
+ */
+public interface MessageGenerationTemplate {
+
+  /**
+   * @return returns this {@link Message} as a {@link RawMessage}
+   */
+  public String applyTemplate(String messageSource);
+}
diff --git a/message_generation/src/main/java/org/ros/internal/message/action/ActionGenerationTemplateActionFeedback.java b/message_generation/src/main/java/org/ros/internal/message/action/ActionGenerationTemplateActionFeedback.java
new file mode 100644
index 0000000000000000000000000000000000000000..239192ed5c9adcfa8544abc9c59c1ed17c59e05e
--- /dev/null
+++ b/message_generation/src/main/java/org/ros/internal/message/action/ActionGenerationTemplateActionFeedback.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2012 Google Inc.
+ * 
+ * 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 org.ros.internal.message.action;
+
+import org.ros.internal.message.MessageGenerationTemplate;
+
+/**
+ * @author arne.peters@tum.de (Arne Peters)
+ */
+public class ActionGenerationTemplateActionFeedback implements MessageGenerationTemplate {
+
+  /**
+   * @return returns this {@link Message} as a {@link RawMessage}
+   */
+  public String applyTemplate(String messageSource) {
+    return "# ====== DO NOT MODIFY! AUTOGENERATED FROM AN ACTION DEFINITION ======\n" +
+           "\n" +
+           "Header header\n" +
+           "actionlib_msgs/GoalStatus status\n" +
+           messageSource + "Feedback feedback";
+  }
+}
diff --git a/message_generation/src/main/java/org/ros/internal/message/action/ActionGenerationTemplateActionGoal.java b/message_generation/src/main/java/org/ros/internal/message/action/ActionGenerationTemplateActionGoal.java
new file mode 100644
index 0000000000000000000000000000000000000000..3ea20a367954e8a929f202740dc24dcc1c6202bf
--- /dev/null
+++ b/message_generation/src/main/java/org/ros/internal/message/action/ActionGenerationTemplateActionGoal.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2012 Google Inc.
+ * 
+ * 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 org.ros.internal.message.action;
+
+import org.ros.internal.message.MessageGenerationTemplate;
+
+/**
+ * @author arne.peters@tum.de (Arne Peters)
+ */
+public class ActionGenerationTemplateActionGoal implements MessageGenerationTemplate {
+
+  /**
+   * @return returns this {@link Message} as a {@link RawMessage}
+   */
+  public String applyTemplate(String messageSource) {
+    return "# ====== DO NOT MODIFY! AUTOGENERATED FROM AN ACTION DEFINITION ======\n" +
+           "\n" +
+           "Header header\n" +
+            "actionlib_msgs/GoalID goal_id\n" +
+           messageSource + "Goal goal";
+  }
+}
diff --git a/message_generation/src/main/java/org/ros/internal/message/action/ActionGenerationTemplateActionResult.java b/message_generation/src/main/java/org/ros/internal/message/action/ActionGenerationTemplateActionResult.java
new file mode 100644
index 0000000000000000000000000000000000000000..0a137b9a60e2f406fa20b3ac88f266db60e7ff99
--- /dev/null
+++ b/message_generation/src/main/java/org/ros/internal/message/action/ActionGenerationTemplateActionResult.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2012 Google Inc.
+ * 
+ * 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 org.ros.internal.message.action;
+
+import org.ros.internal.message.MessageGenerationTemplate;
+
+/**
+ * @author arne.peters@tum.de (Arne Peters)
+ */
+public class ActionGenerationTemplateActionResult implements MessageGenerationTemplate {
+
+  /**
+   * @return returns this {@link Message} as a {@link RawMessage}
+   */
+  public String applyTemplate(String messageSource) {
+    return "# ====== DO NOT MODIFY! AUTOGENERATED FROM AN ACTION DEFINITION ======\n" +
+           "\n" +
+           "Header header\n" +
+           "actionlib_msgs/GoalStatus status\n" +
+           messageSource + "Result result";
+  }
+}
diff --git a/message_generation/src/main/java/org/ros/internal/message/action/ActionGenerationTemplateFeedback.java b/message_generation/src/main/java/org/ros/internal/message/action/ActionGenerationTemplateFeedback.java
new file mode 100644
index 0000000000000000000000000000000000000000..9a466b08ba83c776f6563c041cf1e9673d263444
--- /dev/null
+++ b/message_generation/src/main/java/org/ros/internal/message/action/ActionGenerationTemplateFeedback.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2012 Google Inc.
+ * 
+ * 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 org.ros.internal.message.action;
+
+import org.ros.internal.message.MessageGenerationTemplate;
+
+/**
+ * @author arne.peters@tum.de (Arne Peters)
+ */
+public class ActionGenerationTemplateFeedback implements MessageGenerationTemplate {
+
+  /**
+   * @return returns this {@link Message} as a {@link RawMessage}
+   */
+  public String applyTemplate(String messageSource) {
+    return "# ====== DO NOT MODIFY! AUTOGENERATED FROM AN ACTION DEFINITION ======\n" +
+           "#feedback definition\n" +
+           messageSource;
+  }
+}
diff --git a/message_generation/src/main/java/org/ros/internal/message/action/ActionGenerationTemplateGoal.java b/message_generation/src/main/java/org/ros/internal/message/action/ActionGenerationTemplateGoal.java
new file mode 100644
index 0000000000000000000000000000000000000000..3a085af3c47e2e0d6e6b2f7a8e00a6c0cbb680f1
--- /dev/null
+++ b/message_generation/src/main/java/org/ros/internal/message/action/ActionGenerationTemplateGoal.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2012 Google Inc.
+ * 
+ * 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 org.ros.internal.message.action;
+
+import org.ros.internal.message.MessageGenerationTemplate;
+
+/**
+ * @author arne.peters@tum.de (Arne Peters)
+ */
+public class ActionGenerationTemplateGoal implements MessageGenerationTemplate {
+
+  /**
+   * @return returns this {@link Message} as a {@link RawMessage}
+   */
+  public String applyTemplate(String messageSource) {
+    return "# ====== DO NOT MODIFY! AUTOGENERATED FROM AN ACTION DEFINITION ======\n" +
+           "#goal definition" +
+           messageSource;
+  }
+}
diff --git a/message_generation/src/main/java/org/ros/internal/message/action/ActionGenerationTemplateResult.java b/message_generation/src/main/java/org/ros/internal/message/action/ActionGenerationTemplateResult.java
new file mode 100644
index 0000000000000000000000000000000000000000..234529200f2f6ff7fdfc0e9fee22fb876ccfad47
--- /dev/null
+++ b/message_generation/src/main/java/org/ros/internal/message/action/ActionGenerationTemplateResult.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2012 Google Inc.
+ * 
+ * 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 org.ros.internal.message.action;
+
+import org.ros.internal.message.MessageGenerationTemplate;
+
+/**
+ * @author arne.peters@tum.de (Arne Peters)
+ */
+public class ActionGenerationTemplateResult implements MessageGenerationTemplate {
+
+  /**
+   * @return returns this {@link Message} as a {@link RawMessage}
+   */
+  public String applyTemplate(String messageSource) {
+    return "# ====== DO NOT MODIFY! AUTOGENERATED FROM AN ACTION DEFINITION ======\n" +
+           "#result definition" +
+           messageSource;
+  }
+}