diff --git a/java_gen/templates/custom/OFBundleAddMsg.Builder_setData.java b/java_gen/templates/custom/OFBundleAddMsg.Builder_setData.java
new file mode 100644
index 0000000..0a59131
--- /dev/null
+++ b/java_gen/templates/custom/OFBundleAddMsg.Builder_setData.java
@@ -0,0 +1,15 @@
+    /** Custom setter that ensures the BundleAdd message inherits the XID from their
+     *  contained message, as per OF Spec 1.4.0:
+     *  <p>
+     *  7.3.9.6 Adding messages to a bundle
+     *  </p><p>
+     *     Message added in a bundle should have a unique xid to help matching errors to messages,
+     *     and the xid of the bundle add message must be the same.
+     *  </p>
+     */
+    @Override
+    public OFBundleAddMsg.Builder setData(OFMessage data) {
+        this.data = data;
+        this.dataSet = true;
+        return setXid(data.getXid());
+    }
diff --git a/java_gen/templates/custom/OFBundleAddMsgVer14.Builder_setData.java b/java_gen/templates/custom/OFBundleAddMsgVer14.Builder_setData.java
new file mode 100644
index 0000000..638415f
--- /dev/null
+++ b/java_gen/templates/custom/OFBundleAddMsgVer14.Builder_setData.java
@@ -0,0 +1 @@
+//:: include("custom/OFBundleAddMsg.Builder_setData.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowDeleteStrictVer13.Builder_getActions.java b/java_gen/templates/custom/OFFlowAdd.Builder_getActions.java
similarity index 99%
rename from java_gen/templates/custom/OFFlowDeleteStrictVer13.Builder_getActions.java
rename to java_gen/templates/custom/OFFlowAdd.Builder_getActions.java
index ce71981..d4ed242 100644
--- a/java_gen/templates/custom/OFFlowDeleteStrictVer13.Builder_getActions.java
+++ b/java_gen/templates/custom/OFFlowAdd.Builder_getActions.java
@@ -16,4 +16,4 @@
             }
         }
         return Collections.emptyList();
