Experimental OGF Usage Record Format 2.0 bindings

derived from https://www.ogf.org/documents/GFD.204.pdf
diff --git a/NOTICE b/NOTICE
index 70207fd..341ce0c 100644
--- a/NOTICE
+++ b/NOTICE
@@ -39,3 +39,27 @@
       information herein will not infringe any rights or any implied
       warranties of merchantability or fitness for a particular purpose.
 ---------------------------------------------------------
+org.apache.taverna.server.usagerecord.xml.urf2 classes are
+derived from https://www.ogf.org/documents/GFD.204.pdf
+
+  Copyright © Open Grid Forum (2006-2013). Some Rights Reserved.
+ 
+  This document and translations of it may be copied and furnished to others,
+  and derivative works that comment on or otherwise explain it or assist in its
+  implementation may be prepared, copied, published and distributed, in whole
+  or in part, without restriction of any kind, provided that the above
+  copyright notice and this paragraph are included as references to the derived
+  portions on all such copies and derivative works. The published OGF document
+  from which such works are derived, however, may not be modified in any way,
+  such as by removing the copyright notice or references to the OGF or other
+  organizations, except as needed for the purpose of developing new or updated
+  OGF documents in conformance with the procedures defined in the OGF Document
+  Process, or as required to translate it into languages other than English.
+  OGF, with the approval of its board, may remove this restriction for
+  inclusion of OGF document content for the purpose of producing standards in
+  cooperation with other international standards bodies.
+ 
+  The limited permissions granted above are perpetual and will not be revoked
+  by the OGF or its successors or assignees.
+ ---------------------------------------------------------
+ 
\ No newline at end of file
diff --git a/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/package-info.java b/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/package-info.java
index 55b378f..4326ba9 100644
--- a/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/package-info.java
+++ b/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/package-info.java
@@ -15,10 +15,10 @@
  * limitations under the License.
  */
 /**
- * Open Grid Forum GFD.98 Usage Record
+ * Open Grid Forum GFD.98 Usage Record Format
  * <p>
- * JAXB bean for a a <em>Usage Record</em> as described by Open Grid Forum's
- * specification <a href="https://www.ogf.org/documents/GFD.98.pdf">GFD.98</a>.
+ * JAXB bean for the <em>Usage Record Format 1.0</em> as described by Open Grid Forum (OGF)
+ * specification <a href="https://www.ogf.org/documents/GFD.98.pdf">GFD-R-P.098</a>.
  * <p>
  * The main class {@link org.apache.taverna.server.usagerecord.JobUsageRecord} 
  * represents the outer <code>&lt;UsageRecord&gt;</code> element
@@ -28,9 +28,15 @@
  * the packages {@link org.apache.taverna.server.usagerecord.xml.urf} representing
  * the namespace <code>http://schema.ogf.org/urf/2003/09/urf</code> and  
  * {@link org.apache.taverna.server.usagerecord.xml.dsig} representing
- * the namespace <code>http://www.w3.org/2000/09/xmldsig#</code>
+ * the namespace <code>http://www.w3.org/2000/09/xmldsig#</code>.
+ * <p>
+ * The package {@link org.apache.taverna.server.usagerecord.xml.urf2} provides
+ * experimental bindings for the <em>Usage Record Format 2.0</em>
+ * as specified by the superseding OGF specification 
+ * <a href="https://www.ogf.org/documents/GFD.204.pdf">GFD-R-P.204</a>.
  * 
- * @see <a href="https://www.ogf.org/documents/GFD.98.pdf">Open Grid Forum specification GFD.98 (Usage Record)</a>
+ * @see <a href="https://www.ogf.org/documents/GFD.98.pdf">Open Grid Forum specification GFD.98</a>
+ * @see <a href="https://www.ogf.org/documents/GFD.204.pdf">Open Grid Forum specification GFD.204</a>
  * @see <a href="https://www.w3.org/TR/xmldsig-core1/">W3C Recommendation XML Signature Syntax and Processing Version 1.1</a> 
  */
 @javax.xml.bind.annotation.XmlSchema(namespace = "http://schema.ogf.org/urf/2003/09/urf", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
diff --git a/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/BenchmarkType.java b/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/BenchmarkType.java
new file mode 100644
index 0000000..353cb20
--- /dev/null
+++ b/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/BenchmarkType.java
@@ -0,0 +1,91 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.11 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2018.01.04 at 04:15:49 PM GMT 
+//
+
+
+package org.apache.taverna.server.usagerecord.xml.urf2;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlValue;
+
+
+/**
+ * Open Grid Forum GFD.204 Usage Record type <code>BenchmarkType</code>
+ * 
+ * @see <a href="https://www.ogf.org/documents/GFD.204.pdf#subsubsection.5.5.3">GFD.204 section 5.5.3</a>
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "BenchmarkType", propOrder = {
+    "value"
+})
+public class BenchmarkType {
+
+    @XmlValue
+    protected float value;
+    @XmlAttribute(name = "type", namespace = "http://schema.ogf.org/urf/2013/04/urf", required = true)
+    protected String type;
+
+    /**
+     * Gets the value of the value property.
+     * 
+     */
+    public float getValue() {
+        return value;
+    }
+
+    /**
+     * Sets the value of the value property.
+     * 
+     */
+    public void setValue(float value) {
+        this.value = value;
+    }
+
+    /**
+     * Gets the value of the type property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getType() {
+        return type;
+    }
+
+    /**
+     * Sets the value of the type property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setType(String value) {
+        this.type = value;
+    }
+
+}
diff --git a/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/CloudUsageBlockType.java b/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/CloudUsageBlockType.java
new file mode 100644
index 0000000..4f0ec9d
--- /dev/null
+++ b/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/CloudUsageBlockType.java
@@ -0,0 +1,295 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.11 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2018.01.04 at 04:15:49 PM GMT 
+//
+
+
+package org.apache.taverna.server.usagerecord.xml.urf2;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.datatype.Duration;
+
+/**
+ * Open Grid Forum GFD.204 Usage Record type <code>CloudUsageBlock</code>
+ * 
+ * @see <a href="https://www.ogf.org/documents/GFD.204.pdf#section.9">GFD.204 section 9</a>
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "CloudUsageBlockType", propOrder = {
+    "localVirtualMachineId",
+    "globalVirtualMachineId",
+    "status",
+    "suspendDuration",
+    "imageId",
+    "machineName",
+    "submitHost",
+    "timeInstant",
+    "serviceLevel"
+})
+public class CloudUsageBlockType {
+
+    @XmlElement(name = "LocalVirtualMachineId")
+    protected String localVirtualMachineId;
+    @XmlElement(name = "GlobalVirtualMachineId")
+    protected String globalVirtualMachineId;
+    @XmlElement(name = "Status", required = true)
+    protected String status;
+    @XmlElement(name = "SuspendDuration")
+    protected Duration suspendDuration;
+    @XmlElement(name = "ImageId")
+    protected String imageId;
+    @XmlElement(name = "MachineName")
+    protected String machineName;
+    @XmlElement(name = "SubmitHost")
+    protected String submitHost;
+    @XmlElement(name = "TimeInstant")
+    protected List<TimeInstantType> timeInstant;
+    @XmlElement(name = "ServiceLevel")
+    protected String serviceLevel;
+
+    /**
+     * Gets the value of the localVirtualMachineId property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getLocalVirtualMachineId() {
+        return localVirtualMachineId;
+    }
+
+    /**
+     * Sets the value of the localVirtualMachineId property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setLocalVirtualMachineId(String value) {
+        this.localVirtualMachineId = value;
+    }
+
+    /**
+     * Gets the value of the globalVirtualMachineId property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getGlobalVirtualMachineId() {
+        return globalVirtualMachineId;
+    }
+
+    /**
+     * Sets the value of the globalVirtualMachineId property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setGlobalVirtualMachineId(String value) {
+        this.globalVirtualMachineId = value;
+    }
+
+    /**
+     * Gets the value of the status property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getStatus() {
+        return status;
+    }
+
+    /**
+     * Sets the value of the status property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setStatus(String value) {
+        this.status = value;
+    }
+
+    /**
+     * Gets the value of the suspendDuration property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link Duration }
+     *     
+     */
+    public Duration getSuspendDuration() {
+        return suspendDuration;
+    }
+
+    /**
+     * Sets the value of the suspendDuration property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link Duration }
+     *     
+     */
+    public void setSuspendDuration(Duration value) {
+        this.suspendDuration = value;
+    }
+
+    /**
+     * Gets the value of the imageId property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getImageId() {
+        return imageId;
+    }
+
+    /**
+     * Sets the value of the imageId property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setImageId(String value) {
+        this.imageId = value;
+    }
+
+    /**
+     * Gets the value of the machineName property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getMachineName() {
+        return machineName;
+    }
+
+    /**
+     * Sets the value of the machineName property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setMachineName(String value) {
+        this.machineName = value;
+    }
+
+    /**
+     * Gets the value of the submitHost property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getSubmitHost() {
+        return submitHost;
+    }
+
+    /**
+     * Sets the value of the submitHost property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setSubmitHost(String value) {
+        this.submitHost = value;
+    }
+
+    /**
+     * Gets the value of the timeInstant property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list,
+     * not a snapshot. Therefore any modification you make to the
+     * returned list will be present inside the JAXB object.
+     * This is why there is not a <CODE>set</CODE> method for the timeInstant property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * <pre>
+     *    getTimeInstant().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link TimeInstantType }
+     * 
+     * 
+     */
+    public List<TimeInstantType> getTimeInstant() {
+        if (timeInstant == null) {
+            timeInstant = new ArrayList<TimeInstantType>();
+        }
+        return this.timeInstant;
+    }
+
+    /**
+     * Gets the value of the serviceLevel property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getServiceLevel() {
+        return serviceLevel;
+    }
+
+    /**
+     * Sets the value of the serviceLevel property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setServiceLevel(String value) {
+        this.serviceLevel = value;
+    }
+
+}
diff --git a/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/ComputeUsageBlockType.java b/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/ComputeUsageBlockType.java
new file mode 100644
index 0000000..900ce32
--- /dev/null
+++ b/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/ComputeUsageBlockType.java
@@ -0,0 +1,331 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.11 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2018.01.04 at 04:15:49 PM GMT 
+//
+
+
+package org.apache.taverna.server.usagerecord.xml.urf2;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlSchemaType;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.datatype.Duration;
+import javax.xml.datatype.XMLGregorianCalendar;
+
+
+/**
+ * Open Grid Forum GFD.204 Usage Record type <code>ComputeUsageBlockType</code>
+ * 
+ * @see <a href="https://www.ogf.org/documents/GFD.204.pdf#section.5">GFD.204 section 5</a>
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "ComputeUsageBlockType", propOrder = {
+    "cpuDuration",
+    "wallDuration",
+    "startTime",
+    "endTime",
+    "executionHost",
+    "hostType",
+    "processors",
+    "nodeCount",
+    "exitStatus",
+    "charge"
+})
+public class ComputeUsageBlockType {
+
+    @XmlElement(name = "CpuDuration", required = true)
+    protected Duration cpuDuration;
+    @XmlElement(name = "WallDuration", required = true)
+    protected Duration wallDuration;
+    @XmlElement(name = "StartTime", required = true)
+    @XmlSchemaType(name = "dateTime")
+    protected XMLGregorianCalendar startTime;
+    @XmlElement(name = "EndTime", required = true)
+    @XmlSchemaType(name = "dateTime")
+    protected XMLGregorianCalendar endTime;
+    @XmlElement(name = "ExecutionHost")
+    protected List<ExecutionHostType> executionHost;
+    @XmlElement(name = "HostType")
+    protected String hostType;
+    @XmlElement(name = "Processors")
+    @XmlSchemaType(name = "positiveInteger")
+    protected BigInteger processors;
+    @XmlElement(name = "NodeCount")
+    @XmlSchemaType(name = "positiveInteger")
+    protected BigInteger nodeCount;
+    @XmlElement(name = "ExitStatus")
+    protected BigInteger exitStatus;
+    @XmlElement(name = "Charge")
+    protected BigDecimal charge;
+
+    /**
+     * Gets the value of the cpuDuration property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link Duration }
+     *     
+     */
+    public Duration getCpuDuration() {
+        return cpuDuration;
+    }
+
+    /**
+     * Sets the value of the cpuDuration property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link Duration }
+     *     
+     */
+    public void setCpuDuration(Duration value) {
+        this.cpuDuration = value;
+    }
+
+    /**
+     * Gets the value of the wallDuration property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link Duration }
+     *     
+     */
+    public Duration getWallDuration() {
+        return wallDuration;
+    }
+
+    /**
+     * Sets the value of the wallDuration property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link Duration }
+     *     
+     */
+    public void setWallDuration(Duration value) {
+        this.wallDuration = value;
+    }
+
+    /**
+     * Gets the value of the startTime property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link XMLGregorianCalendar }
+     *     
+     */
+    public XMLGregorianCalendar getStartTime() {
+        return startTime;
+    }
+
+    /**
+     * Sets the value of the startTime property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link XMLGregorianCalendar }
+     *     
+     */
+    public void setStartTime(XMLGregorianCalendar value) {
+        this.startTime = value;
+    }
+
+    /**
+     * Gets the value of the endTime property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link XMLGregorianCalendar }
+     *     
+     */
+    public XMLGregorianCalendar getEndTime() {
+        return endTime;
+    }
+
+    /**
+     * Sets the value of the endTime property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link XMLGregorianCalendar }
+     *     
+     */
+    public void setEndTime(XMLGregorianCalendar value) {
+        this.endTime = value;
+    }
+
+    /**
+     * Gets the value of the executionHost property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list,
+     * not a snapshot. Therefore any modification you make to the
+     * returned list will be present inside the JAXB object.
+     * This is why there is not a <CODE>set</CODE> method for the executionHost property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * <pre>
+     *    getExecutionHost().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link ExecutionHostType }
+     * 
+     * 
+     */
+    public List<ExecutionHostType> getExecutionHost() {
+        if (executionHost == null) {
+            executionHost = new ArrayList<ExecutionHostType>();
+        }
+        return this.executionHost;
+    }
+
+    /**
+     * Gets the value of the hostType property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getHostType() {
+        return hostType;
+    }
+
+    /**
+     * Sets the value of the hostType property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setHostType(String value) {
+        this.hostType = value;
+    }
+
+    /**
+     * Gets the value of the processors property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link BigInteger }
+     *     
+     */
+    public BigInteger getProcessors() {
+        return processors;
+    }
+
+    /**
+     * Sets the value of the processors property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link BigInteger }
+     *     
+     */
+    public void setProcessors(BigInteger value) {
+        this.processors = value;
+    }
+
+    /**
+     * Gets the value of the nodeCount property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link BigInteger }
+     *     
+     */
+    public BigInteger getNodeCount() {
+        return nodeCount;
+    }
+
+    /**
+     * Sets the value of the nodeCount property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link BigInteger }
+     *     
+     */
+    public void setNodeCount(BigInteger value) {
+        this.nodeCount = value;
+    }
+
+    /**
+     * Gets the value of the exitStatus property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link BigInteger }
+     *     
+     */
+    public BigInteger getExitStatus() {
+        return exitStatus;
+    }
+
+    /**
+     * Sets the value of the exitStatus property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link BigInteger }
+     *     
+     */
+    public void setExitStatus(BigInteger value) {
+        this.exitStatus = value;
+    }
+
+    /**
+     * Gets the value of the charge property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link BigDecimal }
+     *     
+     */
+    public BigDecimal getCharge() {
+        return charge;
+    }
+
+    /**
+     * Sets the value of the charge property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link BigDecimal }
+     *     
+     */
+    public void setCharge(BigDecimal value) {
+        this.charge = value;
+    }
+
+}
diff --git a/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/ExecutionHostType.java b/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/ExecutionHostType.java
new file mode 100644
index 0000000..3f65b5a
--- /dev/null
+++ b/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/ExecutionHostType.java
@@ -0,0 +1,142 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.11 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2018.01.04 at 04:15:49 PM GMT 
+//
+
+
+package org.apache.taverna.server.usagerecord.xml.urf2;
+
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlSchemaType;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * Open Grid Forum GFD.204 Usage Record type <code>ExecutionHostType</code>
+ * 
+ * @see <a href="https://www.ogf.org/documents/GFD.204.pdf#subsection.5.5">GFD.204 section 5.5</a>
+ *
+ */
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "ExecutionHostType", propOrder = {
+    "hostname",
+    "processId",
+    "benchmark"
+})
+public class ExecutionHostType {
+
+    @XmlElement(name = "Hostname", required = true)
+    protected HostnameType hostname;
+    @XmlElement(name = "ProcessId")
+    @XmlSchemaType(name = "positiveInteger")
+    protected List<BigInteger> processId;
+    @XmlElement(name = "Benchmark")
+    protected List<BenchmarkType> benchmark;
+
+    /**
+     * Gets the value of the hostname property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link HostnameType }
+     *     
+     */
+    public HostnameType getHostname() {
+        return hostname;
+    }
+
+    /**
+     * Sets the value of the hostname property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link HostnameType }
+     *     
+     */
+    public void setHostname(HostnameType value) {
+        this.hostname = value;
+    }
+
+    /**
+     * Gets the value of the processId property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list,
+     * not a snapshot. Therefore any modification you make to the
+     * returned list will be present inside the JAXB object.
+     * This is why there is not a <CODE>set</CODE> method for the processId property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * <pre>
+     *    getProcessId().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link BigInteger }
+     * 
+     * 
+     */
+    public List<BigInteger> getProcessId() {
+        if (processId == null) {
+            processId = new ArrayList<BigInteger>();
+        }
+        return this.processId;
+    }
+
+    /**
+     * Gets the value of the benchmark property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list,
+     * not a snapshot. Therefore any modification you make to the
+     * returned list will be present inside the JAXB object.
+     * This is why there is not a <CODE>set</CODE> method for the benchmark property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * <pre>
+     *    getBenchmark().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link BenchmarkType }
+     * 
+     * 
+     */
+    public List<BenchmarkType> getBenchmark() {
+        if (benchmark == null) {
+            benchmark = new ArrayList<BenchmarkType>();
+        }
+        return this.benchmark;
+    }
+
+}
diff --git a/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/GlobalGroupAttributeType.java b/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/GlobalGroupAttributeType.java
new file mode 100644
index 0000000..e201928
--- /dev/null
+++ b/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/GlobalGroupAttributeType.java
@@ -0,0 +1,99 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.11 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2018.01.04 at 04:15:49 PM GMT 
+//
+
+
+package org.apache.taverna.server.usagerecord.xml.urf2;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlValue;
+
+
+/**
+ * Open Grid Forum GFD.204 Usage Record type <code>GlobalGroupAttributeType</code>
+ * 
+ * @see <a href="https://www.ogf.org/documents/GFD.204.pdf#subsection.4.5">GFD.204 section 4.5</a>
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "GlobalGroupAttributeType", propOrder = {
+    "value"
+})
+public class GlobalGroupAttributeType {
+
+    @XmlValue
+    protected String value;
+    @XmlAttribute(name = "type", namespace = "http://schema.ogf.org/urf/2013/04/urf", required = true)
+    protected String type;
+
+    /**
+     * Gets the value of the value property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getValue() {
+        return value;
+    }
+
+    /**
+     * Sets the value of the value property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    /**
+     * Gets the value of the type property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getType() {
+        return type;
+    }
+
+    /**
+     * Sets the value of the type property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setType(String value) {
+        this.type = value;
+    }
+
+}
diff --git a/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/HostnameType.java b/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/HostnameType.java
new file mode 100644
index 0000000..10cd1fa
--- /dev/null
+++ b/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/HostnameType.java
@@ -0,0 +1,98 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.11 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2018.01.04 at 04:15:49 PM GMT 
+//
+
+
+package org.apache.taverna.server.usagerecord.xml.urf2;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlValue;
+
+/**
+ * Open Grid Forum GFD.204 Usage Record type <code>HostnameType</code>
+ * 
+ * @see <a href="https://www.ogf.org/documents/GFD.204.pdf#subsubsection.5.5.1">GFD.204 section 5.5.1</a>
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "HostnameType", propOrder = {
+    "value"
+})
+public class HostnameType {
+
+    @XmlValue
+    protected String value;
+    @XmlAttribute(name = "primary", namespace = "http://schema.ogf.org/urf/2013/04/urf")
+    protected Boolean primary;
+
+    /**
+     * Gets the value of the value property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getValue() {
+        return value;
+    }
+
+    /**
+     * Sets the value of the value property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    /**
+     * Gets the value of the primary property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link Boolean }
+     *     
+     */
+    public Boolean isPrimary() {
+        return primary;
+    }
+
+    /**
+     * Sets the value of the primary property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link Boolean }
+     *     
+     */
+    public void setPrimary(Boolean value) {
+        this.primary = value;
+    }
+
+}
diff --git a/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/InfrastructureType.java b/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/InfrastructureType.java
new file mode 100644
index 0000000..c3cc75d
--- /dev/null
+++ b/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/InfrastructureType.java
@@ -0,0 +1,99 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.11 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2018.01.04 at 04:15:49 PM GMT 
+//
+
+
+package org.apache.taverna.server.usagerecord.xml.urf2;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlValue;
+
+
+/**
+ * Open Grid Forum GFD.204 Usage Record type <code>InfrastructureType</code>
+ * 
+ * @see <a href="https://www.ogf.org/documents/GFD.204.pdf#subsection.3.4">GFD.204 section 3.4</a>
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "InfrastructureType", propOrder = {
+    "value"
+})
+public class InfrastructureType {
+
+    @XmlValue
+    protected String value;
+    @XmlAttribute(name = "description", namespace = "http://schema.ogf.org/urf/2013/04/urf")
+    protected String description;
+
+    /**
+     * Gets the value of the value property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getValue() {
+        return value;
+    }
+
+    /**
+     * Sets the value of the value property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    /**
+     * Gets the value of the description property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getDescription() {
+        return description;
+    }
+
+    /**
+     * Sets the value of the description property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setDescription(String value) {
+        this.description = value;
+    }
+
+}
diff --git a/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/JobUsageBlockType.java b/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/JobUsageBlockType.java
new file mode 100644
index 0000000..8db59dc
--- /dev/null
+++ b/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/JobUsageBlockType.java
@@ -0,0 +1,321 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.11 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2018.01.04 at 04:15:49 PM GMT 
+//
+
+
+package org.apache.taverna.server.usagerecord.xml.urf2;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+/**
+ * Open Grid Forum GFD.204 Usage Record type <code>JobUsageBlockType</code>
+ * 
+ * @see <a href="https://www.ogf.org/documents/GFD.204.pdf#section.6">GFD.204 section 6</a>
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "JobUsageBlockType", propOrder = {
+    "globalJobId",
+    "localJobId",
+    "jobName",
+    "machineName",
+    "submitHost",
+    "submitType",
+    "queue",
+    "timeInstant",
+    "serviceLevel",
+    "status"
+})
+public class JobUsageBlockType {
+
+    @XmlElement(name = "GlobalJobId")
+    protected String globalJobId;
+    @XmlElement(name = "LocalJobId")
+    protected String localJobId;
+    @XmlElement(name = "JobName")
+    protected String jobName;
+    @XmlElement(name = "MachineName")
+    protected String machineName;
+    @XmlElement(name = "SubmitHost")
+    protected String submitHost;
+    @XmlElement(name = "SubmitType")
+    protected SubmitTypeType submitType;
+    @XmlElement(name = "Queue")
+    protected QueueType queue;
+    @XmlElement(name = "TimeInstant")
+    protected List<TimeInstantType> timeInstant;
+    @XmlElement(name = "ServiceLevel")
+    protected String serviceLevel;
+    @XmlElement(name = "Status", required = true)
+    protected String status;
+
+    /**
+     * Gets the value of the globalJobId property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getGlobalJobId() {
+        return globalJobId;
+    }
+
+    /**
+     * Sets the value of the globalJobId property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setGlobalJobId(String value) {
+        this.globalJobId = value;
+    }
+
+    /**
+     * Gets the value of the localJobId property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getLocalJobId() {
+        return localJobId;
+    }
+
+    /**
+     * Sets the value of the localJobId property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setLocalJobId(String value) {
+        this.localJobId = value;
+    }
+
+    /**
+     * Gets the value of the jobName property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getJobName() {
+        return jobName;
+    }
+
+    /**
+     * Sets the value of the jobName property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setJobName(String value) {
+        this.jobName = value;
+    }
+
+    /**
+     * Gets the value of the machineName property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getMachineName() {
+        return machineName;
+    }
+
+    /**
+     * Sets the value of the machineName property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setMachineName(String value) {
+        this.machineName = value;
+    }
+
+    /**
+     * Gets the value of the submitHost property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getSubmitHost() {
+        return submitHost;
+    }
+
+    /**
+     * Sets the value of the submitHost property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setSubmitHost(String value) {
+        this.submitHost = value;
+    }
+
+    /**
+     * Gets the value of the submitType property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link SubmitTypeType }
+     *     
+     */
+    public SubmitTypeType getSubmitType() {
+        return submitType;
+    }
+
+    /**
+     * Sets the value of the submitType property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link SubmitTypeType }
+     *     
+     */
+    public void setSubmitType(SubmitTypeType value) {
+        this.submitType = value;
+    }
+
+    /**
+     * Gets the value of the queue property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link QueueType }
+     *     
+     */
+    public QueueType getQueue() {
+        return queue;
+    }
+
+    /**
+     * Sets the value of the queue property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link QueueType }
+     *     
+     */
+    public void setQueue(QueueType value) {
+        this.queue = value;
+    }
+
+    /**
+     * Gets the value of the timeInstant property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list,
+     * not a snapshot. Therefore any modification you make to the
+     * returned list will be present inside the JAXB object.
+     * This is why there is not a <CODE>set</CODE> method for the timeInstant property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * <pre>
+     *    getTimeInstant().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link TimeInstantType }
+     * 
+     * 
+     */
+    public List<TimeInstantType> getTimeInstant() {
+        if (timeInstant == null) {
+            timeInstant = new ArrayList<TimeInstantType>();
+        }
+        return this.timeInstant;
+    }
+
+    /**
+     * Gets the value of the serviceLevel property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getServiceLevel() {
+        return serviceLevel;
+    }
+
+    /**
+     * Sets the value of the serviceLevel property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setServiceLevel(String value) {
+        this.serviceLevel = value;
+    }
+
+    /**
+     * Gets the value of the status property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getStatus() {
+        return status;
+    }
+
+    /**
+     * Sets the value of the status property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setStatus(String value) {
+        this.status = value;
+    }
+
+}
diff --git a/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/MemoryUsageBlockType.java b/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/MemoryUsageBlockType.java
new file mode 100644
index 0000000..f12dc09
--- /dev/null
+++ b/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/MemoryUsageBlockType.java
@@ -0,0 +1,297 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.11 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2018.01.04 at 04:15:49 PM GMT 
+//
+
+
+package org.apache.taverna.server.usagerecord.xml.urf2;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlSchemaType;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.datatype.XMLGregorianCalendar;
+
+
+/**
+ * Open Grid Forum GFD.204 Usage Record type <code>MemoryUsageBlockType</code>
+ * 
+ * @see <a href="https://www.ogf.org/documents/GFD.204.pdf#section.7">GFD.204 section 7</a>
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "MemoryUsageBlockType", propOrder = {
+    "memoryClass",
+    "memoryResourceCapacityUsed",
+    "memoryResourceCapacityAllocated",
+    "memoryResourceCapacityRequested",
+    "startTime",
+    "endTime",
+    "executionHost",
+    "hostType",
+    "charge"
+})
+public class MemoryUsageBlockType {
+
+    @XmlElement(name = "MemoryClass", required = true)
+    protected String memoryClass;
+    @XmlElement(name = "MemoryResourceCapacityUsed", required = true)
+    @XmlSchemaType(name = "nonNegativeInteger")
+    protected BigInteger memoryResourceCapacityUsed;
+    @XmlElement(name = "MemoryResourceCapacityAllocated")
+    @XmlSchemaType(name = "nonNegativeInteger")
+    protected BigInteger memoryResourceCapacityAllocated;
+    @XmlElement(name = "MemoryResourceCapacityRequested")
+    @XmlSchemaType(name = "nonNegativeInteger")
+    protected BigInteger memoryResourceCapacityRequested;
+    @XmlElement(name = "StartTime", required = true)
+    @XmlSchemaType(name = "dateTime")
+    protected XMLGregorianCalendar startTime;
+    @XmlElement(name = "EndTime", required = true)
+    @XmlSchemaType(name = "dateTime")
+    protected XMLGregorianCalendar endTime;
+    @XmlElement(name = "ExecutionHost")
+    protected ExecutionHostType executionHost;
+    @XmlElement(name = "HostType")
+    protected String hostType;
+    @XmlElement(name = "Charge")
+    protected BigDecimal charge;
+
+    /**
+     * Gets the value of the memoryClass property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getMemoryClass() {
+        return memoryClass;
+    }
+
+    /**
+     * Sets the value of the memoryClass property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setMemoryClass(String value) {
+        this.memoryClass = value;
+    }
+
+    /**
+     * Gets the value of the memoryResourceCapacityUsed property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link BigInteger }
+     *     
+     */
+    public BigInteger getMemoryResourceCapacityUsed() {
+        return memoryResourceCapacityUsed;
+    }
+
+    /**
+     * Sets the value of the memoryResourceCapacityUsed property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link BigInteger }
+     *     
+     */
+    public void setMemoryResourceCapacityUsed(BigInteger value) {
+        this.memoryResourceCapacityUsed = value;
+    }
+
+    /**
+     * Gets the value of the memoryResourceCapacityAllocated property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link BigInteger }
+     *     
+     */
+    public BigInteger getMemoryResourceCapacityAllocated() {
+        return memoryResourceCapacityAllocated;
+    }
+
+    /**
+     * Sets the value of the memoryResourceCapacityAllocated property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link BigInteger }
+     *     
+     */
+    public void setMemoryResourceCapacityAllocated(BigInteger value) {
+        this.memoryResourceCapacityAllocated = value;
+    }
+
+    /**
+     * Gets the value of the memoryResourceCapacityRequested property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link BigInteger }
+     *     
+     */
+    public BigInteger getMemoryResourceCapacityRequested() {
+        return memoryResourceCapacityRequested;
+    }
+
+    /**
+     * Sets the value of the memoryResourceCapacityRequested property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link BigInteger }
+     *     
+     */
+    public void setMemoryResourceCapacityRequested(BigInteger value) {
+        this.memoryResourceCapacityRequested = value;
+    }
+
+    /**
+     * Gets the value of the startTime property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link XMLGregorianCalendar }
+     *     
+     */
+    public XMLGregorianCalendar getStartTime() {
+        return startTime;
+    }
+
+    /**
+     * Sets the value of the startTime property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link XMLGregorianCalendar }
+     *     
+     */
+    public void setStartTime(XMLGregorianCalendar value) {
+        this.startTime = value;
+    }
+
+    /**
+     * Gets the value of the endTime property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link XMLGregorianCalendar }
+     *     
+     */
+    public XMLGregorianCalendar getEndTime() {
+        return endTime;
+    }
+
+    /**
+     * Sets the value of the endTime property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link XMLGregorianCalendar }
+     *     
+     */
+    public void setEndTime(XMLGregorianCalendar value) {
+        this.endTime = value;
+    }
+
+    /**
+     * Gets the value of the executionHost property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link ExecutionHostType }
+     *     
+     */
+    public ExecutionHostType getExecutionHost() {
+        return executionHost;
+    }
+
+    /**
+     * Sets the value of the executionHost property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link ExecutionHostType }
+     *     
+     */
+    public void setExecutionHost(ExecutionHostType value) {
+        this.executionHost = value;
+    }
+
+    /**
+     * Gets the value of the hostType property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getHostType() {
+        return hostType;
+    }
+
+    /**
+     * Sets the value of the hostType property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setHostType(String value) {
+        this.hostType = value;
+    }
+
+    /**
+     * Gets the value of the charge property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link BigDecimal }
+     *     
+     */
+    public BigDecimal getCharge() {
+        return charge;
+    }
+
+    /**
+     * Sets the value of the charge property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link BigDecimal }
+     *     
+     */
+    public void setCharge(BigDecimal value) {
+        this.charge = value;
+    }
+
+}
diff --git a/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/NetworkClassType.java b/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/NetworkClassType.java
new file mode 100644
index 0000000..14e828e
--- /dev/null
+++ b/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/NetworkClassType.java
@@ -0,0 +1,103 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.11 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2018.01.04 at 04:15:49 PM GMT 
+//
+
+
+package org.apache.taverna.server.usagerecord.xml.urf2;
+
+import java.math.BigInteger;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlSchemaType;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlValue;
+
+
+
+/**
+ * Open Grid Forum GFD.204 Usage Record type <code>NetworkClassType</code>
+ * 
+ * @see <a href="https://www.ogf.org/documents/GFD.204.pdf#subsection.10.1">GFD.204 section 10.1</a>
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "NetworkClassType", propOrder = {
+    "value"
+})
+public class NetworkClassType {
+
+    @XmlValue
+    protected String value;
+    @XmlAttribute(name = "NetworkResourceBandwidth", namespace = "http://schema.ogf.org/urf/2013/04/urf")
+    @XmlSchemaType(name = "positiveInteger")
+    protected BigInteger networkResourceBandwidth;
+
+    /**
+     * Gets the value of the value property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getValue() {
+        return value;
+    }
+
+    /**
+     * Sets the value of the value property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    /**
+     * Gets the value of the networkResourceBandwidth property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link BigInteger }
+     *     
+     */
+    public BigInteger getNetworkResourceBandwidth() {
+        return networkResourceBandwidth;
+    }
+
+    /**
+     * Sets the value of the networkResourceBandwidth property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link BigInteger }
+     *     
+     */
+    public void setNetworkResourceBandwidth(BigInteger value) {
+        this.networkResourceBandwidth = value;
+    }
+
+}
diff --git a/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/NetworkInboundUsedType.java b/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/NetworkInboundUsedType.java
new file mode 100644
index 0000000..5a93ec3
--- /dev/null
+++ b/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/NetworkInboundUsedType.java
@@ -0,0 +1,101 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.11 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2018.01.04 at 04:15:49 PM GMT 
+//
+
+
+package org.apache.taverna.server.usagerecord.xml.urf2;
+
+import java.math.BigInteger;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlSchemaType;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlValue;
+
+/**
+ * Open Grid Forum GFD.204 Usage Record type <code>NetworkInboundUsedType</code>
+ * 
+ * @see <a href="https://www.ogf.org/documents/GFD.204.pdf#subsection.10.2">GFD.204 section 10.2</a>
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "NetworkInboundUsedType", propOrder = {
+    "value"
+})
+public class NetworkInboundUsedType {
+
+    @XmlValue
+    @XmlSchemaType(name = "nonNegativeInteger")
+    protected BigInteger value;
+    @XmlAttribute(name = "SourceAddress", namespace = "http://schema.ogf.org/urf/2013/04/urf")
+    protected String sourceAddress;
+
+    /**
+     * Gets the value of the value property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link BigInteger }
+     *     
+     */
+    public BigInteger getValue() {
+        return value;
+    }
+
+    /**
+     * Sets the value of the value property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link BigInteger }
+     *     
+     */
+    public void setValue(BigInteger value) {
+        this.value = value;
+    }
+
+    /**
+     * Gets the value of the sourceAddress property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getSourceAddress() {
+        return sourceAddress;
+    }
+
+    /**
+     * Sets the value of the sourceAddress property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setSourceAddress(String value) {
+        this.sourceAddress = value;
+    }
+
+}
diff --git a/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/NetworkOutboundUsedType.java b/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/NetworkOutboundUsedType.java
new file mode 100644
index 0000000..773b63a
--- /dev/null
+++ b/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/NetworkOutboundUsedType.java
@@ -0,0 +1,101 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.11 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2018.01.04 at 04:15:49 PM GMT 
+//
+
+
+package org.apache.taverna.server.usagerecord.xml.urf2;
+
+import java.math.BigInteger;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlSchemaType;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlValue;
+
+/**
+ * Open Grid Forum GFD.204 Usage Record type <code>NetworkOutboundUsedType</code>
+ * 
+ * @see <a href="https://www.ogf.org/documents/GFD.204.pdf#subsection.10.3">GFD.204 section 10.3</a>
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "NetworkOutboundUsedType", propOrder = {
+    "value"
+})
+public class NetworkOutboundUsedType {
+
+    @XmlValue
+    @XmlSchemaType(name = "nonNegativeInteger")
+    protected BigInteger value;
+    @XmlAttribute(name = "DestinationAddress", namespace = "http://schema.ogf.org/urf/2013/04/urf")
+    protected String destinationAddress;
+
+    /**
+     * Gets the value of the value property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link BigInteger }
+     *     
+     */
+    public BigInteger getValue() {
+        return value;
+    }
+
+    /**
+     * Sets the value of the value property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link BigInteger }
+     *     
+     */
+    public void setValue(BigInteger value) {
+        this.value = value;
+    }
+
+    /**
+     * Gets the value of the destinationAddress property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getDestinationAddress() {
+        return destinationAddress;
+    }
+
+    /**
+     * Sets the value of the destinationAddress property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setDestinationAddress(String value) {
+        this.destinationAddress = value;
+    }
+
+}
diff --git a/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/NetworkUsageBlockType.java b/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/NetworkUsageBlockType.java
new file mode 100644
index 0000000..53a710e
--- /dev/null
+++ b/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/NetworkUsageBlockType.java
@@ -0,0 +1,154 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.11 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2018.01.04 at 04:15:49 PM GMT 
+//
+
+
+package org.apache.taverna.server.usagerecord.xml.urf2;
+
+import java.math.BigDecimal;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * Open Grid Forum GFD.204 Usage Record type <code>NetworkUsageBlockType</code>
+ * 
+ * @see <a href="https://www.ogf.org/documents/GFD.204.pdf#section.10">GFD.204 section 10</a>
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "NetworkUsageBlockType", propOrder = {
+    "networkClass",
+    "networkInboundUsed",
+    "networkOutboundUsed",
+    "charge"
+})
+public class NetworkUsageBlockType {
+
+    @XmlElement(name = "NetworkClass", required = true)
+    protected NetworkClassType networkClass;
+    @XmlElement(name = "NetworkInboundUsed", required = true)
+    protected NetworkInboundUsedType networkInboundUsed;
+    @XmlElement(name = "NetworkOutboundUsed", required = true)
+    protected NetworkOutboundUsedType networkOutboundUsed;
+    @XmlElement(name = "Charge")
+    protected BigDecimal charge;
+
+    /**
+     * Gets the value of the networkClass property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link NetworkClassType }
+     *     
+     */
+    public NetworkClassType getNetworkClass() {
+        return networkClass;
+    }
+
+    /**
+     * Sets the value of the networkClass property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link NetworkClassType }
+     *     
+     */
+    public void setNetworkClass(NetworkClassType value) {
+        this.networkClass = value;
+    }
+
+    /**
+     * Gets the value of the networkInboundUsed property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link NetworkInboundUsedType }
+     *     
+     */
+    public NetworkInboundUsedType getNetworkInboundUsed() {
+        return networkInboundUsed;
+    }
+
+    /**
+     * Sets the value of the networkInboundUsed property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link NetworkInboundUsedType }
+     *     
+     */
+    public void setNetworkInboundUsed(NetworkInboundUsedType value) {
+        this.networkInboundUsed = value;
+    }
+
+    /**
+     * Gets the value of the networkOutboundUsed property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link NetworkOutboundUsedType }
+     *     
+     */
+    public NetworkOutboundUsedType getNetworkOutboundUsed() {
+        return networkOutboundUsed;
+    }
+
+    /**
+     * Sets the value of the networkOutboundUsed property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link NetworkOutboundUsedType }
+     *     
+     */
+    public void setNetworkOutboundUsed(NetworkOutboundUsedType value) {
+        this.networkOutboundUsed = value;
+    }
+
+    /**
+     * Gets the value of the charge property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link BigDecimal }
+     *     
+     */
+    public BigDecimal getCharge() {
+        return charge;
+    }
+
+    /**
+     * Sets the value of the charge property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link BigDecimal }
+     *     
+     */
+    public void setCharge(BigDecimal value) {
+        this.charge = value;
+    }
+
+}
diff --git a/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/ObjectFactory.java b/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/ObjectFactory.java
new file mode 100644
index 0000000..e50bbb8
--- /dev/null
+++ b/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/ObjectFactory.java
@@ -0,0 +1,850 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.11 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2018.01.04 at 04:15:49 PM GMT 
+//
+
+
+package org.apache.taverna.server.usagerecord.xml.urf2;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import javax.xml.bind.JAXBElement;
+import javax.xml.bind.annotation.XmlElementDecl;
+import javax.xml.bind.annotation.XmlRegistry;
+import javax.xml.datatype.Duration;
+import javax.xml.datatype.XMLGregorianCalendar;
+import javax.xml.namespace.QName;
+
+
+/**
+ * This object contains factory methods for each 
+ * Java content interface and Java element interface 
+ * generated in the org.apache.taverna.server.usagerecord.xml.urf2 package. 
+ * <p>An ObjectFactory allows you to programatically 
+ * construct new instances of the Java representation 
+ * for XML content. The Java representation of XML 
+ * content can consist of schema derived interfaces 
+ * and classes representing the binding of schema 
+ * type definitions, element declarations and model 
+ * groups.  Factory methods for each of these are 
+ * provided in this class.
+ * 
+ */
+@XmlRegistry
+public class ObjectFactory {
+
+    private final static QName _Usage_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "Usage");
+    private final static QName _UsageRecord_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "UsageRecord");
+    private final static QName _RecordIdentityBlock_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "RecordIdentityBlock");
+    private final static QName _SubjectIdentityBlock_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "SubjectIdentityBlock");
+    private final static QName _ComputeUsageBlock_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "ComputeUsageBlock");
+    private final static QName _JobUsageBlock_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "JobUsageBlock");
+    private final static QName _MemoryUsageBlock_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "MemoryUsageBlock");
+    private final static QName _StorageUsageBlock_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "StorageUsageBlock");
+    private final static QName _CloudUsageBlock_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "CloudUsageBlock");
+    private final static QName _NetworkUsageBlock_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "NetworkUsageBlock");
+    private final static QName _RecordId_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "RecordId");
+    private final static QName _CreateTime_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "CreateTime");
+    private final static QName _Site_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "Site");
+    private final static QName _Infrastructure_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "Infrastructure");
+    private final static QName _LocalUserId_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "LocalUserId");
+    private final static QName _LocalGroupId_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "LocalGroupId");
+    private final static QName _GlobalUserId_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "GlobalUserId");
+    private final static QName _GlobalGroupId_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "GlobalGroupId");
+    private final static QName _GlobalGroupAttribute_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "GlobalGroupAttribute");
+    private final static QName _CpuDuration_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "CpuDuration");
+    private final static QName _WallDuration_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "WallDuration");
+    private final static QName _StartTime_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "StartTime");
+    private final static QName _EndTime_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "EndTime");
+    private final static QName _ExecutionHost_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "ExecutionHost");
+    private final static QName _HostType_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "HostType");
+    private final static QName _Processors_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "Processors");
+    private final static QName _NodeCount_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "NodeCount");
+    private final static QName _ExitStatus_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "ExitStatus");
+    private final static QName _Charge_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "Charge");
+    private final static QName _Hostname_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "Hostname");
+    private final static QName _ProcessId_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "ProcessId");
+    private final static QName _Benchmark_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "Benchmark");
+    private final static QName _GlobalJobId_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "GlobalJobId");
+    private final static QName _LocalJobId_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "LocalJobId");
+    private final static QName _JobName_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "JobName");
+    private final static QName _MachineName_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "MachineName");
+    private final static QName _SubmitHost_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "SubmitHost");
+    private final static QName _SubmitType_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "SubmitType");
+    private final static QName _Queue_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "Queue");
+    private final static QName _TimeInstant_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "TimeInstant");
+    private final static QName _ServiceLevel_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "ServiceLevel");
+    private final static QName _Status_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "Status");
+    private final static QName _MemoryClass_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "MemoryClass");
+    private final static QName _MemoryResourceCapacityUsed_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "MemoryResourceCapacityUsed");
+    private final static QName _MemoryResourceCapacityAllocated_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "MemoryResourceCapacityAllocated");
+    private final static QName _MemoryResourceCapacityRequested_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "MemoryResourceCapacityRequested");
+    private final static QName _StorageShare_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "StorageShare");
+    private final static QName _StorageMedia_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "StorageMedia");
+    private final static QName _StorageClass_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "StorageClass");
+    private final static QName _DirectoryPath_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "DirectoryPath");
+    private final static QName _FileCount_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "FileCount");
+    private final static QName _StorageResourceCapacityUsed_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "StorageResourceCapacityUsed");
+    private final static QName _StorageLogicalCapacityUsed_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "StorageLogicalCapacityUsed");
+    private final static QName _StorageResourceCapacityAllocated_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "StorageResourceCapacityAllocated");
+    private final static QName _Host_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "Host");
+    private final static QName _LocalVirtualMachineId_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "LocalVirtualMachineId");
+    private final static QName _GlobalVirtualMachineId_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "GlobalVirtualMachineId");
+    private final static QName _SuspendDuration_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "SuspendDuration");
+    private final static QName _ImageId_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "ImageId");
+    private final static QName _NetworkClass_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "NetworkClass");
+    private final static QName _NetworkInboundUsed_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "NetworkInboundUsed");
+    private final static QName _NetworkOutboundUsed_QNAME = new QName("http://schema.ogf.org/urf/2013/04/urf", "NetworkOutboundUsed");
+
+    /**
+     * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: org.apache.taverna.server.usagerecord.xml.urf2
+     * 
+     */
+    public ObjectFactory() {
+    }
+
+    /**
+     * Create an instance of {@link UsageRecordType }
+     * 
+     */
+    public UsageRecordType createUsageRecordType() {
+        return new UsageRecordType();
+    }
+
+    /**
+     * Create an instance of {@link UsageRecords }
+     * 
+     */
+    public UsageRecords createUsageRecords() {
+        return new UsageRecords();
+    }
+
+    /**
+     * Create an instance of {@link RecordIdentityBlockType }
+     * 
+     */
+    public RecordIdentityBlockType createRecordIdentityBlockType() {
+        return new RecordIdentityBlockType();
+    }
+
+    /**
+     * Create an instance of {@link SubjectIdentityBlockType }
+     * 
+     */
+    public SubjectIdentityBlockType createSubjectIdentityBlockType() {
+        return new SubjectIdentityBlockType();
+    }
+
+    /**
+     * Create an instance of {@link ComputeUsageBlockType }
+     * 
+     */
+    public ComputeUsageBlockType createComputeUsageBlockType() {
+        return new ComputeUsageBlockType();
+    }
+
+    /**
+     * Create an instance of {@link JobUsageBlockType }
+     * 
+     */
+    public JobUsageBlockType createJobUsageBlockType() {
+        return new JobUsageBlockType();
+    }
+
+    /**
+     * Create an instance of {@link MemoryUsageBlockType }
+     * 
+     */
+    public MemoryUsageBlockType createMemoryUsageBlockType() {
+        return new MemoryUsageBlockType();
+    }
+
+    /**
+     * Create an instance of {@link StorageUsageBlockType }
+     * 
+     */
+    public StorageUsageBlockType createStorageUsageBlockType() {
+        return new StorageUsageBlockType();
+    }
+
+    /**
+     * Create an instance of {@link CloudUsageBlockType }
+     * 
+     */
+    public CloudUsageBlockType createCloudUsageBlockType() {
+        return new CloudUsageBlockType();
+    }
+
+    /**
+     * Create an instance of {@link NetworkUsageBlockType }
+     * 
+     */
+    public NetworkUsageBlockType createNetworkUsageBlockType() {
+        return new NetworkUsageBlockType();
+    }
+
+    /**
+     * Create an instance of {@link InfrastructureType }
+     * 
+     */
+    public InfrastructureType createInfrastructureType() {
+        return new InfrastructureType();
+    }
+
+    /**
+     * Create an instance of {@link GlobalGroupAttributeType }
+     * 
+     */
+    public GlobalGroupAttributeType createGlobalGroupAttributeType() {
+        return new GlobalGroupAttributeType();
+    }
+
+    /**
+     * Create an instance of {@link ExecutionHostType }
+     * 
+     */
+    public ExecutionHostType createExecutionHostType() {
+        return new ExecutionHostType();
+    }
+
+    /**
+     * Create an instance of {@link HostnameType }
+     * 
+     */
+    public HostnameType createHostnameType() {
+        return new HostnameType();
+    }
+
+    /**
+     * Create an instance of {@link BenchmarkType }
+     * 
+     */
+    public BenchmarkType createBenchmarkType() {
+        return new BenchmarkType();
+    }
+
+    /**
+     * Create an instance of {@link SubmitTypeType }
+     * 
+     */
+    public SubmitTypeType createSubmitTypeType() {
+        return new SubmitTypeType();
+    }
+
+    /**
+     * Create an instance of {@link QueueType }
+     * 
+     */
+    public QueueType createQueueType() {
+        return new QueueType();
+    }
+
+    /**
+     * Create an instance of {@link TimeInstantType }
+     * 
+     */
+    public TimeInstantType createTimeInstantType() {
+        return new TimeInstantType();
+    }
+
+    /**
+     * Create an instance of {@link NetworkClassType }
+     * 
+     */
+    public NetworkClassType createNetworkClassType() {
+        return new NetworkClassType();
+    }
+
+    /**
+     * Create an instance of {@link NetworkInboundUsedType }
+     * 
+     */
+    public NetworkInboundUsedType createNetworkInboundUsedType() {
+        return new NetworkInboundUsedType();
+    }
+
+    /**
+     * Create an instance of {@link NetworkOutboundUsedType }
+     * 
+     */
+    public NetworkOutboundUsedType createNetworkOutboundUsedType() {
+        return new NetworkOutboundUsedType();
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link UsageRecordType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "Usage")
+    public JAXBElement<UsageRecordType> createUsage(UsageRecordType value) {
+        return new JAXBElement<UsageRecordType>(_Usage_QNAME, UsageRecordType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link UsageRecordType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "UsageRecord", substitutionHeadNamespace = "http://schema.ogf.org/urf/2013/04/urf", substitutionHeadName = "Usage")
+    public JAXBElement<UsageRecordType> createUsageRecord(UsageRecordType value) {
+        return new JAXBElement<UsageRecordType>(_UsageRecord_QNAME, UsageRecordType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link RecordIdentityBlockType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "RecordIdentityBlock")
+    public JAXBElement<RecordIdentityBlockType> createRecordIdentityBlock(RecordIdentityBlockType value) {
+        return new JAXBElement<RecordIdentityBlockType>(_RecordIdentityBlock_QNAME, RecordIdentityBlockType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link SubjectIdentityBlockType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "SubjectIdentityBlock")
+    public JAXBElement<SubjectIdentityBlockType> createSubjectIdentityBlock(SubjectIdentityBlockType value) {
+        return new JAXBElement<SubjectIdentityBlockType>(_SubjectIdentityBlock_QNAME, SubjectIdentityBlockType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link ComputeUsageBlockType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "ComputeUsageBlock")
+    public JAXBElement<ComputeUsageBlockType> createComputeUsageBlock(ComputeUsageBlockType value) {
+        return new JAXBElement<ComputeUsageBlockType>(_ComputeUsageBlock_QNAME, ComputeUsageBlockType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link JobUsageBlockType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "JobUsageBlock")
+    public JAXBElement<JobUsageBlockType> createJobUsageBlock(JobUsageBlockType value) {
+        return new JAXBElement<JobUsageBlockType>(_JobUsageBlock_QNAME, JobUsageBlockType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link MemoryUsageBlockType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "MemoryUsageBlock")
+    public JAXBElement<MemoryUsageBlockType> createMemoryUsageBlock(MemoryUsageBlockType value) {
+        return new JAXBElement<MemoryUsageBlockType>(_MemoryUsageBlock_QNAME, MemoryUsageBlockType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link StorageUsageBlockType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "StorageUsageBlock")
+    public JAXBElement<StorageUsageBlockType> createStorageUsageBlock(StorageUsageBlockType value) {
+        return new JAXBElement<StorageUsageBlockType>(_StorageUsageBlock_QNAME, StorageUsageBlockType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link CloudUsageBlockType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "CloudUsageBlock")
+    public JAXBElement<CloudUsageBlockType> createCloudUsageBlock(CloudUsageBlockType value) {
+        return new JAXBElement<CloudUsageBlockType>(_CloudUsageBlock_QNAME, CloudUsageBlockType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link NetworkUsageBlockType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "NetworkUsageBlock")
+    public JAXBElement<NetworkUsageBlockType> createNetworkUsageBlock(NetworkUsageBlockType value) {
+        return new JAXBElement<NetworkUsageBlockType>(_NetworkUsageBlock_QNAME, NetworkUsageBlockType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "RecordId")
+    public JAXBElement<String> createRecordId(String value) {
+        return new JAXBElement<String>(_RecordId_QNAME, String.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link XMLGregorianCalendar }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "CreateTime")
+    public JAXBElement<XMLGregorianCalendar> createCreateTime(XMLGregorianCalendar value) {
+        return new JAXBElement<XMLGregorianCalendar>(_CreateTime_QNAME, XMLGregorianCalendar.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "Site")
+    public JAXBElement<String> createSite(String value) {
+        return new JAXBElement<String>(_Site_QNAME, String.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link InfrastructureType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "Infrastructure")
+    public JAXBElement<InfrastructureType> createInfrastructure(InfrastructureType value) {
+        return new JAXBElement<InfrastructureType>(_Infrastructure_QNAME, InfrastructureType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "LocalUserId")
+    public JAXBElement<String> createLocalUserId(String value) {
+        return new JAXBElement<String>(_LocalUserId_QNAME, String.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "LocalGroupId")
+    public JAXBElement<String> createLocalGroupId(String value) {
+        return new JAXBElement<String>(_LocalGroupId_QNAME, String.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "GlobalUserId")
+    public JAXBElement<String> createGlobalUserId(String value) {
+        return new JAXBElement<String>(_GlobalUserId_QNAME, String.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "GlobalGroupId")
+    public JAXBElement<String> createGlobalGroupId(String value) {
+        return new JAXBElement<String>(_GlobalGroupId_QNAME, String.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link GlobalGroupAttributeType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "GlobalGroupAttribute")
+    public JAXBElement<GlobalGroupAttributeType> createGlobalGroupAttribute(GlobalGroupAttributeType value) {
+        return new JAXBElement<GlobalGroupAttributeType>(_GlobalGroupAttribute_QNAME, GlobalGroupAttributeType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link Duration }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "CpuDuration")
+    public JAXBElement<Duration> createCpuDuration(Duration value) {
+        return new JAXBElement<Duration>(_CpuDuration_QNAME, Duration.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link Duration }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "WallDuration")
+    public JAXBElement<Duration> createWallDuration(Duration value) {
+        return new JAXBElement<Duration>(_WallDuration_QNAME, Duration.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link XMLGregorianCalendar }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "StartTime")
+    public JAXBElement<XMLGregorianCalendar> createStartTime(XMLGregorianCalendar value) {
+        return new JAXBElement<XMLGregorianCalendar>(_StartTime_QNAME, XMLGregorianCalendar.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link XMLGregorianCalendar }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "EndTime")
+    public JAXBElement<XMLGregorianCalendar> createEndTime(XMLGregorianCalendar value) {
+        return new JAXBElement<XMLGregorianCalendar>(_EndTime_QNAME, XMLGregorianCalendar.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link ExecutionHostType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "ExecutionHost")
+    public JAXBElement<ExecutionHostType> createExecutionHost(ExecutionHostType value) {
+        return new JAXBElement<ExecutionHostType>(_ExecutionHost_QNAME, ExecutionHostType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "HostType")
+    public JAXBElement<String> createHostType(String value) {
+        return new JAXBElement<String>(_HostType_QNAME, String.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link BigInteger }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "Processors")
+    public JAXBElement<BigInteger> createProcessors(BigInteger value) {
+        return new JAXBElement<BigInteger>(_Processors_QNAME, BigInteger.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link BigInteger }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "NodeCount")
+    public JAXBElement<BigInteger> createNodeCount(BigInteger value) {
+        return new JAXBElement<BigInteger>(_NodeCount_QNAME, BigInteger.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link BigInteger }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "ExitStatus")
+    public JAXBElement<BigInteger> createExitStatus(BigInteger value) {
+        return new JAXBElement<BigInteger>(_ExitStatus_QNAME, BigInteger.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link BigDecimal }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "Charge")
+    public JAXBElement<BigDecimal> createCharge(BigDecimal value) {
+        return new JAXBElement<BigDecimal>(_Charge_QNAME, BigDecimal.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link HostnameType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "Hostname")
+    public JAXBElement<HostnameType> createHostname(HostnameType value) {
+        return new JAXBElement<HostnameType>(_Hostname_QNAME, HostnameType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link BigInteger }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "ProcessId")
+    public JAXBElement<BigInteger> createProcessId(BigInteger value) {
+        return new JAXBElement<BigInteger>(_ProcessId_QNAME, BigInteger.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link BenchmarkType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "Benchmark")
+    public JAXBElement<BenchmarkType> createBenchmark(BenchmarkType value) {
+        return new JAXBElement<BenchmarkType>(_Benchmark_QNAME, BenchmarkType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "GlobalJobId")
+    public JAXBElement<String> createGlobalJobId(String value) {
+        return new JAXBElement<String>(_GlobalJobId_QNAME, String.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "LocalJobId")
+    public JAXBElement<String> createLocalJobId(String value) {
+        return new JAXBElement<String>(_LocalJobId_QNAME, String.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "JobName")
+    public JAXBElement<String> createJobName(String value) {
+        return new JAXBElement<String>(_JobName_QNAME, String.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "MachineName")
+    public JAXBElement<String> createMachineName(String value) {
+        return new JAXBElement<String>(_MachineName_QNAME, String.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "SubmitHost")
+    public JAXBElement<String> createSubmitHost(String value) {
+        return new JAXBElement<String>(_SubmitHost_QNAME, String.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link SubmitTypeType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "SubmitType")
+    public JAXBElement<SubmitTypeType> createSubmitType(SubmitTypeType value) {
+        return new JAXBElement<SubmitTypeType>(_SubmitType_QNAME, SubmitTypeType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link QueueType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "Queue")
+    public JAXBElement<QueueType> createQueue(QueueType value) {
+        return new JAXBElement<QueueType>(_Queue_QNAME, QueueType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link TimeInstantType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "TimeInstant")
+    public JAXBElement<TimeInstantType> createTimeInstant(TimeInstantType value) {
+        return new JAXBElement<TimeInstantType>(_TimeInstant_QNAME, TimeInstantType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "ServiceLevel")
+    public JAXBElement<String> createServiceLevel(String value) {
+        return new JAXBElement<String>(_ServiceLevel_QNAME, String.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "Status")
+    public JAXBElement<String> createStatus(String value) {
+        return new JAXBElement<String>(_Status_QNAME, String.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "MemoryClass")
+    public JAXBElement<String> createMemoryClass(String value) {
+        return new JAXBElement<String>(_MemoryClass_QNAME, String.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link BigInteger }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "MemoryResourceCapacityUsed")
+    public JAXBElement<BigInteger> createMemoryResourceCapacityUsed(BigInteger value) {
+        return new JAXBElement<BigInteger>(_MemoryResourceCapacityUsed_QNAME, BigInteger.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link BigInteger }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "MemoryResourceCapacityAllocated")
+    public JAXBElement<BigInteger> createMemoryResourceCapacityAllocated(BigInteger value) {
+        return new JAXBElement<BigInteger>(_MemoryResourceCapacityAllocated_QNAME, BigInteger.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link BigInteger }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "MemoryResourceCapacityRequested")
+    public JAXBElement<BigInteger> createMemoryResourceCapacityRequested(BigInteger value) {
+        return new JAXBElement<BigInteger>(_MemoryResourceCapacityRequested_QNAME, BigInteger.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "StorageShare")
+    public JAXBElement<String> createStorageShare(String value) {
+        return new JAXBElement<String>(_StorageShare_QNAME, String.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "StorageMedia")
+    public JAXBElement<String> createStorageMedia(String value) {
+        return new JAXBElement<String>(_StorageMedia_QNAME, String.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "StorageClass")
+    public JAXBElement<String> createStorageClass(String value) {
+        return new JAXBElement<String>(_StorageClass_QNAME, String.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "DirectoryPath")
+    public JAXBElement<String> createDirectoryPath(String value) {
+        return new JAXBElement<String>(_DirectoryPath_QNAME, String.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link BigInteger }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "FileCount")
+    public JAXBElement<BigInteger> createFileCount(BigInteger value) {
+        return new JAXBElement<BigInteger>(_FileCount_QNAME, BigInteger.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link BigInteger }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "StorageResourceCapacityUsed")
+    public JAXBElement<BigInteger> createStorageResourceCapacityUsed(BigInteger value) {
+        return new JAXBElement<BigInteger>(_StorageResourceCapacityUsed_QNAME, BigInteger.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link BigInteger }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "StorageLogicalCapacityUsed")
+    public JAXBElement<BigInteger> createStorageLogicalCapacityUsed(BigInteger value) {
+        return new JAXBElement<BigInteger>(_StorageLogicalCapacityUsed_QNAME, BigInteger.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link BigInteger }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "StorageResourceCapacityAllocated")
+    public JAXBElement<BigInteger> createStorageResourceCapacityAllocated(BigInteger value) {
+        return new JAXBElement<BigInteger>(_StorageResourceCapacityAllocated_QNAME, BigInteger.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "Host")
+    public JAXBElement<String> createHost(String value) {
+        return new JAXBElement<String>(_Host_QNAME, String.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "LocalVirtualMachineId")
+    public JAXBElement<String> createLocalVirtualMachineId(String value) {
+        return new JAXBElement<String>(_LocalVirtualMachineId_QNAME, String.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "GlobalVirtualMachineId")
+    public JAXBElement<String> createGlobalVirtualMachineId(String value) {
+        return new JAXBElement<String>(_GlobalVirtualMachineId_QNAME, String.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link Duration }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "SuspendDuration")
+    public JAXBElement<Duration> createSuspendDuration(Duration value) {
+        return new JAXBElement<Duration>(_SuspendDuration_QNAME, Duration.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "ImageId")
+    public JAXBElement<String> createImageId(String value) {
+        return new JAXBElement<String>(_ImageId_QNAME, String.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link NetworkClassType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "NetworkClass")
+    public JAXBElement<NetworkClassType> createNetworkClass(NetworkClassType value) {
+        return new JAXBElement<NetworkClassType>(_NetworkClass_QNAME, NetworkClassType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link NetworkInboundUsedType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "NetworkInboundUsed")
+    public JAXBElement<NetworkInboundUsedType> createNetworkInboundUsed(NetworkInboundUsedType value) {
+        return new JAXBElement<NetworkInboundUsedType>(_NetworkInboundUsed_QNAME, NetworkInboundUsedType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link NetworkOutboundUsedType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://schema.ogf.org/urf/2013/04/urf", name = "NetworkOutboundUsed")
+    public JAXBElement<NetworkOutboundUsedType> createNetworkOutboundUsed(NetworkOutboundUsedType value) {
+        return new JAXBElement<NetworkOutboundUsedType>(_NetworkOutboundUsed_QNAME, NetworkOutboundUsedType.class, null, value);
+    }
+
+}
diff --git a/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/QueueType.java b/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/QueueType.java
new file mode 100644
index 0000000..96c12d1
--- /dev/null
+++ b/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/QueueType.java
@@ -0,0 +1,99 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.11 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2018.01.04 at 04:15:49 PM GMT 
+//
+
+
+package org.apache.taverna.server.usagerecord.xml.urf2;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlValue;
+
+
+/**
+ * Open Grid Forum GFD.204 Usage Record type <code>QueueType</code>
+ * 
+ * @see <a href="https://www.ogf.org/documents/GFD.204.pdf#subsection.6.7">GFD.204 section 6.7</a>
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "QueueType", propOrder = {
+    "value"
+})
+public class QueueType {
+
+    @XmlValue
+    protected String value;
+    @XmlAttribute(name = "description", namespace = "http://schema.ogf.org/urf/2013/04/urf")
+    protected String description;
+
+    /**
+     * Gets the value of the value property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getValue() {
+        return value;
+    }
+
+    /**
+     * Sets the value of the value property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    /**
+     * Gets the value of the description property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getDescription() {
+        return description;
+    }
+
+    /**
+     * Sets the value of the description property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setDescription(String value) {
+        this.description = value;
+    }
+
+}
diff --git a/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/RecordIdentityBlockType.java b/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/RecordIdentityBlockType.java
new file mode 100644
index 0000000..ba5ba28
--- /dev/null
+++ b/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/RecordIdentityBlockType.java
@@ -0,0 +1,156 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.11 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2018.01.04 at 04:15:49 PM GMT 
+//
+
+
+package org.apache.taverna.server.usagerecord.xml.urf2;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlSchemaType;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.datatype.XMLGregorianCalendar;
+
+
+/**
+ * Open Grid Forum GFD.204 Usage Record type <code>RecordIdentityBlockType</code>
+ * 
+ * @see <a href="https://www.ogf.org/documents/GFD.204.pdf#section.3">GFD.204 section 3</a>
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "RecordIdentityBlockType", propOrder = {
+    "recordId",
+    "createTime",
+    "site",
+    "infrastructure"
+})
+public class RecordIdentityBlockType {
+
+    @XmlElement(name = "RecordId", required = true)
+    protected String recordId;
+    @XmlElement(name = "CreateTime", required = true)
+    @XmlSchemaType(name = "dateTime")
+    protected XMLGregorianCalendar createTime;
+    @XmlElement(name = "Site")
+    protected String site;
+    @XmlElement(name = "Infrastructure")
+    protected InfrastructureType infrastructure;
+
+    /**
+     * Gets the value of the recordId property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getRecordId() {
+        return recordId;
+    }
+
+    /**
+     * Sets the value of the recordId property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setRecordId(String value) {
+        this.recordId = value;
+    }
+
+    /**
+     * Gets the value of the createTime property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link XMLGregorianCalendar }
+     *     
+     */
+    public XMLGregorianCalendar getCreateTime() {
+        return createTime;
+    }
+
+    /**
+     * Sets the value of the createTime property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link XMLGregorianCalendar }
+     *     
+     */
+    public void setCreateTime(XMLGregorianCalendar value) {
+        this.createTime = value;
+    }
+
+    /**
+     * Gets the value of the site property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getSite() {
+        return site;
+    }
+
+    /**
+     * Sets the value of the site property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setSite(String value) {
+        this.site = value;
+    }
+
+    /**
+     * Gets the value of the infrastructure property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link InfrastructureType }
+     *     
+     */
+    public InfrastructureType getInfrastructure() {
+        return infrastructure;
+    }
+
+    /**
+     * Sets the value of the infrastructure property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link InfrastructureType }
+     *     
+     */
+    public void setInfrastructure(InfrastructureType value) {
+        this.infrastructure = value;
+    }
+
+}
diff --git a/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/StorageUsageBlockType.java b/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/StorageUsageBlockType.java
new file mode 100644
index 0000000..a87a598
--- /dev/null
+++ b/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/StorageUsageBlockType.java
@@ -0,0 +1,406 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.11 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2018.01.04 at 04:15:49 PM GMT 
+//
+
+
+package org.apache.taverna.server.usagerecord.xml.urf2;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlSchemaType;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.datatype.XMLGregorianCalendar;
+
+
+/**
+ * Open Grid Forum GFD.204 Usage Record type <code>StorageUsageBlockType</code>
+ * 
+ * @see <a href="https://www.ogf.org/documents/GFD.204.pdf#section.8">GFD.204 section 8</a>
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "StorageUsageBlockType", propOrder = {
+    "storageShare",
+    "storageMedia",
+    "storageClass",
+    "directoryPath",
+    "fileCount",
+    "storageResourceCapacityUsed",
+    "storageLogicalCapacityUsed",
+    "storageResourceCapacityAllocated",
+    "startTime",
+    "endTime",
+    "host",
+    "hostType",
+    "charge"
+})
+public class StorageUsageBlockType {
+
+    @XmlElement(name = "StorageShare")
+    protected String storageShare;
+    @XmlElement(name = "StorageMedia")
+    protected String storageMedia;
+    @XmlElement(name = "StorageClass")
+    protected String storageClass;
+    @XmlElement(name = "DirectoryPath")
+    protected String directoryPath;
+    @XmlElement(name = "FileCount")
+    @XmlSchemaType(name = "positiveInteger")
+    protected BigInteger fileCount;
+    @XmlElement(name = "StorageResourceCapacityUsed", required = true)
+    @XmlSchemaType(name = "nonNegativeInteger")
+    protected BigInteger storageResourceCapacityUsed;
+    @XmlElement(name = "StorageLogicalCapacityUsed")
+    @XmlSchemaType(name = "nonNegativeInteger")
+    protected BigInteger storageLogicalCapacityUsed;
+    @XmlElement(name = "StorageResourceCapacityAllocated")
+    @XmlSchemaType(name = "nonNegativeInteger")
+    protected BigInteger storageResourceCapacityAllocated;
+    @XmlElement(name = "StartTime", required = true)
+    @XmlSchemaType(name = "dateTime")
+    protected XMLGregorianCalendar startTime;
+    @XmlElement(name = "EndTime", required = true)
+    @XmlSchemaType(name = "dateTime")
+    protected XMLGregorianCalendar endTime;
+    @XmlElement(name = "Host")
+    protected String host;
+    @XmlElement(name = "HostType")
+    protected String hostType;
+    @XmlElement(name = "Charge")
+    protected BigDecimal charge;
+
+    /**
+     * Gets the value of the storageShare property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getStorageShare() {
+        return storageShare;
+    }
+
+    /**
+     * Sets the value of the storageShare property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setStorageShare(String value) {
+        this.storageShare = value;
+    }
+
+    /**
+     * Gets the value of the storageMedia property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getStorageMedia() {
+        return storageMedia;
+    }
+
+    /**
+     * Sets the value of the storageMedia property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setStorageMedia(String value) {
+        this.storageMedia = value;
+    }
+
+    /**
+     * Gets the value of the storageClass property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getStorageClass() {
+        return storageClass;
+    }
+
+    /**
+     * Sets the value of the storageClass property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setStorageClass(String value) {
+        this.storageClass = value;
+    }
+
+    /**
+     * Gets the value of the directoryPath property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getDirectoryPath() {
+        return directoryPath;
+    }
+
+    /**
+     * Sets the value of the directoryPath property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setDirectoryPath(String value) {
+        this.directoryPath = value;
+    }
+
+    /**
+     * Gets the value of the fileCount property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link BigInteger }
+     *     
+     */
+    public BigInteger getFileCount() {
+        return fileCount;
+    }
+
+    /**
+     * Sets the value of the fileCount property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link BigInteger }
+     *     
+     */
+    public void setFileCount(BigInteger value) {
+        this.fileCount = value;
+    }
+
+    /**
+     * Gets the value of the storageResourceCapacityUsed property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link BigInteger }
+     *     
+     */
+    public BigInteger getStorageResourceCapacityUsed() {
+        return storageResourceCapacityUsed;
+    }
+
+    /**
+     * Sets the value of the storageResourceCapacityUsed property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link BigInteger }
+     *     
+     */
+    public void setStorageResourceCapacityUsed(BigInteger value) {
+        this.storageResourceCapacityUsed = value;
+    }
+
+    /**
+     * Gets the value of the storageLogicalCapacityUsed property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link BigInteger }
+     *     
+     */
+    public BigInteger getStorageLogicalCapacityUsed() {
+        return storageLogicalCapacityUsed;
+    }
+
+    /**
+     * Sets the value of the storageLogicalCapacityUsed property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link BigInteger }
+     *     
+     */
+    public void setStorageLogicalCapacityUsed(BigInteger value) {
+        this.storageLogicalCapacityUsed = value;
+    }
+
+    /**
+     * Gets the value of the storageResourceCapacityAllocated property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link BigInteger }
+     *     
+     */
+    public BigInteger getStorageResourceCapacityAllocated() {
+        return storageResourceCapacityAllocated;
+    }
+
+    /**
+     * Sets the value of the storageResourceCapacityAllocated property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link BigInteger }
+     *     
+     */
+    public void setStorageResourceCapacityAllocated(BigInteger value) {
+        this.storageResourceCapacityAllocated = value;
+    }
+
+    /**
+     * Gets the value of the startTime property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link XMLGregorianCalendar }
+     *     
+     */
+    public XMLGregorianCalendar getStartTime() {
+        return startTime;
+    }
+
+    /**
+     * Sets the value of the startTime property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link XMLGregorianCalendar }
+     *     
+     */
+    public void setStartTime(XMLGregorianCalendar value) {
+        this.startTime = value;
+    }
+
+    /**
+     * Gets the value of the endTime property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link XMLGregorianCalendar }
+     *     
+     */
+    public XMLGregorianCalendar getEndTime() {
+        return endTime;
+    }
+
+    /**
+     * Sets the value of the endTime property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link XMLGregorianCalendar }
+     *     
+     */
+    public void setEndTime(XMLGregorianCalendar value) {
+        this.endTime = value;
+    }
+
+    /**
+     * Gets the value of the host property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getHost() {
+        return host;
+    }
+
+    /**
+     * Sets the value of the host property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setHost(String value) {
+        this.host = value;
+    }
+
+    /**
+     * Gets the value of the hostType property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getHostType() {
+        return hostType;
+    }
+
+    /**
+     * Sets the value of the hostType property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setHostType(String value) {
+        this.hostType = value;
+    }
+
+    /**
+     * Gets the value of the charge property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link BigDecimal }
+     *     
+     */
+    public BigDecimal getCharge() {
+        return charge;
+    }
+
+    /**
+     * Sets the value of the charge property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link BigDecimal }
+     *     
+     */
+    public void setCharge(BigDecimal value) {
+        this.charge = value;
+    }
+
+}
diff --git a/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/SubjectIdentityBlockType.java b/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/SubjectIdentityBlockType.java
new file mode 100644
index 0000000..7a5cdb6
--- /dev/null
+++ b/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/SubjectIdentityBlockType.java
@@ -0,0 +1,186 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.11 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2018.01.04 at 04:15:49 PM GMT 
+//
+
+
+package org.apache.taverna.server.usagerecord.xml.urf2;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+/**
+ * Open Grid Forum GFD.204 Usage Record type <code>SubjectIdentityBlockType</code>
+ * 
+ * @see <a href="https://www.ogf.org/documents/GFD.204.pdf#section.4">GFD.204 section 4</a>
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "SubjectIdentityBlockType", propOrder = {
+    "localUserId",
+    "localGroupId",
+    "globalUserId",
+    "globalGroupId",
+    "globalGroupAttribute"
+})
+public class SubjectIdentityBlockType {
+
+    @XmlElement(name = "LocalUserId")
+    protected String localUserId;
+    @XmlElement(name = "LocalGroupId")
+    protected String localGroupId;
+    @XmlElement(name = "GlobalUserId")
+    protected String globalUserId;
+    @XmlElement(name = "GlobalGroupId")
+    protected String globalGroupId;
+    @XmlElement(name = "GlobalGroupAttribute")
+    protected List<GlobalGroupAttributeType> globalGroupAttribute;
+
+    /**
+     * Gets the value of the localUserId property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getLocalUserId() {
+        return localUserId;
+    }
+
+    /**
+     * Sets the value of the localUserId property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setLocalUserId(String value) {
+        this.localUserId = value;
+    }
+
+    /**
+     * Gets the value of the localGroupId property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getLocalGroupId() {
+        return localGroupId;
+    }
+
+    /**
+     * Sets the value of the localGroupId property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setLocalGroupId(String value) {
+        this.localGroupId = value;
+    }
+
+    /**
+     * Gets the value of the globalUserId property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getGlobalUserId() {
+        return globalUserId;
+    }
+
+    /**
+     * Sets the value of the globalUserId property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setGlobalUserId(String value) {
+        this.globalUserId = value;
+    }
+
+    /**
+     * Gets the value of the globalGroupId property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getGlobalGroupId() {
+        return globalGroupId;
+    }
+
+    /**
+     * Sets the value of the globalGroupId property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setGlobalGroupId(String value) {
+        this.globalGroupId = value;
+    }
+
+    /**
+     * Gets the value of the globalGroupAttribute property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list,
+     * not a snapshot. Therefore any modification you make to the
+     * returned list will be present inside the JAXB object.
+     * This is why there is not a <CODE>set</CODE> method for the globalGroupAttribute property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * <pre>
+     *    getGlobalGroupAttribute().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link GlobalGroupAttributeType }
+     * 
+     * 
+     */
+    public List<GlobalGroupAttributeType> getGlobalGroupAttribute() {
+        if (globalGroupAttribute == null) {
+            globalGroupAttribute = new ArrayList<GlobalGroupAttributeType>();
+        }
+        return this.globalGroupAttribute;
+    }
+
+}
diff --git a/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/SubmitTypeType.java b/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/SubmitTypeType.java
new file mode 100644
index 0000000..decf6e9
--- /dev/null
+++ b/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/SubmitTypeType.java
@@ -0,0 +1,98 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.11 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2018.01.04 at 04:15:49 PM GMT 
+//
+
+
+package org.apache.taverna.server.usagerecord.xml.urf2;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlValue;
+
+/**
+ * Open Grid Forum GFD.204 Usage Record type <code>SubmitTypeType</code>
+ * 
+ * @see <a href="https://www.ogf.org/documents/GFD.204.pdf#subsection.6.6">GFD.204 section 6.6</a>
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "SubmitTypeType", propOrder = {
+    "value"
+})
+public class SubmitTypeType {
+
+    @XmlValue
+    protected String value;
+    @XmlAttribute(name = "description", namespace = "http://schema.ogf.org/urf/2013/04/urf")
+    protected String description;
+
+    /**
+     * Gets the value of the value property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getValue() {
+        return value;
+    }
+
+    /**
+     * Sets the value of the value property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    /**
+     * Gets the value of the description property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getDescription() {
+        return description;
+    }
+
+    /**
+     * Sets the value of the description property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setDescription(String value) {
+        this.description = value;
+    }
+
+}
diff --git a/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/TimeInstantType.java b/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/TimeInstantType.java
new file mode 100644
index 0000000..f5d4980
--- /dev/null
+++ b/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/TimeInstantType.java
@@ -0,0 +1,102 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.11 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2018.01.04 at 04:15:49 PM GMT 
+//
+
+
+package org.apache.taverna.server.usagerecord.xml.urf2;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlSchemaType;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlValue;
+import javax.xml.datatype.XMLGregorianCalendar;
+
+
+/**
+ * Open Grid Forum GFD.204 Usage Record type <code>TimeInstantType</code>
+ * 
+ * @see <a href="https://www.ogf.org/documents/GFD.204.pdf#subsection.6.8">GFD.204 section 6.8</a>
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "TimeInstantType", propOrder = {
+    "value"
+})
+public class TimeInstantType {
+
+    @XmlValue
+    @XmlSchemaType(name = "dateTime")
+    protected XMLGregorianCalendar value;
+    @XmlAttribute(name = "type", namespace = "http://schema.ogf.org/urf/2013/04/urf")
+    protected String type;
+
+    /**
+     * Gets the value of the value property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link XMLGregorianCalendar }
+     *     
+     */
+    public XMLGregorianCalendar getValue() {
+        return value;
+    }
+
+    /**
+     * Sets the value of the value property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link XMLGregorianCalendar }
+     *     
+     */
+    public void setValue(XMLGregorianCalendar value) {
+        this.value = value;
+    }
+
+    /**
+     * Gets the value of the type property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getType() {
+        return type;
+    }
+
+    /**
+     * Sets the value of the type property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setType(String value) {
+        this.type = value;
+    }
+
+}
diff --git a/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/UsageRecordType.java b/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/UsageRecordType.java
new file mode 100644
index 0000000..f3efd2d
--- /dev/null
+++ b/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/UsageRecordType.java
@@ -0,0 +1,282 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.11 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2018.01.04 at 04:15:49 PM GMT 
+//
+
+
+package org.apache.taverna.server.usagerecord.xml.urf2;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+/**
+ * Open Grid Forum GFD.204 Usage Record type <code>UsageRecordType</code>
+ * 
+ * @see <a href="https://www.ogf.org/documents/GFD.204.pdf#section.13">GFD.204 section 13</a>
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "UsageRecordType", propOrder = {
+    "recordIdentityBlock",
+    "subjectIdentityBlock",
+    "computeUsageBlock",
+    "jobUsageBlock",
+    "memoryUsageBlock",
+    "storageUsageBlock",
+    "cloudUsageBlock",
+    "networkUsageBlock"
+})
+public class UsageRecordType {
+
+    @XmlElement(name = "RecordIdentityBlock", required = true)
+    protected RecordIdentityBlockType recordIdentityBlock;
+    @XmlElement(name = "SubjectIdentityBlock")
+    protected SubjectIdentityBlockType subjectIdentityBlock;
+    @XmlElement(name = "ComputeUsageBlock")
+    protected List<ComputeUsageBlockType> computeUsageBlock;
+    @XmlElement(name = "JobUsageBlock")
+    protected JobUsageBlockType jobUsageBlock;
+    @XmlElement(name = "MemoryUsageBlock")
+    protected List<MemoryUsageBlockType> memoryUsageBlock;
+    @XmlElement(name = "StorageUsageBlock")
+    protected List<StorageUsageBlockType> storageUsageBlock;
+    @XmlElement(name = "CloudUsageBlock")
+    protected CloudUsageBlockType cloudUsageBlock;
+    @XmlElement(name = "NetworkUsageBlock")
+    protected List<NetworkUsageBlockType> networkUsageBlock;
+
+    /**
+     * Gets the value of the recordIdentityBlock property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link RecordIdentityBlockType }
+     *     
+     */
+    public RecordIdentityBlockType getRecordIdentityBlock() {
+        return recordIdentityBlock;
+    }
+
+    /**
+     * Sets the value of the recordIdentityBlock property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link RecordIdentityBlockType }
+     *     
+     */
+    public void setRecordIdentityBlock(RecordIdentityBlockType value) {
+        this.recordIdentityBlock = value;
+    }
+
+    /**
+     * Gets the value of the subjectIdentityBlock property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link SubjectIdentityBlockType }
+     *     
+     */
+    public SubjectIdentityBlockType getSubjectIdentityBlock() {
+        return subjectIdentityBlock;
+    }
+
+    /**
+     * Sets the value of the subjectIdentityBlock property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link SubjectIdentityBlockType }
+     *     
+     */
+    public void setSubjectIdentityBlock(SubjectIdentityBlockType value) {
+        this.subjectIdentityBlock = value;
+    }
+
+    /**
+     * Gets the value of the computeUsageBlock property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list,
+     * not a snapshot. Therefore any modification you make to the
+     * returned list will be present inside the JAXB object.
+     * This is why there is not a <CODE>set</CODE> method for the computeUsageBlock property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * <pre>
+     *    getComputeUsageBlock().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link ComputeUsageBlockType }
+     * 
+     * 
+     */
+    public List<ComputeUsageBlockType> getComputeUsageBlock() {
+        if (computeUsageBlock == null) {
+            computeUsageBlock = new ArrayList<ComputeUsageBlockType>();
+        }
+        return this.computeUsageBlock;
+    }
+
+    /**
+     * Gets the value of the jobUsageBlock property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link JobUsageBlockType }
+     *     
+     */
+    public JobUsageBlockType getJobUsageBlock() {
+        return jobUsageBlock;
+    }
+
+    /**
+     * Sets the value of the jobUsageBlock property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link JobUsageBlockType }
+     *     
+     */
+    public void setJobUsageBlock(JobUsageBlockType value) {
+        this.jobUsageBlock = value;
+    }
+
+    /**
+     * Gets the value of the memoryUsageBlock property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list,
+     * not a snapshot. Therefore any modification you make to the
+     * returned list will be present inside the JAXB object.
+     * This is why there is not a <CODE>set</CODE> method for the memoryUsageBlock property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * <pre>
+     *    getMemoryUsageBlock().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link MemoryUsageBlockType }
+     * 
+     * 
+     */
+    public List<MemoryUsageBlockType> getMemoryUsageBlock() {
+        if (memoryUsageBlock == null) {
+            memoryUsageBlock = new ArrayList<MemoryUsageBlockType>();
+        }
+        return this.memoryUsageBlock;
+    }
+
+    /**
+     * Gets the value of the storageUsageBlock property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list,
+     * not a snapshot. Therefore any modification you make to the
+     * returned list will be present inside the JAXB object.
+     * This is why there is not a <CODE>set</CODE> method for the storageUsageBlock property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * <pre>
+     *    getStorageUsageBlock().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link StorageUsageBlockType }
+     * 
+     * 
+     */
+    public List<StorageUsageBlockType> getStorageUsageBlock() {
+        if (storageUsageBlock == null) {
+            storageUsageBlock = new ArrayList<StorageUsageBlockType>();
+        }
+        return this.storageUsageBlock;
+    }
+
+    /**
+     * Gets the value of the cloudUsageBlock property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link CloudUsageBlockType }
+     *     
+     */
+    public CloudUsageBlockType getCloudUsageBlock() {
+        return cloudUsageBlock;
+    }
+
+    /**
+     * Sets the value of the cloudUsageBlock property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link CloudUsageBlockType }
+     *     
+     */
+    public void setCloudUsageBlock(CloudUsageBlockType value) {
+        this.cloudUsageBlock = value;
+    }
+
+    /**
+     * Gets the value of the networkUsageBlock property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list,
+     * not a snapshot. Therefore any modification you make to the
+     * returned list will be present inside the JAXB object.
+     * This is why there is not a <CODE>set</CODE> method for the networkUsageBlock property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * <pre>
+     *    getNetworkUsageBlock().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link NetworkUsageBlockType }
+     * 
+     * 
+     */
+    public List<NetworkUsageBlockType> getNetworkUsageBlock() {
+        if (networkUsageBlock == null) {
+            networkUsageBlock = new ArrayList<NetworkUsageBlockType>();
+        }
+        return this.networkUsageBlock;
+    }
+
+}
diff --git a/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/UsageRecords.java b/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/UsageRecords.java
new file mode 100644
index 0000000..5e05f32
--- /dev/null
+++ b/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/UsageRecords.java
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.11 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2018.01.04 at 04:15:49 PM GMT 
+//
+
+
+package org.apache.taverna.server.usagerecord.xml.urf2;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.JAXBElement;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElementRef;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+
+/**
+ * Open Grid Forum GFD.204 Usage Record type <code>UsageRecords</code>
+ * 
+ * @see <a href="https://www.ogf.org/documents/GFD.204.pdf#section.14">GFD.204 section 14</a>
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "", propOrder = {
+    "usage"
+})
+@XmlRootElement(name = "UsageRecords")
+public class UsageRecords {
+
+    @XmlElementRef(name = "Usage", namespace = "http://schema.ogf.org/urf/2013/04/urf", type = JAXBElement.class, required = false)
+    protected List<JAXBElement<UsageRecordType>> usage;
+
+    /**
+     * Gets the value of the usage property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list,
+     * not a snapshot. Therefore any modification you make to the
+     * returned list will be present inside the JAXB object.
+     * This is why there is not a <CODE>set</CODE> method for the usage property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * <pre>
+     *    getUsage().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link JAXBElement }{@code <}{@link UsageRecordType }{@code >}
+     * {@link JAXBElement }{@code <}{@link UsageRecordType }{@code >}
+     * 
+     * 
+     */
+    public List<JAXBElement<UsageRecordType>> getUsage() {
+        if (usage == null) {
+            usage = new ArrayList<JAXBElement<UsageRecordType>>();
+        }
+        return this.usage;
+    }
+
+}
diff --git a/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/package-info.java b/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/package-info.java
new file mode 100644
index 0000000..6b3f06d
--- /dev/null
+++ b/taverna-server-usagerecord/src/main/java/org/apache/taverna/server/usagerecord/xml/urf2/package-info.java
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.11 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2018.01.04 at 04:15:49 PM GMT 
+//
+/**
+ * Open Grid Forum GFD.204 Usage Record Format JAXB elements.
+ * <p>
+ * JAXB beans for the <em>Usage Record Format 2.0</em> as described by
+ * <a href="Open Grid Forum">https://www.ogf.org/</a> (OGF) specification
+ * <a href="https://www.ogf.org/documents/GFD.204.pdf">GFD.204</a> serialized in
+ * the namespace <code>http://schema.ogf.org/urf/2013/04/urf</code>
+ * <p>
+ * This package provides the underlying JAXB elements and types for marshalling
+ * and unmarshalling XML according to the Usage Record Format.
+ * <p>
+ * The classes in this package are derived from the XML schema in
+ * <a href="https://www.ogf.org/documents/GFD.204.pdf#section.14">
+ * GDF.204 section 14</a>
+ * <p>
+ * <blockquote>Copyright © Open Grid Forum (2006-2013). Some Rights Reserved.
+ * <p>
+ * This document and translations of it may be copied and furnished to others,
+ * and derivative works that comment on or otherwise explain it or assist in its
+ * implementation may be prepared, copied, published and distributed, in whole
+ * or in part, without restriction of any kind, provided that the above
+ * copyright notice and this paragraph are included as references to the derived
+ * portions on all such copies and derivative works. The published OGF document
+ * from which such works are derived, however, may not be modified in any way,
+ * such as by removing the copyright notice or references to the OGF or other
+ * organizations, except as needed for the purpose of developing new or updated
+ * OGF documents in conformance with the procedures defined in the OGF Document
+ * Process, or as required to translate it into languages other than English.
+ * OGF, with the approval of its board, may remove this restriction for
+ * inclusion of OGF document content for the purpose of producing standards in
+ * cooperation with other international standards bodies.
+ * <p>
+ * The limited permissions granted above are perpetual and will not be revoked
+ * by the OGF or its successors or assignees.
+ * </blockquote>
+ * 
+ * @see <a href="https://www.ogf.org/documents/GFD.204.pdf">GFD.98</a>
+ */
+@javax.xml.bind.annotation.XmlSchema(namespace = "http://schema.ogf.org/urf/2013/04/urf", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
+package org.apache.taverna.server.usagerecord.xml.urf2;
diff --git a/taverna-server-usagerecord/src/main/resources/META-INF/NOTICE b/taverna-server-usagerecord/src/main/resources/META-INF/NOTICE
index b976c0f..c935053 100644
--- a/taverna-server-usagerecord/src/main/resources/META-INF/NOTICE
+++ b/taverna-server-usagerecord/src/main/resources/META-INF/NOTICE
@@ -39,3 +39,26 @@
       information herein will not infringe any rights or any implied
       warranties of merchantability or fitness for a particular purpose.
 ---------------------------------------------------------
+org.apache.taverna.server.usagerecord.xml.urf2 classes are
+derived from https://www.ogf.org/documents/GFD.204.pdf
+
+  Copyright © Open Grid Forum (2006-2013). Some Rights Reserved.
+ 
+  This document and translations of it may be copied and furnished to others,
+  and derivative works that comment on or otherwise explain it or assist in its
+  implementation may be prepared, copied, published and distributed, in whole
+  or in part, without restriction of any kind, provided that the above
+  copyright notice and this paragraph are included as references to the derived
+  portions on all such copies and derivative works. The published OGF document
+  from which such works are derived, however, may not be modified in any way,
+  such as by removing the copyright notice or references to the OGF or other
+  organizations, except as needed for the purpose of developing new or updated
+  OGF documents in conformance with the procedures defined in the OGF Document
+  Process, or as required to translate it into languages other than English.
+  OGF, with the approval of its board, may remove this restriction for
+  inclusion of OGF document content for the purpose of producing standards in
+  cooperation with other international standards bodies.
+ 
+  The limited permissions granted above are perpetual and will not be revoked
+  by the OGF or its successors or assignees.
+ ---------------------------------------------------------