-    }
\ No newline at end of file
+    }
diff --git a/java_gen/templates/custom/OFFlowAdd.Builder_setActions.java b/java_gen/templates/custom/OFFlowAdd.Builder_setActions.java
new file mode 100644
index 0000000..84a77b1
--- /dev/null
+++ b/java_gen/templates/custom/OFFlowAdd.Builder_setActions.java
@@ -0,0 +1,9 @@
+
+    @Override
+    public ${msg.interface.name}.Builder setActions(List<OFAction> actions) throws UnsupportedOperationException {
+        OFInstructionApplyActionsVer${version.dotless_version}.Builder builder = new OFInstructionApplyActionsVer${version.dotless_version}.Builder();
+        builder.setActions(actions);
+        this.instructions = Collections.singletonList((OFInstruction)builder.build());
+        this.instructionsSet = true;
+        return this;
+    }
diff --git a/java_gen/templates/custom/OFFlowAddVer11.Builder_getActions.java b/java_gen/templates/custom/OFFlowAddVer11.Builder_getActions.java
new file mode 100644
index 0000000..8852fad
--- /dev/null
+++ b/java_gen/templates/custom/OFFlowAddVer11.Builder_getActions.java
@@ -0,0 +1 @@
+//:: include("custom/OFFlowAdd.Builder_getActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowAddVer11.Builder_setActions.java b/java_gen/templates/custom/OFFlowAddVer11.Builder_setActions.java
new file mode 100644
index 0000000..89118a0
--- /dev/null
+++ b/java_gen/templates/custom/OFFlowAddVer11.Builder_setActions.java
@@ -0,0 +1 @@
+//:: include("custom/OFFlowAdd.Builder_setActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowAddVer11_getActions.java b/java_gen/templates/custom/OFFlowAddVer11_getActions.java
new file mode 100644
index 0000000..7a6f91f
--- /dev/null
+++ b/java_gen/templates/custom/OFFlowAddVer11_getActions.java
@@ -0,0 +1 @@
+//:: include("custom/OFFlowAdd_getActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowAddVer12.Builder_getActions.java b/java_gen/templates/custom/OFFlowAddVer12.Builder_getActions.java
new file mode 100644
index 0000000..8852fad
--- /dev/null
+++ b/java_gen/templates/custom/OFFlowAddVer12.Builder_getActions.java
@@ -0,0 +1 @@
+//:: include("custom/OFFlowAdd.Builder_getActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowAddVer12.Builder_setActions.java b/java_gen/templates/custom/OFFlowAddVer12.Builder_setActions.java
new file mode 100644
index 0000000..89118a0
--- /dev/null
+++ b/java_gen/templates/custom/OFFlowAddVer12.Builder_setActions.java
@@ -0,0 +1 @@
+//:: include("custom/OFFlowAdd.Builder_setActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowAddVer12_getActions.java b/java_gen/templates/custom/OFFlowAddVer12_getActions.java
new file mode 100644
index 0000000..7a6f91f
--- /dev/null
+++ b/java_gen/templates/custom/OFFlowAddVer12_getActions.java
@@ -0,0 +1 @@
+//:: include("custom/OFFlowAdd_getActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowAddVer13.Builder_getActions.java b/java_gen/templates/custom/OFFlowAddVer13.Builder_getActions.java
index ce71981..8852fad 100644
--- a/java_gen/templates/custom/OFFlowAddVer13.Builder_getActions.java
+++ b/java_gen/templates/custom/OFFlowAddVer13.Builder_getActions.java
@@ -1,19 +1 @@
-
-    @Override
-    public List<OFAction> getActions()throws UnsupportedOperationException {
-//:: if builder:
-        if (!this.instructionsSet)
-//:: if has_parent:
-            return parentMessage.getActions();
-//:: else:
-            return Collections.emptyList();
-//:: #endif
-//:: #endif
-        for (OFInstruction inst : this.instructions) {
-            if (inst instanceof OFInstructionApplyActions) {
-                OFInstructionApplyActions iap = (OFInstructionApplyActions)inst;
-                return iap.getActions();
-            }
-        }
-        return Collections.emptyList();
-    }
\ No newline at end of file
+//:: include("custom/OFFlowAdd.Builder_getActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowAddVer13.Builder_setActions.java b/java_gen/templates/custom/OFFlowAddVer13.Builder_setActions.java
index 725de24..89118a0 100644
--- a/java_gen/templates/custom/OFFlowAddVer13.Builder_setActions.java
+++ b/java_gen/templates/custom/OFFlowAddVer13.Builder_setActions.java
@@ -1,9 +1 @@
-
-    @Override
-    public OFFlowAdd.Builder setActions(List<OFAction> actions) throws UnsupportedOperationException {
-        OFInstructionApplyActionsVer13.Builder builder = new OFInstructionApplyActionsVer13.Builder();
-        builder.setActions(actions);
-        this.instructions = Collections.singletonList((OFInstruction)builder.build());
-        this.instructionsSet = true;
-        return this;
-    }
\ No newline at end of file
+//:: include("custom/OFFlowAdd.Builder_setActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowAddVer13_getActions.java b/java_gen/templates/custom/OFFlowAddVer13_getActions.java
index eb7799a..7a6f91f 100644
--- a/java_gen/templates/custom/OFFlowAddVer13_getActions.java
+++ b/java_gen/templates/custom/OFFlowAddVer13_getActions.java
@@ -1,11 +1 @@
-
-    @Override
-    public List<OFAction> getActions()throws UnsupportedOperationException {
-        for (OFInstruction inst : this.instructions) {
-            if (inst instanceof OFInstructionApplyActions) {
-                OFInstructionApplyActions iap = (OFInstructionApplyActions)inst;
-                return iap.getActions();
-            }
-        }
-        return Collections.emptyList();
-    }
\ No newline at end of file
+//:: include("custom/OFFlowAdd_getActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowAddVer14.Builder_getActions.java b/java_gen/templates/custom/OFFlowAddVer14.Builder_getActions.java
new file mode 100644
index 0000000..8852fad
--- /dev/null
+++ b/java_gen/templates/custom/OFFlowAddVer14.Builder_getActions.java
@@ -0,0 +1 @@
+//:: include("custom/OFFlowAdd.Builder_getActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowAddVer14.Builder_setActions.java b/java_gen/templates/custom/OFFlowAddVer14.Builder_setActions.java
new file mode 100644
index 0000000..89118a0
--- /dev/null
+++ b/java_gen/templates/custom/OFFlowAddVer14.Builder_setActions.java
@@ -0,0 +1 @@
+//:: include("custom/OFFlowAdd.Builder_setActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowAddVer14_getActions.java b/java_gen/templates/custom/OFFlowAddVer14_getActions.java
new file mode 100644
index 0000000..7a6f91f
--- /dev/null
+++ b/java_gen/templates/custom/OFFlowAddVer14_getActions.java
@@ -0,0 +1 @@
+//:: include("custom/OFFlowAdd_getActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowAddVer15.Builder_getActions.java b/java_gen/templates/custom/OFFlowAddVer15.Builder_getActions.java
new file mode 100644
index 0000000..8852fad
--- /dev/null
+++ b/java_gen/templates/custom/OFFlowAddVer15.Builder_getActions.java
@@ -0,0 +1 @@
+//:: include("custom/OFFlowAdd.Builder_getActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowAddVer15.Builder_setActions.java b/java_gen/templates/custom/OFFlowAddVer15.Builder_setActions.java
new file mode 100644
index 0000000..89118a0
--- /dev/null
+++ b/java_gen/templates/custom/OFFlowAddVer15.Builder_setActions.java
@@ -0,0 +1 @@
+//:: include("custom/OFFlowAdd.Builder_setActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowAddVer15_getActions.java b/java_gen/templates/custom/OFFlowAddVer15_getActions.java
new file mode 100644
index 0000000..7a6f91f
--- /dev/null
+++ b/java_gen/templates/custom/OFFlowAddVer15_getActions.java
@@ -0,0 +1 @@
+//:: include("custom/OFFlowAdd_getActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowDeleteStrictVer13_getActions.java b/java_gen/templates/custom/OFFlowAdd_getActions.java
similarity index 99%
rename from java_gen/templates/custom/OFFlowDeleteStrictVer13_getActions.java
rename to java_gen/templates/custom/OFFlowAdd_getActions.java
index eb7799a..c128a68 100644
--- a/java_gen/templates/custom/OFFlowDeleteStrictVer13_getActions.java
+++ b/java_gen/templates/custom/OFFlowAdd_getActions.java
@@ -8,4 +8,4 @@
             }
         }
         return Collections.emptyList();
-    }
\ No newline at end of file
+    }
diff --git a/java_gen/templates/custom/OFFlowDeleteStrictVer13.Builder_setActions.java b/java_gen/templates/custom/OFFlowDeleteStrictVer13.Builder_setActions.java
deleted file mode 100644
index b2dafe5..0000000
--- a/java_gen/templates/custom/OFFlowDeleteStrictVer13.Builder_setActions.java
+++ /dev/null
@@ -1,9 +0,0 @@
-
-    @Override
-    public OFFlowDeleteStrict.Builder setActions(List<OFAction> actions) throws UnsupportedOperationException {
-        OFInstructionApplyActionsVer13.Builder builder = new OFInstructionApplyActionsVer13.Builder();
-        builder.setActions(actions);
-        this.instructions = Collections.singletonList((OFInstruction)builder.build());
-        this.instructionsSet = true;
-        return this;
-    }
\ No newline at end of file
diff --git a/java_gen/templates/custom/OFFlowDeleteVer13.Builder_getActions.java b/java_gen/templates/custom/OFFlowDeleteVer13.Builder_getActions.java
deleted file mode 100644
index ce71981..0000000
--- a/java_gen/templates/custom/OFFlowDeleteVer13.Builder_getActions.java
+++ /dev/null
@@ -1,19 +0,0 @@
-
-    @Override
-    public List<OFAction> getActions()throws UnsupportedOperationException {
-//:: if builder:
-        if (!this.instructionsSet)
-//:: if has_parent:
-            return parentMessage.getActions();
-//:: else:
-            return Collections.emptyList();
-//:: #endif
-//:: #endif
-        for (OFInstruction inst : this.instructions) {
-            if (inst instanceof OFInstructionApplyActions) {
-                OFInstructionApplyActions iap = (OFInstructionApplyActions)inst;
-                return iap.getActions();
-            }
-        }
-        return Collections.emptyList();
-    }
\ No newline at end of file
diff --git a/java_gen/templates/custom/OFFlowDeleteVer13.Builder_setActions.java b/java_gen/templates/custom/OFFlowDeleteVer13.Builder_setActions.java
deleted file mode 100644
index 5576aaa..0000000
--- a/java_gen/templates/custom/OFFlowDeleteVer13.Builder_setActions.java
+++ /dev/null
@@ -1,9 +0,0 @@
-
-    @Override
-    public OFFlowDelete.Builder setActions(List<OFAction> actions) throws UnsupportedOperationException {
-        OFInstructionApplyActionsVer13.Builder builder = new OFInstructionApplyActionsVer13.Builder();
-        builder.setActions(actions);
-        this.instructions = Collections.singletonList((OFInstruction)builder.build());
-        this.instructionsSet = true;
-        return this;
-    }
\ No newline at end of file
diff --git a/java_gen/templates/custom/OFFlowDeleteVer13_getActions.java b/java_gen/templates/custom/OFFlowDeleteVer13_getActions.java
deleted file mode 100644
index eb7799a..0000000
--- a/java_gen/templates/custom/OFFlowDeleteVer13_getActions.java
+++ /dev/null
@@ -1,11 +0,0 @@
-
-    @Override
-    public List<OFAction> getActions()throws UnsupportedOperationException {
-        for (OFInstruction inst : this.instructions) {
-            if (inst instanceof OFInstructionApplyActions) {
-                OFInstructionApplyActions iap = (OFInstructionApplyActions)inst;
-                return iap.getActions();
-            }
-        }
-        return Collections.emptyList();
-    }
\ No newline at end of file
diff --git a/java_gen/templates/custom/OFFlowModify.Builder_getActions.java b/java_gen/templates/custom/OFFlowModify.Builder_getActions.java
new file mode 100644
index 0000000..8852fad
--- /dev/null
+++ b/java_gen/templates/custom/OFFlowModify.Builder_getActions.java
@@ -0,0 +1 @@
+//:: include("custom/OFFlowAdd.Builder_getActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowModify.Builder_setActions.java b/java_gen/templates/custom/OFFlowModify.Builder_setActions.java
new file mode 100644
index 0000000..89118a0
--- /dev/null
+++ b/java_gen/templates/custom/OFFlowModify.Builder_setActions.java
@@ -0,0 +1 @@
+//:: include("custom/OFFlowAdd.Builder_setActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowModifyStrict.Builder_getActions.java b/java_gen/templates/custom/OFFlowModifyStrict.Builder_getActions.java
new file mode 100644
index 0000000..8852fad
--- /dev/null
+++ b/java_gen/templates/custom/OFFlowModifyStrict.Builder_getActions.java
@@ -0,0 +1 @@
+//:: include("custom/OFFlowAdd.Builder_getActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowModifyStrict.Builder_setActions.java b/java_gen/templates/custom/OFFlowModifyStrict.Builder_setActions.java
new file mode 100644
index 0000000..89118a0
--- /dev/null
+++ b/java_gen/templates/custom/OFFlowModifyStrict.Builder_setActions.java
@@ -0,0 +1 @@
+//:: include("custom/OFFlowAdd.Builder_setActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowModifyStrictVer11.Builder_getActions.java b/java_gen/templates/custom/OFFlowModifyStrictVer11.Builder_getActions.java
new file mode 100644
index 0000000..0c6581a
--- /dev/null
+++ b/java_gen/templates/custom/OFFlowModifyStrictVer11.Builder_getActions.java
@@ -0,0 +1 @@
+//:: include("custom/OFFlowModifyStrict.Builder_getActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowModifyStrictVer11.Builder_setActions.java b/java_gen/templates/custom/OFFlowModifyStrictVer11.Builder_setActions.java
new file mode 100644
index 0000000..e1f198a
--- /dev/null
+++ b/java_gen/templates/custom/OFFlowModifyStrictVer11.Builder_setActions.java
@@ -0,0 +1 @@
+//:: include("custom/OFFlowModifyStrict.Builder_setActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowModifyStrictVer11_getActions.java b/java_gen/templates/custom/OFFlowModifyStrictVer11_getActions.java
new file mode 100644
index 0000000..a81bd15
--- /dev/null
+++ b/java_gen/templates/custom/OFFlowModifyStrictVer11_getActions.java
@@ -0,0 +1 @@
+//:: include("custom/OFFlowModifyStrict_getActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowModifyStrictVer12.Builder_getActions.java b/java_gen/templates/custom/OFFlowModifyStrictVer12.Builder_getActions.java
new file mode 100644
index 0000000..0c6581a
--- /dev/null
+++ b/java_gen/templates/custom/OFFlowModifyStrictVer12.Builder_getActions.java
@@ -0,0 +1 @@
+//:: include("custom/OFFlowModifyStrict.Builder_getActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowModifyStrictVer12.Builder_setActions.java b/java_gen/templates/custom/OFFlowModifyStrictVer12.Builder_setActions.java
new file mode 100644
index 0000000..e1f198a
--- /dev/null
+++ b/java_gen/templates/custom/OFFlowModifyStrictVer12.Builder_setActions.java
@@ -0,0 +1 @@
+//:: include("custom/OFFlowModifyStrict.Builder_setActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowModifyStrictVer12_getActions.java b/java_gen/templates/custom/OFFlowModifyStrictVer12_getActions.java
new file mode 100644
index 0000000..a81bd15
--- /dev/null
+++ b/java_gen/templates/custom/OFFlowModifyStrictVer12_getActions.java
@@ -0,0 +1 @@
+//:: include("custom/OFFlowModifyStrict_getActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowModifyStrictVer13.Builder_getActions.java b/java_gen/templates/custom/OFFlowModifyStrictVer13.Builder_getActions.java
index ce71981..0c6581a 100644
--- a/java_gen/templates/custom/OFFlowModifyStrictVer13.Builder_getActions.java
+++ b/java_gen/templates/custom/OFFlowModifyStrictVer13.Builder_getActions.java
@@ -1,19 +1 @@
-
-    @Override
-    public List<OFAction> getActions()throws UnsupportedOperationException {
-//:: if builder:
-        if (!this.instructionsSet)
-//:: if has_parent:
-            return parentMessage.getActions();
-//:: else:
-            return Collections.emptyList();
-//:: #endif
-//:: #endif
-        for (OFInstruction inst : this.instructions) {
-            if (inst instanceof OFInstructionApplyActions) {
-                OFInstructionApplyActions iap = (OFInstructionApplyActions)inst;
-                return iap.getActions();
-            }
-        }
-        return Collections.emptyList();
-    }
\ No newline at end of file
+//:: include("custom/OFFlowModifyStrict.Builder_getActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowModifyStrictVer13.Builder_setActions.java b/java_gen/templates/custom/OFFlowModifyStrictVer13.Builder_setActions.java
index fc04079..e1f198a 100644
--- a/java_gen/templates/custom/OFFlowModifyStrictVer13.Builder_setActions.java
+++ b/java_gen/templates/custom/OFFlowModifyStrictVer13.Builder_setActions.java
@@ -1,9 +1 @@
-
-    @Override
-    public OFFlowModifyStrict.Builder setActions(List<OFAction> actions) throws UnsupportedOperationException {
-        OFInstructionApplyActionsVer13.Builder builder = new OFInstructionApplyActionsVer13.Builder();
-        builder.setActions(actions);
-        this.instructions = Collections.singletonList((OFInstruction)builder.build());
-        this.instructionsSet = true;
-        return this;
-    }
\ No newline at end of file
+//:: include("custom/OFFlowModifyStrict.Builder_setActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowModifyStrictVer13_getActions.java b/java_gen/templates/custom/OFFlowModifyStrictVer13_getActions.java
index eb7799a..a81bd15 100644
--- a/java_gen/templates/custom/OFFlowModifyStrictVer13_getActions.java
+++ b/java_gen/templates/custom/OFFlowModifyStrictVer13_getActions.java
@@ -1,11 +1 @@
-
-    @Override
-    public List<OFAction> getActions()throws UnsupportedOperationException {
-        for (OFInstruction inst : this.instructions) {
-            if (inst instanceof OFInstructionApplyActions) {
-                OFInstructionApplyActions iap = (OFInstructionApplyActions)inst;
-                return iap.getActions();
-            }
-        }
-        return Collections.emptyList();
-    }
\ No newline at end of file
+//:: include("custom/OFFlowModifyStrict_getActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowModifyStrictVer14.Builder_getActions.java b/java_gen/templates/custom/OFFlowModifyStrictVer14.Builder_getActions.java
new file mode 100644
index 0000000..0c6581a
--- /dev/null
+++ b/java_gen/templates/custom/OFFlowModifyStrictVer14.Builder_getActions.java
@@ -0,0 +1 @@
+//:: include("custom/OFFlowModifyStrict.Builder_getActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowModifyStrictVer14.Builder_setActions.java b/java_gen/templates/custom/OFFlowModifyStrictVer14.Builder_setActions.java
new file mode 100644
index 0000000..e1f198a
--- /dev/null
+++ b/java_gen/templates/custom/OFFlowModifyStrictVer14.Builder_setActions.java
@@ -0,0 +1 @@
+//:: include("custom/OFFlowModifyStrict.Builder_setActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowModifyStrictVer14_getActions.java b/java_gen/templates/custom/OFFlowModifyStrictVer14_getActions.java
new file mode 100644
index 0000000..a81bd15
--- /dev/null
+++ b/java_gen/templates/custom/OFFlowModifyStrictVer14_getActions.java
@@ -0,0 +1 @@
+//:: include("custom/OFFlowModifyStrict_getActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowModifyStrictVer15.Builder_getActions.java b/java_gen/templates/custom/OFFlowModifyStrictVer15.Builder_getActions.java
new file mode 100644
index 0000000..0c6581a
--- /dev/null
+++ b/java_gen/templates/custom/OFFlowModifyStrictVer15.Builder_getActions.java
@@ -0,0 +1 @@
+//:: include("custom/OFFlowModifyStrict.Builder_getActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowModifyStrictVer15.Builder_setActions.java b/java_gen/templates/custom/OFFlowModifyStrictVer15.Builder_setActions.java
new file mode 100644
index 0000000..e1f198a
--- /dev/null
+++ b/java_gen/templates/custom/OFFlowModifyStrictVer15.Builder_setActions.java
@@ -0,0 +1 @@
+//:: include("custom/OFFlowModifyStrict.Builder_setActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowModifyStrictVer15_getActions.java b/java_gen/templates/custom/OFFlowModifyStrictVer15_getActions.java
new file mode 100644
index 0000000..a81bd15
--- /dev/null
+++ b/java_gen/templates/custom/OFFlowModifyStrictVer15_getActions.java
@@ -0,0 +1 @@
+//:: include("custom/OFFlowModifyStrict_getActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowModifyStrict_getActions.java b/java_gen/templates/custom/OFFlowModifyStrict_getActions.java
new file mode 100644
index 0000000..7a6f91f
--- /dev/null
+++ b/java_gen/templates/custom/OFFlowModifyStrict_getActions.java
@@ -0,0 +1 @@
+//:: include("custom/OFFlowAdd_getActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowModifyVer11.Builder_getActions.java b/java_gen/templates/custom/OFFlowModifyVer11.Builder_getActions.java
new file mode 100644
index 0000000..ded35c2
--- /dev/null
+++ b/java_gen/templates/custom/OFFlowModifyVer11.Builder_getActions.java
@@ -0,0 +1 @@
+//:: include("custom/OFFlowModify.Builder_getActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowModifyVer11.Builder_setActions.java b/java_gen/templates/custom/OFFlowModifyVer11.Builder_setActions.java
new file mode 100644
index 0000000..4942a15
--- /dev/null
+++ b/java_gen/templates/custom/OFFlowModifyVer11.Builder_setActions.java
@@ -0,0 +1 @@
+//:: include("custom/OFFlowModify.Builder_setActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowModifyVer11_getActions.java b/java_gen/templates/custom/OFFlowModifyVer11_getActions.java
new file mode 100644
index 0000000..2432665
--- /dev/null
+++ b/java_gen/templates/custom/OFFlowModifyVer11_getActions.java
@@ -0,0 +1 @@
+//:: include("custom/OFFlowModify_getActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowModifyVer12.Builder_getActions.java b/java_gen/templates/custom/OFFlowModifyVer12.Builder_getActions.java
new file mode 100644
index 0000000..ded35c2
--- /dev/null
+++ b/java_gen/templates/custom/OFFlowModifyVer12.Builder_getActions.java
@@ -0,0 +1 @@
+//:: include("custom/OFFlowModify.Builder_getActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowModifyVer12.Builder_setActions.java b/java_gen/templates/custom/OFFlowModifyVer12.Builder_setActions.java
new file mode 100644
index 0000000..4942a15
--- /dev/null
+++ b/java_gen/templates/custom/OFFlowModifyVer12.Builder_setActions.java
@@ -0,0 +1 @@
+//:: include("custom/OFFlowModify.Builder_setActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowModifyVer12_getActions.java b/java_gen/templates/custom/OFFlowModifyVer12_getActions.java
new file mode 100644
index 0000000..2432665
--- /dev/null
+++ b/java_gen/templates/custom/OFFlowModifyVer12_getActions.java
@@ -0,0 +1 @@
+//:: include("custom/OFFlowModify_getActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowModifyVer13.Builder_getActions.java b/java_gen/templates/custom/OFFlowModifyVer13.Builder_getActions.java
index ce71981..ded35c2 100644
--- a/java_gen/templates/custom/OFFlowModifyVer13.Builder_getActions.java
+++ b/java_gen/templates/custom/OFFlowModifyVer13.Builder_getActions.java
@@ -1,19 +1 @@
-
-    @Override
-    public List<OFAction> getActions()throws UnsupportedOperationException {
-//:: if builder:
-        if (!this.instructionsSet)
-//:: if has_parent:
-            return parentMessage.getActions();
-//:: else:
-            return Collections.emptyList();
-//:: #endif
-//:: #endif
-        for (OFInstruction inst : this.instructions) {
-            if (inst instanceof OFInstructionApplyActions) {
-                OFInstructionApplyActions iap = (OFInstructionApplyActions)inst;
-                return iap.getActions();
-            }
-        }
-        return Collections.emptyList();
-    }
\ No newline at end of file
+//:: include("custom/OFFlowModify.Builder_getActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowModifyVer13.Builder_setActions.java b/java_gen/templates/custom/OFFlowModifyVer13.Builder_setActions.java
index 695b771..4942a15 100644
--- a/java_gen/templates/custom/OFFlowModifyVer13.Builder_setActions.java
+++ b/java_gen/templates/custom/OFFlowModifyVer13.Builder_setActions.java
@@ -1,9 +1 @@
-
-    @Override
-    public OFFlowModify.Builder setActions(List<OFAction> actions) throws UnsupportedOperationException {
-        OFInstructionApplyActionsVer13.Builder builder = new OFInstructionApplyActionsVer13.Builder();
-        builder.setActions(actions);
-        this.instructions = Collections.singletonList((OFInstruction)builder.build());
-        this.instructionsSet = true;
-        return this;
-    }
\ No newline at end of file
+//:: include("custom/OFFlowModify.Builder_setActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowModifyVer13_getActions.java b/java_gen/templates/custom/OFFlowModifyVer13_getActions.java
index eb7799a..2432665 100644
--- a/java_gen/templates/custom/OFFlowModifyVer13_getActions.java
+++ b/java_gen/templates/custom/OFFlowModifyVer13_getActions.java
@@ -1,11 +1 @@
-
-    @Override
-    public List<OFAction> getActions()throws UnsupportedOperationException {
-        for (OFInstruction inst : this.instructions) {
-            if (inst instanceof OFInstructionApplyActions) {
-                OFInstructionApplyActions iap = (OFInstructionApplyActions)inst;
-                return iap.getActions();
-            }
-        }
-        return Collections.emptyList();
-    }
\ No newline at end of file
+//:: include("custom/OFFlowModify_getActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowModifyVer14.Builder_getActions.java b/java_gen/templates/custom/OFFlowModifyVer14.Builder_getActions.java
new file mode 100644
index 0000000..ded35c2
--- /dev/null
+++ b/java_gen/templates/custom/OFFlowModifyVer14.Builder_getActions.java
@@ -0,0 +1 @@
+//:: include("custom/OFFlowModify.Builder_getActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowModifyVer14.Builder_setActions.java b/java_gen/templates/custom/OFFlowModifyVer14.Builder_setActions.java
new file mode 100644
index 0000000..4942a15
--- /dev/null
+++ b/java_gen/templates/custom/OFFlowModifyVer14.Builder_setActions.java
@@ -0,0 +1 @@
+//:: include("custom/OFFlowModify.Builder_setActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowModifyVer14_getActions.java b/java_gen/templates/custom/OFFlowModifyVer14_getActions.java
new file mode 100644
index 0000000..2432665
--- /dev/null
+++ b/java_gen/templates/custom/OFFlowModifyVer14_getActions.java
@@ -0,0 +1 @@
+//:: include("custom/OFFlowModify_getActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowModifyVer15.Builder_getActions.java b/java_gen/templates/custom/OFFlowModifyVer15.Builder_getActions.java
new file mode 100644
index 0000000..ded35c2
--- /dev/null
+++ b/java_gen/templates/custom/OFFlowModifyVer15.Builder_getActions.java
@@ -0,0 +1 @@
+//:: include("custom/OFFlowModify.Builder_getActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowModifyVer15.Builder_setActions.java b/java_gen/templates/custom/OFFlowModifyVer15.Builder_setActions.java
new file mode 100644
index 0000000..4942a15
--- /dev/null
+++ b/java_gen/templates/custom/OFFlowModifyVer15.Builder_setActions.java
@@ -0,0 +1 @@
+//:: include("custom/OFFlowModify.Builder_setActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowModifyVer15_getActions.java b/java_gen/templates/custom/OFFlowModifyVer15_getActions.java
new file mode 100644
index 0000000..2432665
--- /dev/null
+++ b/java_gen/templates/custom/OFFlowModifyVer15_getActions.java
@@ -0,0 +1 @@
+//:: include("custom/OFFlowModify_getActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFFlowModify_getActions.java b/java_gen/templates/custom/OFFlowModify_getActions.java
new file mode 100644
index 0000000..7a6f91f
--- /dev/null
+++ b/java_gen/templates/custom/OFFlowModify_getActions.java
@@ -0,0 +1 @@
+//:: include("custom/OFFlowAdd_getActions.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFGroupInsertBucketVer15.Builder.java b/java_gen/templates/custom/OFGroupInsertBucketVer15.Builder.java
new file mode 100644
index 0000000..194c458
--- /dev/null
+++ b/java_gen/templates/custom/OFGroupInsertBucketVer15.Builder.java
@@ -0,0 +1,19 @@
+
+    public List<OFBucket> insertBucketBasedOnCommandBucketId(OFBucket bucket) {
+        if(commandBucketId == null)
+            throw new IllegalStateException("CommandBucketId is null");
+        if(commandBucketId.equals(OFGroupBucket.BUCKET_FIRST))
+            buckets.add(0, bucket);
+        else if(commandBucketId.equals(OFGroupBucket.BUCKET_LAST))
+            buckets.add(buckets.size(), bucket);
+        return buckets;
+    }
+
+
+    public List<OFBucket> insertBucketBasedOnSpecificIndex(OFBucket bucket, int index) {
+        if(index <= buckets.size())
+            buckets.add(index,bucket);
+        else
+            throw new IllegalStateException("Index is not valid");
+        return buckets;
+    }
\ No newline at end of file
diff --git a/java_gen/templates/custom/OFGroupRemoveBucketVer15.Builder.java b/java_gen/templates/custom/OFGroupRemoveBucketVer15.Builder.java
new file mode 100644
index 0000000..07ecadc
--- /dev/null
+++ b/java_gen/templates/custom/OFGroupRemoveBucketVer15.Builder.java
@@ -0,0 +1,21 @@
+
+    public List<OFBucket> removeBucketBasedOnCommandBucketId() {
+        if(commandBucketId == null)
+            throw new IllegalStateException("CommandBucketId is null");
+        if(commandBucketId.equals(OFGroupBucket.BUCKET_FIRST))
+            buckets.remove(0);
+        else if(commandBucketId.equals(OFGroupBucket.BUCKET_LAST))
+            buckets.remove(buckets.size()-1);
+        else if(commandBucketId.equals(OFGroupBucket.BUCKET_ALL))
+            buckets.removeAll(buckets);
+        return buckets;
+    }
+
+
+    public List<OFBucket> removeBucketBasedOnSpecificIndex(int index) {
+        if(index <= buckets.size())
+            buckets.remove(index);
+        else
+            throw new IllegalStateException("Index is not valid");
+        return buckets;
+    }
diff --git a/java_gen/templates/custom/OFMatchV1Ver10.Builder.java b/java_gen/templates/custom/OFMatchV1Ver10.Builder.java
index c4cb6bc..b8797fe 100644
--- a/java_gen/templates/custom/OFMatchV1Ver10.Builder.java
+++ b/java_gen/templates/custom/OFMatchV1Ver10.Builder.java
@@ -64,11 +64,11 @@
                 case SCTP_DST:
                     result = tcpDst;
                     break;
-                case ICMPV4_TYPE:
-                    result = tcpSrc;
+               case ICMPV4_TYPE:
+                    result = ICMPv4Type.of((short) tcpSrc.getPort());
                     break;
-                case ICMPV4_CODE:
-                    result = tcpDst;
+               case ICMPV4_CODE:
+                    result = ICMPv4Code.of((short) tcpDst.getPort());
                     break;
                 // NOT SUPPORTED:
                 default:
diff --git a/java_gen/templates/custom/OFMatchV1Ver10.java b/java_gen/templates/custom/OFMatchV1Ver10.java
index 8a24b2f..bb57596 100644
--- a/java_gen/templates/custom/OFMatchV1Ver10.java
+++ b/java_gen/templates/custom/OFMatchV1Ver10.java
@@ -101,10 +101,10 @@
                 result = tcpDst;
                 break;
             case ICMPV4_TYPE:
-                result = tcpSrc;
+                result = ICMPv4Type.of((short) tcpSrc.getPort());
                 break;
             case ICMPV4_CODE:
-                result = tcpDst;
+                result = ICMPv4Code.of((short) tcpDst.getPort());
                 break;
             // NOT SUPPORTED:
             default:
@@ -365,6 +365,8 @@
                 builder.add(MatchField.TCP_SRC);
             } else if (ipProto == IpProtocol.SCTP) {
                 builder.add(MatchField.SCTP_SRC);
+            } else if (ipProto == IpProtocol.ICMP) {
+                builder.add(MatchField.ICMPV4_TYPE);
             } else {
                 throw new UnsupportedOperationException(
                         "Unsupported IP protocol for matching on source port " + ipProto);
@@ -377,6 +379,8 @@
                 builder.add(MatchField.TCP_DST);
             } else if (ipProto == IpProtocol.SCTP) {
                 builder.add(MatchField.SCTP_DST);
+            } else if (ipProto == IpProtocol.ICMP) {
+                builder.add(MatchField.ICMPV4_CODE);
             } else {
                 throw new UnsupportedOperationException(
                         "Unsupported IP protocol for matching on destination port " + ipProto);
diff --git a/java_gen/templates/custom/OFMatchV3.java b/java_gen/templates/custom/OFMatchV3.java
index 799135c..bc97ca2 100644
--- a/java_gen/templates/custom/OFMatchV3.java
+++ b/java_gen/templates/custom/OFMatchV3.java
@@ -58,6 +58,9 @@
         if (!supports(field))
             throw new UnsupportedOperationException("${msg.name} does not support matching on field " + field.getName());
 
+        if(!field.arePrerequisitesOK(this))
+            return false;
+
         OFOxm<?> oxm = this.oxmList.get(field);
 
         return oxm != null && !oxm.isMasked();
@@ -67,6 +70,8 @@
     public boolean isFullyWildcarded(MatchField<?> field) {
         if (!supports(field))
             throw new UnsupportedOperationException("${msg.name} does not support matching on field " + field.getName());
+        if(!field.arePrerequisitesOK(this))
+            return true;
 
         OFOxm<?> oxm = this.oxmList.get(field);
 
@@ -77,6 +82,8 @@
     public boolean isPartiallyMasked(MatchField<?> field) {
         if (!supports(field))
             throw new UnsupportedOperationException("${msg.name} does not support matching on field " + field.getName());
+        if(!field.arePrerequisitesOK(this))
+            return false;
 
         OFOxm<?> oxm = this.oxmList.get(field);
 
diff --git a/java_gen/templates/custom/OFMatchV3Ver15.Builder.java b/java_gen/templates/custom/OFMatchV3Ver15.Builder.java
new file mode 100644
index 0000000..ae2ecaa
--- /dev/null
+++ b/java_gen/templates/custom/OFMatchV3Ver15.Builder.java
@@ -0,0 +1 @@
+//:: include("custom/OFMatchV3.Builder.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFMatchV3Ver15.java b/java_gen/templates/custom/OFMatchV3Ver15.java
new file mode 100644
index 0000000..225b0dc
--- /dev/null
+++ b/java_gen/templates/custom/OFMatchV3Ver15.java
@@ -0,0 +1 @@
+//:: include("custom/OFMatchV3.java", msg=msg, has_parent=False)
diff --git a/java_gen/templates/custom/OFMatchV3Ver15_toString.java b/java_gen/templates/custom/OFMatchV3Ver15_toString.java
new file mode 100644
index 0000000..3b2783b
--- /dev/null
+++ b/java_gen/templates/custom/OFMatchV3Ver15_toString.java
@@ -0,0 +1 @@
+//:: include("custom/OFMatch_toString.java", msg=msg, has_parent=False)
diff --git a/java_gen/templates/custom/OFOxs_getCanonical.java b/java_gen/templates/custom/OFOxs_getCanonical.java
new file mode 100644
index 0000000..f656faa
--- /dev/null
+++ b/java_gen/templates/custom/OFOxs_getCanonical.java
@@ -0,0 +1 @@
+//:: include("custom/OFOxm_getCanonical.java", msg=msg, version=version, has_parent=False)
diff --git a/java_gen/templates/custom/OFPortDesc.java b/java_gen/templates/custom/OFPortDesc.java
index ccfbedb..a2f05cf 100644
--- a/java_gen/templates/custom/OFPortDesc.java
+++ b/java_gen/templates/custom/OFPortDesc.java
@@ -13,7 +13,7 @@
      * Returns the current generation ID of this port.
      *
      * The generationId is reported by the switch as a @{link OFPortDescProp} in
-     * @link{OFPortDescStatsReply} and @link{OFPortStatus} messages. If the
+     * {@link OFPortDescStatsReply} and {@link OFPortStatus} messages. If the
      * current OFPortDesc does not contain a generation Id, returns U64.ZERO;
      *
      * For OpenFlow versions earlier than 1.4, always returns U64.ZERO;
diff --git a/java_gen/templates/custom/OFPortDescVer15.java b/java_gen/templates/custom/OFPortDescVer15.java
new file mode 100644
index 0000000..782a726
--- /dev/null
+++ b/java_gen/templates/custom/OFPortDescVer15.java
@@ -0,0 +1 @@
+//:: include("custom/OFPortDesc.java", msg=msg, has_parent=False)
\ No newline at end of file
diff --git a/java_gen/templates/custom/OFStatV6.Builder.java b/java_gen/templates/custom/OFStatV6.Builder.java
new file mode 100644
index 0000000..3b19031
--- /dev/null
+++ b/java_gen/templates/custom/OFStatV6.Builder.java
@@ -0,0 +1,50 @@
+    private OFOxsList.Builder oxsFieldsBuilder;
+
+    private void initBuilder() {
+        if (oxsFieldsBuilder != null)
+            return;
+        oxsFieldsBuilder = new OFOxsList.Builder();
+    }
+
+    private void updateOxsList() {
+        this.oxsFields = this.oxsFieldsBuilder.build();
+        this.oxsFieldsSet = true;
+    }
+
+
+
+    @Override
+    public <F extends OFValueType<F>> F get(StatField<F> field) throws UnsupportedOperationException{
+        if (!supports(field))
+            throw new UnsupportedOperationException("${msg.name} does not support statistics on field " + field.getName());
+
+        OFOxs<F> oxs = getOxs(field);
+
+        if (oxs == null)
+            return null;
+
+        return oxs.getValue();
+    }
+
+    @Override
+    public <F extends OFValueType<F>> Stat.Builder set(StatField<F> field, F value) {
+        initBuilder();
+        OFOxs<F> oxs = OFFactories.getFactory(OFVersion.${version.constant_version}).oxss().fromValue(value, field);
+        this.oxsFieldsBuilder.set(oxs);
+        updateOxsList();
+        return this;
+    }
+
+
+    @Override
+    public boolean supports(StatField<?> field){
+        return supportsField(field);
+    }
+
+    private <F extends OFValueType<F>> OFOxs<F> getOxs(StatField<F> field) {
+//:: if has_parent:
+        return this.oxsFieldsSet ? this.oxsFields.get(field) : parentMessage.oxsFields.get(field);
+//:: else:
+        return this.oxsFieldsSet ? this.oxsFields.get(field) : null;
+//:: #endif
+    }
diff --git a/java_gen/templates/custom/OFStatV6.java b/java_gen/templates/custom/OFStatV6.java
new file mode 100644
index 0000000..d2b395c
--- /dev/null
+++ b/java_gen/templates/custom/OFStatV6.java
@@ -0,0 +1,59 @@
+
+//:: from generic_utils import OrderedSet
+//:: from java_gen.java_model import model
+    @Override
+    public <F extends OFValueType<F>> F get(StatField<F> field)
+            throws UnsupportedOperationException {
+        if (!supports(field))
+            throw new UnsupportedOperationException("${msg.name} does not support statistics on field " + field.getName());
+
+        OFOxs<F> oxs = this.oxsFields.get(field);
+
+        if (oxs == null)
+            return null;
+
+        return oxs.getValue();
+    }
+
+    @Override
+    public Iterable<StatField<?>> getStatFields() {
+        return new Iterable<StatField<?>>() {
+            public Iterator<StatField<?>> iterator() {
+                return new StatFieldIterator();
+            }
+        };
+    }
+
+    @Override
+    public boolean supports(StatField<?> field) {
+        return supportsField(field);
+    }
+
+    private static boolean supportsField(StatField<?> field) {
+        switch (field.id) {
+            //:: for id_constant in sorted(set(id_constant for _, id_constant, _ in model.oxs_map.values())):
+            case ${id_constant}:
+            //:: #endfor
+                return true;
+            default:
+                return false;
+        }
+    }
+
+    private class StatFieldIterator extends AbstractIterator<StatField<?>> {
+        private Iterator<OFOxs<?>> oxsIterator;
+
+        StatFieldIterator() {
+            oxsIterator = oxsFields.iterator();
+        }
+
+        @Override
+        protected StatField<?> computeNext() {
+            while(oxsIterator.hasNext()) {
+                OFOxs<?> oxs = oxsIterator.next();
+                return oxs.getStatField();
+            }
+            endOfData();
+            return null;
+        }
+    }
diff --git a/java_gen/templates/custom/OFStatV6Ver15.Builder.java b/java_gen/templates/custom/OFStatV6Ver15.Builder.java
new file mode 100644
index 0000000..3cd8e0d
--- /dev/null
+++ b/java_gen/templates/custom/OFStatV6Ver15.Builder.java
@@ -0,0 +1 @@
+//:: include("custom/OFStatV6.Builder.java", msg=msg, has_parent=False)
diff --git a/java_gen/templates/custom/OFStatV6Ver15.java b/java_gen/templates/custom/OFStatV6Ver15.java
new file mode 100644
index 0000000..25cb9a2
--- /dev/null
+++ b/java_gen/templates/custom/OFStatV6Ver15.java
@@ -0,0 +1 @@
+//:: include("custom/OFStatV6.java", msg=msg, has_parent=False)
diff --git a/java_gen/templates/custom/interface/OFMessage.java b/java_gen/templates/custom/interface/OFMessage.java
new file mode 100644
index 0000000..1d63ee6
--- /dev/null
+++ b/java_gen/templates/custom/interface/OFMessage.java
@@ -0,0 +1,28 @@
+    
+    /**
+     * Compares the two messages for equality, ignoring the XID field.
+     *
+     * @param obj the other message to compare
+     * @return true if the messages are equal, ignoring the XID; false otherwise
+     */
+    boolean equalsIgnoreXid(Object obj);
+
+    /**
+     * Computes the hashcode of the message, ignoring the XID field.
+     * This can be useful in hashing OFMessages where an OFMessage
+     * is "the same as" another OFMessage if all fields are equal
+     * except for possibly the XIDs, which may or may not be equal.
+     *
+     * The obvious problem is that existing hash data structure 
+     * implementations will use OFMessage's hashCode() function instead.
+     * In order to use the functionality of hashCodeIgnoreXid(), one 
+     * must wrap the OFMessage within a user-defined class, where this 
+     * user-defined class is used as the key within a hash data structure, 
+     * e.g. HashMap. The user-defined class' overrideen hashCode() 
+     * function must explicitly invoke hashCodeIgnoreXid() when computing 
+     * the hash of the OFMessage member instead of computing it using 
+     * OFMessage's hashCode().
+     *
+     * @return the hashcode of the message, ignoring the XID
+     */
+    int hashCodeIgnoreXid();
diff --git a/java_gen/templates/custom/interface/OFPortDesc.java b/java_gen/templates/custom/interface/OFPortDesc.java
index 247464d..45e2dfb 100644
--- a/java_gen/templates/custom/interface/OFPortDesc.java
+++ b/java_gen/templates/custom/interface/OFPortDesc.java
@@ -12,7 +12,7 @@
      * Returns the current generation ID of this port.
      *
      * The generationId is reported by the switch as a @{link OFPortDescProp} in
-     * @link{OFPortDescStatsReply} and @link{OFPortStatus} messages. If the
+     * {@link OFPortDescStatsReply} and {@link OFPortStatus} messages. If the
      * current OFPortDesc does not contain a generation Id, returns U64.ZERO;
      *
      * For OpenFlow versions earlier than 1.4, always returns U64.ZERO;
