diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/Provenance.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/Provenance.java
index 309e2b2..d10a7a7 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/Provenance.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/Provenance.java
@@ -1,5 +1,3 @@
-package org.apache.taverna.provenance;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -8,9 +6,9 @@
  * 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
@@ -18,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
+package org.apache.taverna.provenance;
 
 import java.sql.SQLException;
 import java.util.List;
@@ -58,7 +56,7 @@
  * <p/>
  * The XML schema for the XML query language is {@code pquery.xsd} in
  * {@link net.sf.taverna.t2.provenance.apic.client.resources}
- * 
+ *
  * @author Paolo Missier
  * @author Stuart Owen
  */
@@ -96,7 +94,7 @@
 	 * This is used in the workbench to retrieve the "intermediate results" at
 	 * various points during workflow execution, as opposed to a set of
 	 * dependencies in response to a full-fledged provenance query.
-	 * 
+	 *
 	 * @param workflowRunId
 	 *            lineage scope -- a specific instance
 	 * @param processorName
@@ -139,7 +137,7 @@
 	/**
 	 * Removes all records that pertain to a specific run (but not the static
 	 * specification of the workflow run)
-	 * 
+	 *
 	 * @param runID
 	 *            the internal ID of a run. This can be obtained using
 	 *            {@link #listRuns(String, Map)}
@@ -151,7 +149,7 @@
 
 	/**
 	 * removes all records pertaining to the static structure of a workflow.
-	 * 
+	 *
 	 * @param workflowId
 	 *            the ID (not the external name) of the workflow whose static
 	 *            structure is to be deleted from the DB
@@ -162,7 +160,7 @@
 	 * returns a set of workflowIDs for a given runID. The set is a singleton if
 	 * the workflow has no nesting, but in general the list contains one
 	 * workflowID for each nested workflow involved in the run
-	 * 
+	 *
 	 * @param runID
 	 *            the internal ID for a specific workflow run
 	 * @return a list of workflow IDs, one for each nested workflow involved in
@@ -203,7 +201,7 @@
 
 	/**
 	 * lists all ports for a workflow
-	 * 
+	 *
 	 * @param workflowID
 	 * @return a list of {@link Port} beans, each representing an input or
 	 *         output port for the workflow
@@ -212,7 +210,7 @@
 
 	/**
 	 * lists all ports for a workflow
-	 * 
+	 *
 	 * @param workflowID
 	 * @return a list of {@link Port} beans, each representing an input or
 	 *         output port for the workflow or a processor in the workflow
@@ -221,7 +219,7 @@
 
 	/**
 	 * list all ports for a specific processor within a workflow
-	 * 
+	 *
 	 * @param workflowID
 	 * @param processorName
 	 * @return a list of {@link Port} beans, each representing an input or
@@ -257,7 +255,7 @@
 	void toggleOPMGeneration(boolean active);
 
 	/**
-	 * 
+	 *
 	 * @return true if OPM is set to be generated in response to a query
 	 */
 	boolean isOPMGenerationActive();
@@ -266,7 +264,7 @@
 	 * should actual artifact values be attached to OPM artifact nodes?<br>
 	 * default is FALSE<br/>
 	 * THIS IS CURRENTLY UNSUPPORTED -- DEFAULTS TO FALSE
-	 * 
+	 *
 	 * @param active
 	 */
 	void toggleAttachOPMArtifactValues(boolean active);
diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/ProvenanceConnectorFactory.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/ProvenanceConnectorFactory.java
index 351ec9c..acb5573 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/ProvenanceConnectorFactory.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/ProvenanceConnectorFactory.java
@@ -1,5 +1,3 @@
-package org.apache.taverna.provenance;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -8,9 +6,9 @@
  * 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
@@ -18,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
+package org.apache.taverna.provenance;
 
 import org.apache.taverna.provenance.connector.AbstractProvenanceConnector;
 
diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/api/NativeAnswer.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/api/NativeAnswer.java
index 051defb..d181c19 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/api/NativeAnswer.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/api/NativeAnswer.java
@@ -1,8 +1,3 @@
-/**
- * 
- */
-package org.apache.taverna.provenance.api;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -11,9 +6,9 @@
  * 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
@@ -21,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
+package org.apache.taverna.provenance.api;
 
 import java.util.List;
 import java.util.Map;
@@ -34,7 +29,7 @@
  * Java bean used to encapsulate the results of a provenance query. <br/>
  * This takes the form of a nested map, see {@link #getAnswer} for details on
  * its structure.
- * 
+ *
  * @author Paolo Missier
  */
 public class NativeAnswer {
diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/api/ProvenanceAccess.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/api/ProvenanceAccess.java
index 1b0caa6..d1091fc 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/api/ProvenanceAccess.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/api/ProvenanceAccess.java
@@ -1,26 +1,3 @@
-/*******************************************************************************
- * Copyright (C) 2009 The University of Manchester
- *
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- *
- ******************************************************************************/
-package org.apache.taverna.provenance.api;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -29,9 +6,9 @@
  * 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
@@ -40,6 +17,7 @@
  * under the License.
  */
 
+package org.apache.taverna.provenance.api;
 
 import static java.sql.Connection.TRANSACTION_READ_UNCOMMITTED;
 import static javax.naming.Context.INITIAL_CONTEXT_FACTORY;
@@ -93,7 +71,7 @@
  * <p/>
  * The XML schema for the XML query language is {@code pquery.xsd} in
  * {@link net.sf.taverna.t2.provenance.apic.client.resources}
- * 
+ *
  * @author Paolo Missier
  * @author Stuart Owen
  */
@@ -104,7 +82,7 @@
 	private ProvenanceAnalysis analyser = null;
 	private ProvenanceQuery querier;
 	private ProvenanceWriter writer;
-	
+
 	private String connectorType;
 	private final List<ProvenanceConnectorFactory> provenanceConnectorFactories;
 
@@ -127,7 +105,7 @@
 	 * name and jdbc url are required.<p/>
 	 * If the driver supports multiple connections, then a pool will be created
 	 * of 10 min idle, 50 max idle, and 50 max active connections.
-	 * 
+	 *
 	 * @param driverClassName
 	 * @param jdbcUrl
 	 */
@@ -138,7 +116,7 @@
 	/**
 	 * Initialises a named JNDI DataSource if not already set up externally. The
 	 * DataSource is named jdbc/taverna
-	 * 
+	 *
 	 * @param driverClassName
 	 *            - the classname for the driver to be used.
 	 * @param jdbcUrl
@@ -268,7 +246,7 @@
 	 * This is used in the workbench to retrieve the "intermediate results" at
 	 * various points during workflow execution, as opposed to a set of
 	 * dependencies in response to a full-fledged provenance query.
-	 * 
+	 *
 	 * @param workflowRunId
 	 *            lineage scope -- a specific instance
 	 * @param processorName
@@ -349,7 +327,7 @@
 	/**
 	 * Removes all records that pertain to a specific run (but not the static
 	 * specification of the workflow run)
-	 * 
+	 *
 	 * @param runID
 	 *            the internal ID of a run. This can be obtained using
 	 *            {@link #listRuns(String, Map)}
@@ -376,7 +354,7 @@
 
 	/**
 	 * removes all records pertaining to the static structure of a workflow.
-	 * 
+	 *
 	 * @param workflowId
 	 *            the ID (not the external name) of the workflow whose static
 	 *            structure is to be deleted from the DB
@@ -394,7 +372,7 @@
 	 * returns a set of workflowIDs for a given runID. The set is a singleton if
 	 * the workflow has no nesting, but in general the list contains one
 	 * workflowID for each nested workflow involved in the run
-	 * 
+	 *
 	 * @param runID
 	 *            the internal ID for a specific workflow run
 	 * @return a list of workflow IDs, one for each nested workflow involved in
@@ -478,7 +456,7 @@
 
 	/**
 	 * lists all ports for a workflow
-	 * 
+	 *
 	 * @param workflowID
 	 * @return a list of {@link Port} beans, each representing an input or
 	 *         output port for the workflow
@@ -490,7 +468,7 @@
 
 	/**
 	 * lists all ports for a workflow
-	 * 
+	 *
 	 * @param workflowID
 	 * @return a list of {@link Port} beans, each representing an input or
 	 *         output port for the workflow or a processor in the workflow
@@ -502,7 +480,7 @@
 
 	/**
 	 * list all ports for a specific processor within a workflow
-	 * 
+	 *
 	 * @param workflowID
 	 * @param processorName
 	 * @return a list of {@link Port} beans, each representing an input or
@@ -572,7 +550,7 @@
 	}
 
 	/**
-	 * 
+	 *
 	 * @return true if OPM is set to be generated in response to a query
 	 */
 	@Override
@@ -584,7 +562,7 @@
 	 * should actual artifact values be attached to OPM artifact nodes?<br>
 	 * default is FALSE<br/>
 	 * THIS IS CURRENTLY UNSUPPORTED -- DEFAULTS TO FALSE
-	 * 
+	 *
 	 * @param active
 	 */
 	@Override
diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/api/ProvenanceConnectorType.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/api/ProvenanceConnectorType.java
index e6ff8e1..ec9fec7 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/api/ProvenanceConnectorType.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/api/ProvenanceConnectorType.java
@@ -1,11 +1,4 @@
 /*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
- */
-
-package org.apache.taverna.provenance.api;
-
-/*
  * 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
@@ -13,9 +6,9 @@
  * 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
@@ -23,11 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
+package org.apache.taverna.provenance.api;
 
 /**
  * Defines names for the common Provenance Connector types
- * 
+ *
  * @author Stuart Owen
  */
 public class ProvenanceConnectorType {
diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/api/Query.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/api/Query.java
index 0f09f98..b0f4225 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/api/Query.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/api/Query.java
@@ -1,7 +1,3 @@
-/**
- * 
- */
-package org.apache.taverna.provenance.api;
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -11,9 +7,9 @@
  * 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
@@ -21,7 +17,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
+package org.apache.taverna.provenance.api;
 
 import java.util.List;
 
@@ -38,7 +34,7 @@
  * <li>a list of &lt;target> processors, encoded as List&lt;
  * {@link ProvenanceProcessor}>
  * </ul>
- * 
+ *
  * @author Paolo Missier
  */
 public class Query {
diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/api/QueryAnswer.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/api/QueryAnswer.java
index d87e929..e8e244e 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/api/QueryAnswer.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/api/QueryAnswer.java
@@ -1,8 +1,3 @@
-/**
- * 
- */
-package org.apache.taverna.provenance.api;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -11,9 +6,9 @@
  * 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
@@ -21,14 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
+package org.apache.taverna.provenance.api;
+
 
 
 /**
  * Encapsulates a native Java data structure as a well as a String that holds
  * the OPM graph that represents the query answer
- * 
+ *
  * @author Paolo Missier
- * 
+ *
  */
 public class QueryAnswer {
 	private NativeAnswer nativeAnswer;
diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/connector/AbstractProvenanceConnector.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/connector/AbstractProvenanceConnector.java
index c026ffc..9825bcb 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/connector/AbstractProvenanceConnector.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/connector/AbstractProvenanceConnector.java
@@ -1,25 +1,3 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester
- *
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package org.apache.taverna.provenance.connector;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -28,9 +6,9 @@
  * 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
@@ -38,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
+package org.apache.taverna.provenance.connector;
 
 import java.io.IOException;
 import java.sql.Connection;
diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/connector/ProvenanceSQL.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/connector/ProvenanceSQL.java
index 9c76169..8419563 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/connector/ProvenanceSQL.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/connector/ProvenanceSQL.java
@@ -1,5 +1,3 @@
-package org.apache.taverna.provenance.connector;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -8,9 +6,9 @@
  * 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
@@ -19,6 +17,7 @@
  * under the License.
  */
 
+package org.apache.taverna.provenance.connector;
 
 public class ProvenanceSQL {
 
diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/AnnotationsLoader.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/AnnotationsLoader.java
index 8afa84e..a46089d 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/AnnotationsLoader.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/AnnotationsLoader.java
@@ -1,25 +1,3 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester   
- * 
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- * 
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *    
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *    
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package org.apache.taverna.provenance.lineageservice;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -28,9 +6,9 @@
  * 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
@@ -38,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
+package org.apache.taverna.provenance.lineageservice;
 
 import java.io.FileReader;
 import java.io.IOException;
@@ -55,7 +33,7 @@
 
 /**
  * @author Paolo Missier
- * 
+ *
  */
 public class AnnotationsLoader {
 	private static Logger logger = Logger.getLogger(AnnotationsLoader.class);
diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/Dependencies.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/Dependencies.java
index 5078419..4f4596c 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/Dependencies.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/Dependencies.java
@@ -1,25 +1,3 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester   
- * 
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- * 
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *    
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *    
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package org.apache.taverna.provenance.lineageservice;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -28,9 +6,9 @@
  * 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
@@ -38,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
+package org.apache.taverna.provenance.lineageservice;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -49,14 +27,14 @@
  * one record in the provenance DB at the finest possible level of granularity,
  * i.e., a single value possibly within a collection, bound to a processor port
  * and associated to a specific run of a specific workflow.
- * 
+ *
  * @author Paolo Missier
  * @see LineageQueryResultRecord
  */
 public class Dependencies {
 	final public static String COLL_TYPE = "referenceSetCollection";
 	final public static String ATOM_TYPE = "referenceSet";
-	
+
 	boolean printResolvedValue;
 
 	private List<LineageQueryResultRecord> records = new ArrayList<>();
@@ -67,7 +45,7 @@
 
 	/**
 	 * adds a single record to the list of dependencies
-	 * 
+	 *
 	 * @param workflowId
 	 * @param pname
 	 * @param vname
@@ -125,13 +103,13 @@
 		for (LineageQueryResultRecord record : getRecords()) {
 			record.setPrintResolvedValue(printResolvedValue);
 			sb.append("***  record: ****\n"+record.toString());
-		}		
+		}
 		return sb.toString();
 	}
 
 	/**
 	 * @return true is the records contain the actual values, in addition to the URI references to the values
-	 * <br/>NOT YET SUPPORTED. This switch is currently ignored and no values are returned in the current version 
+	 * <br/>NOT YET SUPPORTED. This switch is currently ignored and no values are returned in the current version
 	 */
 	public boolean isPrintResolvedValue() {
 		return printResolvedValue;
@@ -139,7 +117,7 @@
 
 	/**
 	 * @param toggles insertion of values in addition to references to values in the records
-	 * <br/>NOT YET SUPPORTED. This switch is currently ignored and no values are returned in the current version 
+	 * <br/>NOT YET SUPPORTED. This switch is currently ignored and no values are returned in the current version
 	 */
 	public void setPrintResolvedValue(boolean printResolvedValue) {
 		this.printResolvedValue = printResolvedValue;
diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/EventProcessor.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/EventProcessor.java
index d793d4e..fcb8224 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/EventProcessor.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/EventProcessor.java
@@ -1,25 +1,3 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester
- *
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package org.apache.taverna.provenance.lineageservice;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -28,9 +6,9 @@
  * 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
@@ -38,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
+package org.apache.taverna.provenance.lineageservice;
 
 import static java.util.Collections.synchronizedList;
 import static org.apache.taverna.provenance.lineageservice.utils.ProvenanceProcessor.DATAFLOW_ACTIVITY;
@@ -282,7 +260,7 @@
 
 	/**
 	 * note: this method can be called as part of a recursion on sub-workflows
-	 * 
+	 *
 	 * @param df
 	 * @param dataflowID
 	 *            the UUID for the entire dataflow (may be a sub-dataflow)
@@ -539,7 +517,7 @@
 		case PROCESS_EVENT_TYPE: {
 			String parentId = provenanceItem.getParentId();  // this is the workflowID
 			String identifier = provenanceItem.getIdentifier();  // use this as workflowRunId if this is the top-level process
-			
+
 			parentChildMap.put(identifier, parentId);
 			ProcessorBinding pb = new ProcessorBinding();
 			pb.setWorkflowRunId(getWorkflowRunId());
@@ -1005,7 +983,7 @@
 	 * Conversely, if vb is going to be input to an iteration, then it's lost
 	 * its containing list node, and we put it back in by looking at the
 	 * corresponding predecessor
-	 * 
+	 *
 	 * @param vb
 	 * @throws SQLException
 	 */
diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/LineageQueryResultRecord.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/LineageQueryResultRecord.java
index 20ccc0d..426bcc0 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/LineageQueryResultRecord.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/LineageQueryResultRecord.java
@@ -1,25 +1,3 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester   
- * 
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- * 
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *    
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *    
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package org.apache.taverna.provenance.lineageservice;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -28,9 +6,9 @@
  * 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
@@ -38,10 +16,10 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
+package org.apache.taverna.provenance.lineageservice;
 
 /**
- * 
+ *
  * This Java bean holds a single provenance record, i.e., the finest element of
  * a provenance graph that is stored in the provenance DB. Essentially this
  * represents one data element (value) flowing through a port (vname) of a
@@ -50,9 +28,9 @@
  * same processor receives multiple values on the same port, as part of
  * iterative processing. When the value belongs to a collection (a nested list),
  * the <b>collIdRef</b> field contains a reference to that collection.
- * 
+ *
  * @author Paolo Missier
- * 
+ *
  */
 public class LineageQueryResultRecord {
 	private String workflowId;
@@ -66,7 +44,7 @@
 	private String resolvedValue;
 	private String type;  // one of referenceSet, referenceSetCollection
 	boolean printResolvedValue;
-	boolean isInput; 
+	boolean isInput;
 	boolean isCollection;
 
 	@Override
diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/LineageSQLQuery.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/LineageSQLQuery.java
index 5605187..c82d8ca 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/LineageSQLQuery.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/LineageSQLQuery.java
@@ -1,25 +1,3 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester   
- * 
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- * 
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *    
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *    
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package org.apache.taverna.provenance.lineageservice;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -28,9 +6,9 @@
  * 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
@@ -38,6 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
+package org.apache.taverna.provenance.lineageservice;
 
 
 /**
@@ -46,9 +25,9 @@
  * relevant. For instance when the query includes a join with Collection, the
  * intent is that lineage should return the collection itself as opposed to any
  * of its elements.
- * 
+ *
  * @author paolo
- * 
+ *
  */
 public class LineageSQLQuery {
 	private String vbQuery = null;
@@ -98,5 +77,5 @@
 	 */
 	public void setVbQuery(String vbQuery) {
 		this.vbQuery = vbQuery;
-	}	
+	}
 }
diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/Provenance.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/Provenance.java
index c012376..498e891 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/Provenance.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/Provenance.java
@@ -1,25 +1,3 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester   
- * 
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- * 
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *    
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *    
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package org.apache.taverna.provenance.lineageservice;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -28,9 +6,9 @@
  * 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
@@ -38,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
+package org.apache.taverna.provenance.lineageservice;
 
 import java.io.IOException;
 import java.sql.SQLException;
@@ -59,10 +37,10 @@
 /**
  * Implemented by the database class that a {@link AbstractProvenanceConnector}
  * implementation uses for storage purposes
- * 
+ *
  * @author Paolo Missier
  * @author Ian Dunlop
- * 
+ *
  */
 //FIXME is this class really needed. Can't we just push the
 //acceptRawProvanceEvent up into the ProvenanceConnector?
@@ -74,7 +52,7 @@
 	protected EventProcessor ep;
 
 	private String saveEvents;
-	
+
 	private volatile boolean firstWorkflowStructure = true;
 
 	public boolean isFirstWorkflowStructure() {
@@ -86,7 +64,7 @@
 	}
 
 	private List<String> workflowIDStack = Collections.synchronizedList(new ArrayList<String>());
-	
+
 	private Map<String, String> workflowIDMap = new ConcurrentHashMap<String, String>();
 
 	public Provenance() {	}
@@ -94,14 +72,14 @@
 	public Provenance(EventProcessor eventProcessor) {
 		this.ep = eventProcessor;
 		this.pq = ep.getPq();
-		this.pw = ep.getPw();		
+		this.pw = ep.getPw();
 	}
 
 	public void clearDB() throws SQLException {
 		getPw().clearDBStatic();
 		getPw().clearDBDynamic();
 	}
-	
+
 
 	/**
 	 * @return the saveEvents
@@ -147,7 +125,7 @@
 
 	/**
 	 * maps each incoming event to an insert query into the provenance store
-	 * 
+	 *
 	 * @param eventType
 	 * @param content
 	 * @throws SQLException
@@ -160,7 +138,7 @@
 
 	/**
 	 * parse d and generate SQL insert calls into the provenance DB
-	 * 
+	 *
 	 * @param d
 	 *            DOM for the event
 	 * @param eventType
@@ -174,24 +152,24 @@
 			// process the workflow structure
 			//workflowStartedMap.put()
 			WorkflowProvenanceItem workflowProvenanceItem = (WorkflowProvenanceItem) provenanceItem;
-			
+
 			getEp().getWfdp().workflowStarted.put(workflowProvenanceItem.getIdentifier(), workflowProvenanceItem.getInvocationStarted());
 			if (isFirstWorkflowStructure()) {
 				String dataflowId = workflowProvenanceItem.getDataflow().getIdentifier();
 				String instanceId = provenanceItem.getIdentifier();
-				
+
 				workflowIDMap.put(instanceId, dataflowId);
 				setFirstWorkflowStructure(false);
 				String processWorkflowStructure = getEp().processWorkflowStructure(provenanceItem);
 				synchronized(workflowIDStack) {
 					workflowIDStack.add(0,processWorkflowStructure);
 				}
-				
+
 				getEp().propagateANL(provenanceItem.getIdentifier());
 			} else {
 				String dataflowId = workflowProvenanceItem.getDataflow().getIdentifier();
 				String instanceId = provenanceItem.getIdentifier();
-				
+
 				workflowIDMap.put(instanceId, dataflowId);
 
 				Dataflow df = workflowProvenanceItem.getDataflow();
@@ -203,16 +181,16 @@
 //			String currentWorkflowID = workflowIDStack.get(0);
 //			workflowIDStack.remove(0);
 			String currentWorkflowID = provenanceItem.getParentId();
-			
+
 			getEp().processProcessEvent(provenanceItem, currentWorkflowID);
-			
+
 		} else {  // all other event types (iteration etc.)
 			logger.debug("processEvent of type "+provenanceItem.getEventType()+" for item of type "+provenanceItem.getClass().getName());
 			String currentWorkflowID = provenanceItem.getWorkflowId();
 //			String currentWorkflowID = workflowIDMap.get(provenanceItem.getParentId());
 
 			getEp().processProcessEvent(provenanceItem, currentWorkflowID);
-		
+
 //			getEp().processProcessEvent(provenanceItem, workflowIDStack.get(0));
 		}
 	}
diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/ProvenanceAnalysis.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/ProvenanceAnalysis.java
index cceed34..b636af0 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/ProvenanceAnalysis.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/ProvenanceAnalysis.java
@@ -1,25 +1,3 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester   
- * 
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- * 
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *    
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *    
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package org.apache.taverna.provenance.lineageservice;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -28,9 +6,9 @@
  * 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
@@ -38,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
+package org.apache.taverna.provenance.lineageservice;
 
 import java.io.IOException;
 import java.sql.SQLException;
@@ -150,7 +128,7 @@
 
 
 	/**
-	 * asks the OPM manager to convert its current RDF OPMGraph to XML 
+	 * asks the OPM manager to convert its current RDF OPMGraph to XML
 	 * @return the filename of the OPM XML file
 	 * @throws OperatorException
 	 * @throws IOException
@@ -159,7 +137,7 @@
 	//	public String OPMRdf2Xml() throws OperatorException, IOException, JAXBException {
 	//	if (isReady()) {
 	//	return aOPMManager.Rdf2Xml();
-	//	}  
+	//	}
 	//	return null;
 	//	}
 
@@ -167,15 +145,15 @@
 	 * asks the OPM manager to create a dot file representing its current RDF OPMGraph<br/>
 	 * needs fixing
 	 * @return
-	 * @throws IOException 
-	 * @throws OperatorException 
+	 * @throws IOException
+	 * @throws OperatorException
 	 */
 	/*
 	public String OPMRdf2Dot() throws OperatorException, IOException {
 		if (aOPMManager != null && aOPMManager.isActive() && isReady()) {
 			return aOPMManager.Rdf2Dot();
-		}  
-		return null;		
+		}
+		return null;
 	}
 	 */
 
@@ -196,7 +174,7 @@
 
 	/**
 	 * returns all available instances across all workflows
-	 * 
+	 *
 	 * @return
 	 * @throws SQLException
 	 */
@@ -206,7 +184,7 @@
 
 	/**
 	 * returns all available instances for workflow workflowId
-	 * 
+	 *
 	 * @param workflowId
 	 * @return
 	 * @throws SQLException
@@ -256,7 +234,7 @@
 		// launch a lineage query for each target variable
 		for (QueryPort qv : qvList) {
 
-			// full lineage query			
+			// full lineage query
 			logger.info(String.format(
 					"************\n lineage query: [instance, workflow, proc, port, path] = "
 							+ "[%s,%s,%s,%s,[%s]]\n***********", workflowRun,
@@ -302,7 +280,7 @@
 	 * is specified, however, this just passes the request to
 	 * computeLineageSingleBinding. in this case the result map only contains
 	 * one entry
-	 * 
+	 *
 	 * @param workflowRun
 	 * @param var
 	 * @param proc
@@ -313,7 +291,7 @@
 	 * @throws SQLException
 	 */
 	public Map<String, List<Dependencies>> computeLineageSingleVar(
-			String workflowRun,   // dynamic scope 
+			String workflowRun,   // dynamic scope
 			String workflowId,    // static scope
 			String var,   // target var
 			String proc,   // qualified with its processor name
@@ -364,7 +342,7 @@
 	/**
 	 * main lineage query method. queries the provenance DB with a single
 	 * originating proc/var/path and a set of selected Processors
-	 * 
+	 *
 	 * @param workflowRunId
 	 * @param var
 	 * @param proc
@@ -477,7 +455,7 @@
 	/**
 	 * accounts for an inverse transformation from one output to all inputs of a
 	 * processor
-	 * 
+	 *
 	 * @param workflowRunId
 	 * @param var
 	 *            the output var
@@ -517,7 +495,7 @@
 
 		if (getPq().isDataflow(proc)) { // if we are looking at the output of an entire dataflow
 			// force the "input vars" for this step to be the output var itself
-			// this causes the following xfer step to trace back to the next processor _within_ proc 
+			// this causes the following xfer step to trace back to the next processor _within_ proc
 			inputVars = new ArrayList<>();
 			inputVars.add(outputVar);
 		} else if (proc.equals(OUTPUT_CONTAINER_PROCESSOR)) {  // same action as prev case, but may change in the future
@@ -558,13 +536,13 @@
 				for (Port inputVar: inputVars)
 					var2Path.put(inputVar, null);
 			} else { // compute projected paths
-				String[] projectedPath; 
+				String[] projectedPath;
 
 				int start = 0;
 				for (Port inputVar: inputVars) {
 					// 24/7/08 get DNL (declared nesting level) and ANL (actual nesting level) from VAR
 					// TODO account for empty paths
-					int projectedPathLength = var2delta.get(inputVar);  // this is delta			
+					int projectedPathLength = var2delta.get(inputVar);  // this is delta
 
 					if (projectedPathLength == 0) {
 						// associate empty path to this var
@@ -589,7 +567,7 @@
 			}
 		}
 
-		// accumulate this proc to current path 
+		// accumulate this proc to current path
 		currentPath.add(proc);
 
 		/*
@@ -617,7 +595,7 @@
 
 		///////////
 		/// generate SQL if necessary -- for all input vars, based on the current path
-		/// the projected paths are required to determine the level in the collection at which 
+		/// the projected paths are required to determine the level in the collection at which
 		/// we look at the value assignment
 		///////////
 
@@ -686,7 +664,7 @@
 							logger.debug("deref value for ref: " + ref + " "
 									+ data + " of class "
 									+ data.getClass().getName());
-							
+
 							try {
 								aOPMManager.addArtifact(vb.getValue(), data);
 							} catch (ProvenanceException e) {
@@ -707,7 +685,7 @@
 					/*
 					 * assert proc as Process -- include iteration vector to
 					 * separate different activations of the same process
-					 */					
+					 */
 					try {
 						aOPMManager.addProcess(proc, vb.getIteration(),
 								workflowId, vb.getWorkflowRunId());
@@ -731,7 +709,7 @@
 					}
 				}
 			}
-			// 
+			//
 			// create OPM process for this xform
 			//
 			for (LineageSQLQuery lq : newLqList) {
@@ -808,7 +786,7 @@
 								logger.warn("Could not add artifact", e);
 							}
 
-							// true -> prevent duplicates CHECK	
+							// true -> prevent duplicates CHECK
 						}
 					}
 				}
@@ -820,7 +798,7 @@
 				xferStep(workflowRunId, workflowId, inputVar,
 						var2Path.get(inputVar), selectedProcessors, lqList);
 		}
-		currentPath.remove(currentPath.size()-1);  // CHECK	
+		currentPath.remove(currentPath.size()-1);  // CHECK
 	}  // end xformStep
 
 	private void xferStep(String workflowRunId, String workflowId, Port port,
@@ -848,12 +826,12 @@
 		// in this case set path to null
 
 		// retrieve full record for var:
-		// retrieve input vars for current processor 
+		// retrieve input vars for current processor
 		Map<String, String> varsQueryConstraints = new HashMap<>();
 
 //		varsQueryConstraints.put("W.workflowId", workflowRunId);
 		varsQueryConstraints.put("portId", a.getSourcePortId());
-//		varsQueryConstraints.put("processorNameRef", sourceProcName);  
+//		varsQueryConstraints.put("processorNameRef", sourceProcName);
 //		varsQueryConstraints.put("portName", sourcePortName);
 		List<Port> varList = getPq().getPorts(varsQueryConstraints);
 
@@ -876,9 +854,9 @@
 		private boolean isXform = true;
 
 		private String iteration = "";  // this is the iteration projected on a single variable. Used for propagation upwards default is no iteration --
-		private String iterationVector = ""; // iteration vector accounts for cross-products. Used to be matched exactly in queries. 
-		private int iic = 0;  // index in collection -- default is 0 
-		private int collectionNesting = 0;  // n indicates granularity is n levels from leaf. 
+		private String iterationVector = ""; // iteration vector accounts for cross-products. Used to be matched exactly in queries.
+		private int iic = 0;  // index in collection -- default is 0
+		private int collectionNesting = 0;  // n indicates granularity is n levels from leaf.
 		// This quantifies loss of lineage precision when working with collections
 		private String collectionRef = null;
 		private String proc;
diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/ProvenanceQuery.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/ProvenanceQuery.java
index 901120c..fe3918b 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/ProvenanceQuery.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/ProvenanceQuery.java
@@ -1,25 +1,3 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester
- *
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package org.apache.taverna.provenance.lineageservice;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -28,9 +6,9 @@
  * 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
@@ -38,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
+package org.apache.taverna.provenance.lineageservice;
 
 import static org.apache.taverna.provenance.connector.AbstractProvenanceConnector.DataflowInvocationTable.DataflowInvocation;
 import static org.apache.taverna.provenance.connector.AbstractProvenanceConnector.DataflowInvocationTable.parentProcessorEnactmentId;
@@ -767,7 +745,7 @@
 	 * this is similar to {@link #getProcessorsShallow(String, String)} but it
 	 * recursively fetches all processors within nested workflows. The result is
 	 * collected in the form of a map: workflowId -> {ProvenanceProcessor}
-	 * 
+	 *
 	 * @param firstActivityClass
 	 * @param workflowId
 	 * @return a map: workflowId -> {ProvenanceProcessor} where workflowId is
diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/ProvenanceWriter.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/ProvenanceWriter.java
index f52be6e..9419606 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/ProvenanceWriter.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/ProvenanceWriter.java
@@ -1,25 +1,3 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester
- *
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package org.apache.taverna.provenance.lineageservice;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -28,9 +6,9 @@
  * 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
@@ -38,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
+package org.apache.taverna.provenance.lineageservice;
 
 import static org.apache.taverna.provenance.connector.AbstractProvenanceConnector.DataflowInvocationTable.DataflowInvocation;
 
@@ -71,11 +49,11 @@
  * Handles all the writing out of provenance items to the database layer. Uses
  * standard SQL so all specific instances of this class can extend this writer
  * to handle all of the db writes
- * 
+ *
  * @author Paolo Missier
  * @author Ian Dunlop
  * @author Stuart Owen
- * 
+ *
  */
 public class ProvenanceWriter {
 
@@ -99,7 +77,7 @@
 	/**
 	 * add each Port as a row into the Port DB table <strong>note: no static
 	 * port type available as part of the dataflow...</strong>
-	 * 
+	 *
 	 * @param ports
 	 * @param wfId
 	 * @throws SQLException
@@ -162,7 +140,7 @@
 
 	/**
 	 * inserts one row into the ARC DB table
-	 * 
+	 *
 	 * @param sourcePort
 	 * @param destinationPort
 	 * @param workflowId
@@ -244,7 +222,7 @@
 
 	/**
 	 * insert new processor into the provenance DB
-	 * 
+	 *
 	 * @param name
 	 * @throws SQLException
 	 */
@@ -263,7 +241,7 @@
 	/**
 	 * add a processor to the static portion of the DB with given name, type and
 	 * workflowId scope
-	 * 
+	 *
 	 * @param name
 	 * @param type
 	 * @param workflowId
@@ -425,7 +403,7 @@
 
 	/**
 	 * persists var v back to DB
-	 * 
+	 *
 	 * @param v
 	 * @throws SQLException
 	 */
@@ -520,7 +498,7 @@
 
 	/**
 	 * deletes DB contents for the static structures -- called prior to each run
-	 * 
+	 *
 	 * @throws SQLException
 	 */
 	public void clearDBStatic() throws SQLException {
@@ -539,7 +517,7 @@
 
 	/**
 	 * deletes DB contents for the static structures -- called prior to each run
-	 * 
+	 *
 	 * @throws SQLException
 	 */
 	public void clearDBStatic(String wfID) throws SQLException {
@@ -594,7 +572,7 @@
 	}
 	/**
 	 * deletes DB contents for all runs -- for testing purposes
-	 * 
+	 *
 	 * @throws SQLException
 	 */
 	public Set<String> clearDBDynamic(String runID) throws SQLException {
@@ -657,7 +635,7 @@
 
 	/**
 	 * used to support the implementation of
-	 * 
+	 *
 	 * @param pname
 	 * @param vFrom
 	 * @param valFrom
diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/URIGenerator.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/URIGenerator.java
index f3d776c..90631ca 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/URIGenerator.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/URIGenerator.java
@@ -1,5 +1,3 @@
-package org.apache.taverna.provenance.lineageservice;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -8,9 +6,9 @@
  * 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
@@ -18,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
+package org.apache.taverna.provenance.lineageservice;
 
 import java.net.URI;
 import java.net.URISyntaxException;
@@ -28,7 +26,7 @@
 	public String makeT2ReferenceURI(String collId) {
 		// collId is of the form t2:list//<UUID>
 		// map to a proper URI
-		
+
 		String[] tokens = collId.split("//");
 		String type = tokens[0].split(":")[1];
 		String namespace = tokens[1].split("/")[0].split("\\?")[0];
@@ -45,7 +43,7 @@
 	}
 
 	public String makePortURI(String wfId, String pName, String vName,
-			boolean inputPort) {		
+			boolean inputPort) {
 		return makeProcessorURI(pName, wfId) + (inputPort ? "in/" : "out/")
 				+ escape(vName);
 	}
@@ -58,7 +56,7 @@
 			throw new RuntimeException("Can't escape URI part " + part, e);
 		}
 	}
-	
+
 	public String makeProcessorURI(String pName, String wfId) {
 		return makeWorkflowURI(wfId) + "processor/" + escape(pName) + "/";
 	}
diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/WorkflowDataProcessor.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/WorkflowDataProcessor.java
index 0dac19e..0304364 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/WorkflowDataProcessor.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/WorkflowDataProcessor.java
@@ -1,8 +1,3 @@
-/**
- * 
- */
-package org.apache.taverna.provenance.lineageservice;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -11,9 +6,9 @@
  * 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
@@ -21,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
+package org.apache.taverna.provenance.lineageservice;
 
 import static org.apache.taverna.provenance.lineageservice.utils.ProvenanceUtils.iterationToString;
 import static org.apache.taverna.provenance.lineageservice.utils.ProvenanceUtils.parentProcess;
@@ -55,11 +50,11 @@
 	private static Logger logger = Logger.getLogger(WorkflowDataProcessor.class);
 
 	// set of trees (impl as lists), one for each portName
-	// PM portName not enough must use the WFID as context as well, because the same output portName 
-	// may occur in multiple nested workflows 
-	Map<String, List<WorkflowDataNode>> workflowDataTrees = new HashMap<>();  
+	// PM portName not enough must use the WFID as context as well, because the same output portName
+	// may occur in multiple nested workflows
+	Map<String, List<WorkflowDataNode>> workflowDataTrees = new HashMap<>();
 
-	protected Map<String, Timestamp> workflowStarted = new ConcurrentHashMap<>(); 
+	protected Map<String, Timestamp> workflowStarted = new ConcurrentHashMap<>();
 
 	ProvenanceQuery pq=null;
 	ProvenanceWriter pw = null;
@@ -71,12 +66,12 @@
 	 * to the portName found in the item. Repeated invocations of this method
 	 * incrementally reconstruct the tree structure for each of the workflow
 	 * outputs
-	 * 
+	 *
 	 * @param root
 	 */
 	public void addWorkflowDataItem(ProvenanceItem provenanceItem) {
 		WorkflowDataProvenanceItem workflowDataItem = (WorkflowDataProvenanceItem) provenanceItem;
-		
+
 		WorkflowDataNode wdn = new WorkflowDataNode();
 		wdn.setProcessId(provenanceItem.getProcessId());
 		wdn.setPortName(workflowDataItem.getPortName());
@@ -113,7 +108,7 @@
 	/**
 	 * writes records to PortBinding or Collection by traversing the trees<br/>
 	 * expect this to be invoked after workflow completion
-	 * 
+	 *
 	 * @param workflowId
 	 *            the external name of the dataflow (not the UUID)
 	 * @param workflowRunId
@@ -126,7 +121,7 @@
 
 		// i:inputPortName -> t2Ref
 		Map<String, String> workflowPortData = new HashMap<>();
-		
+
 		for (Map.Entry<String, List<WorkflowDataNode>> entry : workflowDataTrees
 				.entrySet()) {
 			String portName = entry.getKey();
@@ -148,7 +143,7 @@
 						String portKey = (node.isInputPort() ? "/i:" : "/o:") + node.getPortName();
 						workflowPortData.put(portKey, node.getValue());
 					}
-					
+
 					if (node.isList) {
 						logger.debug("creating collection entry for "
 								+ node.value + " with index " + node.index);
@@ -189,7 +184,7 @@
 							vb.setPositionInColl(node.getRelativePosition());
 						} else
 							vb.setPositionInColl(1); // default
-						
+
 						try {
 							getPw().addPortBinding(vb);
 						} catch (SQLException e) {
@@ -212,12 +207,12 @@
 
 		List<Port> ports = getPq().getPortsForDataflow(workflowId);
 		String processId = completeEvent.getProcessId();
-		
+
 		DataflowInvocation invocation = new DataflowInvocation();
 		invocation.setDataflowInvocationId(UUID.randomUUID().toString());
 		invocation.setWorkflowId(workflowId);
 		invocation.setWorkflowRunId(workflowRunId);
-		
+
 		String parentProcessId = parentProcess(processId, 1);
 		if (parentProcessId != null) {
 			ProcessorEnactment procAct = invocationProcessToProcessEnactment
@@ -271,7 +266,7 @@
 
 	/**
 	 * @param node
-	 * @return the last digit in the index 
+	 * @return the last digit in the index
 	 */
 	private int getPosition(WorkflowDataNode node) {
 		String[] vector = node.getIndex()
@@ -299,8 +294,8 @@
 		if (index11.equals("") && tokens2.length == 1)
 			return true;
 
-		// [x1,x2, ...,xk] cannot be parent of [x1,x2,...xh] when k < h-1 
-		// because [x1,x2,...xh] is more than one level deeper than [x1,x2, ...,xk] 
+		// [x1,x2, ...,xk] cannot be parent of [x1,x2,...xh] when k < h-1
+		// because [x1,x2,...xh] is more than one level deeper than [x1,x2, ...,xk]
 		if (tokens1.length != tokens2.length - 1)
 			return false;
 
diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/types/ActivityType.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/types/ActivityType.java
index 5ccf871..56f2eef 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/types/ActivityType.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/types/ActivityType.java
@@ -1,25 +1,3 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester   
- * 
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- * 
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *    
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *    
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package org.apache.taverna.provenance.lineageservice.types;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -28,9 +6,9 @@
  * 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
@@ -38,14 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
+package org.apache.taverna.provenance.lineageservice.types;
 
 import org.apache.taverna.provenance.lineageservice.types.ProvenanceEventType;
 
 /**
- * 
+ *
  * @author Paolo Missier
- * 
+ *
  */
 public class ActivityType implements ProvenanceEventType {
 	private IterationType[] iteration;
@@ -62,7 +40,7 @@
 
 	/**
 	 * Gets the iteration value for this ActivityType.
-	 * 
+	 *
 	 * @return iteration
 	 */
 	public IterationType[] getIteration() {
@@ -71,7 +49,7 @@
 
 	/**
 	 * Sets the iteration value for this ActivityType.
-	 * 
+	 *
 	 * @param iteration
 	 */
 	public void setIteration(IterationType[] iteration) {
@@ -88,7 +66,7 @@
 
 	/**
 	 * Gets the id value for this ActivityType.
-	 * 
+	 *
 	 * @return id
 	 */
 	public java.lang.String getId() {
@@ -97,7 +75,7 @@
 
 	/**
 	 * Sets the id value for this ActivityType.
-	 * 
+	 *
 	 * @param id
 	 */
 	public void setId(java.lang.String id) {
diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/types/DataDocumentType.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/types/DataDocumentType.java
index f86a1fd..4681826 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/types/DataDocumentType.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/types/DataDocumentType.java
@@ -1,25 +1,3 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester   
- * 
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- * 
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *    
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *    
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package org.apache.taverna.provenance.lineageservice.types;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -28,9 +6,9 @@
  * 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
@@ -38,12 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
+package org.apache.taverna.provenance.lineageservice.types;
 
 
 /**
- * 
+ *
  * @author Paolo Missier
- * 
+ *
  */
 public class DataDocumentType implements ProvenanceEventType {
 	private String reference;
@@ -59,7 +38,7 @@
 
 	/**
 	 * Gets the reference value for this DataDocumentType.
-	 * 
+	 *
 	 * @return reference
 	 */
 	public String getReference() {
@@ -68,7 +47,7 @@
 
 	/**
 	 * Sets the reference value for this DataDocumentType.
-	 * 
+	 *
 	 * @param reference
 	 */
 	public void setReference(String reference) {
@@ -77,7 +56,7 @@
 
 	/**
 	 * Gets the id value for this DataDocumentType.
-	 * 
+	 *
 	 * @return id
 	 */
 	public String getId() {
@@ -86,7 +65,7 @@
 
 	/**
 	 * Sets the id value for this DataDocumentType.
-	 * 
+	 *
 	 * @param id
 	 */
 	public void setId(String id) {
diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/types/IterationType.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/types/IterationType.java
index 417c3b3..11cd3df 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/types/IterationType.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/types/IterationType.java
@@ -1,25 +1,3 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester   
- * 
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- * 
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *    
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *    
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package org.apache.taverna.provenance.lineageservice.types;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -28,9 +6,9 @@
  * 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
@@ -38,12 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
+package org.apache.taverna.provenance.lineageservice.types;
 
 /**
- * 
+ *
  * @author Paolo Missier
- * 
+ *
  */
 public class IterationType implements ProvenanceEventType {
 	private PortsSequenceType inputdata;
@@ -62,7 +40,7 @@
 
 	/**
 	 * Gets the inputdata value for this IterationType.
-	 * 
+	 *
 	 * @return inputdata
 	 */
 	public PortsSequenceType getInputdata() {
@@ -71,7 +49,7 @@
 
 	/**
 	 * Sets the inputdata value for this IterationType.
-	 * 
+	 *
 	 * @param inputdata
 	 */
 	public void setInputdata(PortsSequenceType inputdata) {
@@ -80,7 +58,7 @@
 
 	/**
 	 * Gets the outputdata value for this IterationType.
-	 * 
+	 *
 	 * @return outputdata
 	 */
 	public PortsSequenceType getOutputdata() {
@@ -89,7 +67,7 @@
 
 	/**
 	 * Sets the outputdata value for this IterationType.
-	 * 
+	 *
 	 * @param outputdata
 	 */
 	public void setOutputdata(PortsSequenceType outputdata) {
@@ -98,7 +76,7 @@
 
 	/**
 	 * Gets the id value for this IterationType.
-	 * 
+	 *
 	 * @return id
 	 */
 	public String getId() {
@@ -107,7 +85,7 @@
 
 	/**
 	 * Sets the id value for this IterationType.
-	 * 
+	 *
 	 * @param id
 	 */
 	public void setId(String id) {
diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/types/LiteralType.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/types/LiteralType.java
index 0436a5e..b8e4064 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/types/LiteralType.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/types/LiteralType.java
@@ -1,25 +1,3 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester   
- * 
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- * 
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *    
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *    
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package org.apache.taverna.provenance.lineageservice.types;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -28,9 +6,9 @@
  * 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
@@ -38,12 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
+package org.apache.taverna.provenance.lineageservice.types;
 
 /**
- * 
+ *
  * @author Paolo Missier
- * 
+ *
  */
 public class LiteralType implements ProvenanceEventType {
 	private String id; // attribute
@@ -57,7 +35,7 @@
 
 	/**
 	 * Gets the id value for this LiteralType.
-	 * 
+	 *
 	 * @return id
 	 */
 	public String getId() {
@@ -66,7 +44,7 @@
 
 	/**
 	 * Sets the id value for this LiteralType.
-	 * 
+	 *
 	 * @param id
 	 */
 	public void setId(String id) {
diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/types/PortType.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/types/PortType.java
index f3c4948..f86679a 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/types/PortType.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/types/PortType.java
@@ -1,25 +1,3 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester   
- * 
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- * 
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *    
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *    
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package org.apache.taverna.provenance.lineageservice.types;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -28,9 +6,9 @@
  * 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
@@ -38,12 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
+package org.apache.taverna.provenance.lineageservice.types;
 
 
 /**
- * 
+ *
  * @author Paolo Missier
- * 
+ *
  */
 public class PortType implements ProvenanceEventType {
 	private DataDocumentType dataDocument;
@@ -62,7 +41,7 @@
 
 	/**
 	 * Gets the dataDocument value for this PortType.
-	 * 
+	 *
 	 * @return dataDocument
 	 */
 	public DataDocumentType getDataDocument() {
@@ -71,7 +50,7 @@
 
 	/**
 	 * Sets the dataDocument value for this PortType.
-	 * 
+	 *
 	 * @param dataDocument
 	 */
 	public void setDataDocument(DataDocumentType dataDocument) {
@@ -80,7 +59,7 @@
 
 	/**
 	 * Gets the literal value for this PortType.
-	 * 
+	 *
 	 * @return literal
 	 */
 	public LiteralType getLiteral() {
@@ -89,7 +68,7 @@
 
 	/**
 	 * Sets the literal value for this PortType.
-	 * 
+	 *
 	 * @param literal
 	 */
 	public void setLiteral(LiteralType literal) {
@@ -98,7 +77,7 @@
 
 	/**
 	 * Gets the name value for this PortType.
-	 * 
+	 *
 	 * @return name
 	 */
 	public String getName() {
@@ -107,7 +86,7 @@
 
 	/**
 	 * Sets the name value for this PortType.
-	 * 
+	 *
 	 * @param name
 	 */
 	public void setName(String name) {
diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/types/PortsSequenceType.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/types/PortsSequenceType.java
index dfebce4..fa9ee74 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/types/PortsSequenceType.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/types/PortsSequenceType.java
@@ -1,25 +1,3 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester   
- * 
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- * 
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *    
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *    
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package org.apache.taverna.provenance.lineageservice.types;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -28,9 +6,9 @@
  * 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
@@ -38,12 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
+package org.apache.taverna.provenance.lineageservice.types;
 
 /**
- * 
+ *
  * @author Paolo Missier
- * 
+ *
  */
 public class PortsSequenceType implements ProvenanceEventType {
 	private PortType[] port;
@@ -57,7 +35,7 @@
 
 	/**
 	 * Gets the port value for this PortsSequenceType.
-	 * 
+	 *
 	 * @return port
 	 */
 	public PortType[] getPort() {
@@ -66,7 +44,7 @@
 
 	/**
 	 * Sets the port value for this PortsSequenceType.
-	 * 
+	 *
 	 * @param port
 	 */
 	public void setPort(PortType[] port) {
diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/types/ProcessType.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/types/ProcessType.java
index c40b554..b48f6c4 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/types/ProcessType.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/types/ProcessType.java
@@ -1,25 +1,3 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester   
- * 
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- * 
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *    
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *    
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package org.apache.taverna.provenance.lineageservice.types;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -28,9 +6,9 @@
  * 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
@@ -38,12 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
+package org.apache.taverna.provenance.lineageservice.types;
+
 
 
 /**
- * 
+ *
  * @author Paolo Missier
- * 
+ *
  */
 public class ProcessType implements ProvenanceEventType {
 	private ProcessorType[] processor;
@@ -62,7 +42,7 @@
 
 	/**
 	 * Gets the processor value for this ProcessType.
-	 * 
+	 *
 	 * @return processor
 	 */
 	public ProcessorType[] getProcessor() {
@@ -71,7 +51,7 @@
 
 	/**
 	 * Sets the processor value for this ProcessType.
-	 * 
+	 *
 	 * @param processor
 	 */
 	public void setProcessor(ProcessorType[] processor) {
@@ -88,7 +68,7 @@
 
 	/**
 	 * Gets the dataflowID value for this ProcessType.
-	 * 
+	 *
 	 * @return dataflowID
 	 */
 	public String getDataflowID() {
@@ -97,7 +77,7 @@
 
 	/**
 	 * Sets the dataflowID value for this ProcessType.
-	 * 
+	 *
 	 * @param dataflowID
 	 */
 	public void setDataflowID(String dataflowID) {
@@ -106,7 +86,7 @@
 
 	/**
 	 * Gets the facadeID value for this ProcessType.
-	 * 
+	 *
 	 * @return facadeID
 	 */
 	public String getFacadeID() {
@@ -115,7 +95,7 @@
 
 	/**
 	 * Sets the facadeID value for this ProcessType.
-	 * 
+	 *
 	 * @param facadeID
 	 */
 	public void setFacadeID(String facadeID) {
diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/types/ProcessorType.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/types/ProcessorType.java
index 5627e64..edd90c4 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/types/ProcessorType.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/types/ProcessorType.java
@@ -1,25 +1,3 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester   
- * 
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- * 
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *    
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *    
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package org.apache.taverna.provenance.lineageservice.types;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -28,9 +6,9 @@
  * 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
@@ -38,12 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
+package org.apache.taverna.provenance.lineageservice.types;
 
 
 /**
- * 
+ *
  * @author Paolo Missier
- * 
+ *
  */
 public class ProcessorType implements ProvenanceEventType {
 	private ActivityType[] activity;
@@ -59,7 +38,7 @@
 
 	/**
 	 * Gets the activity value for this ProcessorType.
-	 * 
+	 *
 	 * @return activity
 	 */
 	public ActivityType[] getActivity() {
@@ -68,7 +47,7 @@
 
 	/**
 	 * Sets the activity value for this ProcessorType.
-	 * 
+	 *
 	 * @param activity
 	 */
 	public void setActivity(ActivityType[] activity) {
@@ -85,7 +64,7 @@
 
 	/**
 	 * Gets the id value for this ProcessorType.
-	 * 
+	 *
 	 * @return id
 	 */
 	public String getId() {
@@ -94,7 +73,7 @@
 
 	/**
 	 * Sets the id value for this ProcessorType.
-	 * 
+	 *
 	 * @param id
 	 */
 	public void setId(String id) {
diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/types/ProvenanceEventType.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/types/ProvenanceEventType.java
index 399ab2c..506c6fb 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/types/ProvenanceEventType.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/types/ProvenanceEventType.java
@@ -1,25 +1,3 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester   
- * 
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- * 
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *    
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *    
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package org.apache.taverna.provenance.lineageservice.types;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -28,9 +6,9 @@
  * 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
@@ -39,10 +17,11 @@
  * under the License.
  */
 
+package org.apache.taverna.provenance.lineageservice.types;
 
 /**
  * Used by an implementation of Provenance to identify the item type
- * 
+ *
  * @author Paolo Missier
  */
 public interface ProvenanceEventType {
diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/Activity.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/Activity.java
index 99bfc39..1ed3155 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/Activity.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/Activity.java
@@ -1,5 +1,3 @@
-package org.apache.taverna.provenance.lineageservice.utils;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -8,9 +6,9 @@
  * 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
@@ -18,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
+package org.apache.taverna.provenance.lineageservice.utils;
 
 public class Activity {
 	private String activityId;
diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/Collection.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/Collection.java
index b2f7901..01886fd 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/Collection.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/Collection.java
@@ -1,5 +1,3 @@
-package org.apache.taverna.provenance.lineageservice.utils;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -8,9 +6,9 @@
  * 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
@@ -18,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
+package org.apache.taverna.provenance.lineageservice.utils;
 
 public class Collection {
 	private String identifier;
diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/DDRecord.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/DDRecord.java
index 2ff0705..481e729 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/DDRecord.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/DDRecord.java
@@ -1,8 +1,3 @@
-/**
- * 
- */
-package org.apache.taverna.provenance.lineageservice.utils;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -11,9 +6,9 @@
  * 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
@@ -21,13 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
+package org.apache.taverna.provenance.lineageservice.utils;
 
 /**
  * a simple bean to hold a database record from the DD table
- * 
+ *
  * @author paolo
- * 
+ *
  */
 public class DDRecord {
 
diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/DataBinding.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/DataBinding.java
index f4c1832..d3474c0 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/DataBinding.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/DataBinding.java
@@ -1,5 +1,3 @@
-package org.apache.taverna.provenance.lineageservice.utils;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -8,9 +6,9 @@
  * 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
@@ -18,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
+package org.apache.taverna.provenance.lineageservice.utils;
 
 public class DataBinding {
 	private String dataBindingId;
diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/DataLink.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/DataLink.java
index bd11534..efce6f7 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/DataLink.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/DataLink.java
@@ -1,25 +1,3 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester   
- * 
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- * 
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *    
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *    
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package org.apache.taverna.provenance.lineageservice.utils;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -28,9 +6,9 @@
  * 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
@@ -38,12 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
-
-/**
- * @author paolo
- * 
- */
+package org.apache.taverna.provenance.lineageservice.utils;
 
 public class DataLink {
 	private String workflowId;
diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/DataValueExtractor.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/DataValueExtractor.java
index 29b905c..0e74f02 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/DataValueExtractor.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/DataValueExtractor.java
@@ -1,8 +1,3 @@
-/**
- * 
- */
-package org.apache.taverna.provenance.lineageservice.utils;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -11,9 +6,9 @@
  * 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
@@ -21,19 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
+package org.apache.taverna.provenance.lineageservice.utils;
 
-
-/**
- * @author paolo
- * 
- */
 public interface DataValueExtractor {
 
 	/**
 	 * extracts a printable string from a more complex object. This is not the
 	 * same as toString() as it is applied to an object, rather than being a
 	 * method on the object itself
-	 * 
+	 *
 	 * @param complexContent
 	 *            should really be a byte array FIXME
 	 * @return
diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/DataflowInvocation.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/DataflowInvocation.java
index 94309a9..cf59687 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/DataflowInvocation.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/DataflowInvocation.java
@@ -1,5 +1,3 @@
-package org.apache.taverna.provenance.lineageservice.utils;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -8,9 +6,9 @@
  * 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
@@ -18,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
+package org.apache.taverna.provenance.lineageservice.utils;
 
 import java.sql.Timestamp;
 
diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/NestedListNode.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/NestedListNode.java
index 6b060c4..9f3d8b4 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/NestedListNode.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/NestedListNode.java
@@ -1,8 +1,3 @@
-/**
- * 
- */
-package org.apache.taverna.provenance.lineageservice.utils;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -11,9 +6,9 @@
  * 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
@@ -21,12 +16,8 @@
  * specific language governing permissions and limitations
  * under the License.
  */
+package org.apache.taverna.provenance.lineageservice.utils;
 
-
-/**
- * @author paolo
- * 
- */
 public class NestedListNode {
 	private String collectionT2Reference;
 	private String parentCollectionT2Reference;
diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/Port.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/Port.java
index db217ef..63e65af 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/Port.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/Port.java
@@ -1,25 +1,3 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester   
- * 
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- * 
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *    
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *    
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package org.apache.taverna.provenance.lineageservice.utils;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -28,9 +6,9 @@
  * 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
@@ -38,11 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
+package org.apache.taverna.provenance.lineageservice.utils;
 
 /**
  * a Port that has no pName is either a WF input or output, depending on isInput
- * 
+ *
  * @author Paolo Missier
  */
 public class Port {
diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/PortBinding.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/PortBinding.java
index 8e6d78b..838f3e7 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/PortBinding.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/PortBinding.java
@@ -1,25 +1,3 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester   
- * 
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- * 
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *    
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *    
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package org.apache.taverna.provenance.lineageservice.utils;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -28,9 +6,9 @@
  * 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
@@ -38,12 +16,8 @@
  * specific language governing permissions and limitations
  * under the License.
  */
+package org.apache.taverna.provenance.lineageservice.utils;
 
-
-/**
- * @author Paolo Missier
- * 
- */
 public class PortBinding {
 	private String workflowId;
 	private String portName;
diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/ProcessorBinding.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/ProcessorBinding.java
index 7050c20..a11f0e2 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/ProcessorBinding.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/ProcessorBinding.java
@@ -1,25 +1,3 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester   
- * 
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- * 
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *    
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *    
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package org.apache.taverna.provenance.lineageservice.utils;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -28,9 +6,9 @@
  * 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
@@ -38,12 +16,8 @@
  * specific language governing permissions and limitations
  * under the License.
  */
+package org.apache.taverna.provenance.lineageservice.utils;
 
-
-/**
- * @author Paolo Missier
- * 
- */
 public class ProcessorBinding {
 	private String identifier;
 
diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/ProcessorEnactment.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/ProcessorEnactment.java
index 63bc8ba..23c9860 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/ProcessorEnactment.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/ProcessorEnactment.java
@@ -1,5 +1,3 @@
-package org.apache.taverna.provenance.lineageservice.utils;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -8,9 +6,9 @@
  * 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
@@ -18,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
+package org.apache.taverna.provenance.lineageservice.utils;
 
 import java.sql.Timestamp;
 
diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/ProvenanceProcessor.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/ProvenanceProcessor.java
index bcfacc0..a32d688 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/ProvenanceProcessor.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/ProvenanceProcessor.java
@@ -1,25 +1,3 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester   
- * 
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- * 
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *    
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *    
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package org.apache.taverna.provenance.lineageservice.utils;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -28,9 +6,9 @@
  * 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
@@ -38,11 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
+package org.apache.taverna.provenance.lineageservice.utils;
 
 /**
  * a Port that has no pName is either a WF input or output, depending on isInput
- * 
+ *
  * @author Paolo Missier
  */
 public class ProvenanceProcessor {
diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/ProvenanceUtils.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/ProvenanceUtils.java
index 64f87c2..2558377 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/ProvenanceUtils.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/ProvenanceUtils.java
@@ -1,5 +1,3 @@
-package org.apache.taverna.provenance.lineageservice.utils;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -8,9 +6,9 @@
  * 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
@@ -18,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
+package org.apache.taverna.provenance.lineageservice.utils;
 
 import static net.sf.taverna.t2.provenance.vocabulary.SharedVocabulary.INPUTDATA_EVENT_TYPE;
 
@@ -38,7 +36,7 @@
 
 public class ProvenanceUtils {
 	public static Pattern parentProcessPattern = Pattern.compile("^(.*):?[^:]+:[^:]+$");
-	
+
 	public static String iterationToString(int[] iteration) {
 		String result = "[";
 		for (int i = 0; i < iteration.length; i++) {
@@ -49,7 +47,7 @@
 		result += "]";
 		return result;
 	}
-	
+
 	/**
 	 * Returns an Element representing the data item, identfied as either input
 	 * or output. References to data are currently resolved to their actual
@@ -81,11 +79,11 @@
 		}
 		return result;
 	}
-	
+
 	/**
 	 * Given a {@link T2Reference} return all the other {@link T2Reference}s
 	 * which it contains as an XML Element.
-	 * 
+	 *
 	 * @param entityIdentifier
 	 * @return
 	 * @throws NotFoundException
diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/QueryPort.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/QueryPort.java
index 2fbc729..1faf001 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/QueryPort.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/QueryPort.java
@@ -1,8 +1,3 @@
-/**
- * 
- */
-package org.apache.taverna.provenance.lineageservice.utils;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -11,9 +6,9 @@
  * 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
@@ -22,12 +17,8 @@
  * under the License.
  */
 
+package org.apache.taverna.provenance.lineageservice.utils;
 
-/**
- * @author Paolo Missier
- *         <p/>
- * 
- */
 public class QueryPort {
 	private String workflowRunId;
 	private String workflowId;
diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/ServiceInvocation.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/ServiceInvocation.java
index 36d909b..321cb42 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/ServiceInvocation.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/ServiceInvocation.java
@@ -1,5 +1,3 @@
-package org.apache.taverna.provenance.lineageservice.utils;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -8,9 +6,9 @@
  * 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
@@ -18,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
+package org.apache.taverna.provenance.lineageservice.utils;
 
 import java.sql.Timestamp;
 
diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/Workflow.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/Workflow.java
index c40f937..2a3e4ff 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/Workflow.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/Workflow.java
@@ -1,5 +1,3 @@
-package org.apache.taverna.provenance.lineageservice.utils;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -8,9 +6,9 @@
  * 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
@@ -18,13 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
+package org.apache.taverna.provenance.lineageservice.utils;
 
 public class Workflow {
 	private String workflowId;
 	private String parentWorkflowId;
 	private String externalName;
-	
+
 	public void setWorkflowId(String workflowId) {
 		this.workflowId = workflowId;
 	}
@@ -53,5 +51,5 @@
 	 */
 	public void setExternalName(String externalName) {
 		this.externalName = externalName;
-	}	
+	}
 }
diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/WorkflowRun.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/WorkflowRun.java
index ef984bf..0cdf267 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/WorkflowRun.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/WorkflowRun.java
@@ -1,5 +1,3 @@
-package org.apache.taverna.provenance.lineageservice.utils;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -8,9 +6,9 @@
  * 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
@@ -18,6 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
+package org.apache.taverna.provenance.lineageservice.utils;
 
 
 import java.sql.Blob;
@@ -77,7 +76,7 @@
 	public void setWorkflowExternalName(String workflowExternalName) {
 		this.workflowExternalName = workflowExternalName;
 	}
-	
+
 	/**
 	 * A {@link Blob} object representing the dataflow
 	 * @param bs
diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/WorkflowTree.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/WorkflowTree.java
index 3d33f0a..9310c9c 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/WorkflowTree.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/utils/WorkflowTree.java
@@ -1,8 +1,3 @@
-/**
- * 
- */
-package org.apache.taverna.provenance.lineageservice.utils;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -11,9 +6,9 @@
  * 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
@@ -21,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
+package org.apache.taverna.provenance.lineageservice.utils;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -29,7 +24,7 @@
 /**
  * a tree structure used to describe the nested static structure of a workflow
  * as it is found in the provenance DB
- * 
+ *
  * @author Paolo Missier
  */
 public class WorkflowTree {
diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/opm/OPMImporter.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/opm/OPMImporter.java
index fd1fd98..cf548a7 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/opm/OPMImporter.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/opm/OPMImporter.java
@@ -1,8 +1,3 @@
-/**
- * 
- */
-package org.apache.taverna.provenance.opm;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -11,9 +6,9 @@
  * 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
@@ -21,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
+package org.apache.taverna.provenance.opm;
 
 import java.io.File;
 import java.sql.SQLException;
@@ -61,7 +56,7 @@
  * imports foreign XML-serialized OPM graphs into the native Taverna provenance
  * DB, so they can be queried using
  * {@link org.apache.taverna.provenance.lineageservice.ProvenanceAnalysis}
- * 
+ *
  * @author paolo
  */
 public class OPMImporter {
@@ -90,13 +85,13 @@
 
 	public OPMImporter(ProvenanceWriter pw) {
 		this.pw = pw;
-	}	
+	}
 
 	/**
 	 * orphan artifacts are those that are in the graph but are never used
 	 * neither generated. this indicates some problem with the graph structure.
 	 * this method is used for diagnostics after import has finished
-	 * 
+	 *
 	 * @return
 	 */
 	public List<String> getOrphanArtifacts() {
@@ -163,7 +158,7 @@
 		}
 
 		// what have we got?
-		// retrieve all OPM relations from the graph		
+		// retrieve all OPM relations from the graph
 		Dependencies dependencies = graph.getDependencies();
 
 		/*
@@ -206,7 +201,7 @@
 		for (WasDerivedFrom dep : wdfSet)
 			processWDF(dep);
 
-		// we actually ignore the others... 
+		// we actually ignore the others...
 
 		// *********
 		// complete the induced graph by building datalinks using the Artifact -> [Port] maps
@@ -217,7 +212,7 @@
 		accountNames.add(OPM_DEF_ACCOUNT);
 
 		/* Disabled as allAccounts is never assigned to
-		if (allAccounts != null)  
+		if (allAccounts != null)
 			for (Account acc:allAccounts) { accountNames.add(acc.getId()); }
 		*/
 
@@ -318,7 +313,7 @@
 
 	/**
 	 * generic processing of a process-artifact dependency
-	 * 
+	 *
 	 * @param procID
 	 * @param artId
 	 * @param role
@@ -347,7 +342,7 @@
 	 * used(A,R,P,acc): generates a process for P, a Port for (P,R) an
 	 * <em>input</em> PortBinding for (P,R,A) <br/>
 	 * this is very similar to {@link #processWGBy(WasGeneratedBy)}
-	 * 
+	 *
 	 * @param dep
 	 */
 	private void processUsed(Used dep) {
@@ -409,7 +404,7 @@
 	 * wgb(A,R,P,Acc): generates a Process for P, a Port for (P,R), an
 	 * <em>output</em> PortBinding for (P,R,A) This is all relative to the
 	 * workflow corresponding to account Acc.
-	 * 
+	 *
 	 * @param dep
 	 * @throws SQLException
 	 */
@@ -474,7 +469,7 @@
 	 * note that this analysis is conducted regardless of the accounts in which
 	 * the wgby and used properties appear, as one account could be used
 	 * deliberately to This will unclutter the DB.
-	 * 
+	 *
 	 * @param dep
 	 */
 	private void processWDF(WasDerivedFrom dep) {
diff --git a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/opm/OPMManager.java b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/opm/OPMManager.java
index 98968b8..80f234b 100644
--- a/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/opm/OPMManager.java
+++ b/taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/opm/OPMManager.java
@@ -1,8 +1,3 @@
-/**
- * 
- */
-package org.apache.taverna.provenance.opm;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -11,9 +6,9 @@
  * 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
@@ -21,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
+package org.apache.taverna.provenance.opm;
 
 import static org.tupeloproject.rdf.Resource.literal;
 import static org.tupeloproject.rdf.Resource.uriRef;
@@ -56,7 +51,7 @@
 
 /**
  * @author paolo
- * 
+ *
  */
 public class OPMManager {
 	private static Logger logger = Logger.getLogger(OPMManager.class);
@@ -89,7 +84,7 @@
 	/**
 	 * default implementation of this method returns null -- has no idea how to
 	 * extract simple values from incoming artifact values
-	 * 
+	 *
 	 * @return
 	 */
 	public List<DataValueExtractor> getDataValueExtractor() {
@@ -99,7 +94,7 @@
 	/**
 	 * create new account to hold the causality graph and give it a Resource
 	 * name
-	 * 
+	 *
 	 * @param accountName
 	 * @throws ProvenanceException
 	 */
@@ -162,7 +157,7 @@
 
 	/**
 	 * no actual value is recorded
-	 * 
+	 *
 	 * @param aName
 	 * @return
 	 * @throws ProvenanceException
@@ -221,7 +216,7 @@
 		} catch (URISyntaxException e1) {
 			processID = uriGenerator.makeProcessorURI(processorName, workflowId);
 		}
-		
+
 		uriGenerator.makeIteration(workflowRunId, workflowId, processorName,
 				iterationVector);
 
@@ -383,7 +378,7 @@
 //	public String Rdf2Xml() throws OperatorException, IOException, JAXBException {
 //
 //		OPMRdf2Xml converter = new OPMRdf2Xml();
-//		converter.convert(OPM_RDF_GRAPH_FILE, OPM_XML_GRAPH_FILE);		
+//		converter.convert(OPM_RDF_GRAPH_FILE, OPM_XML_GRAPH_FILE);
 //		return OPM_XML_GRAPH_FILE;
 //	}
 
@@ -391,8 +386,8 @@
 	 * creates a dot file from the current OPMGraph. <br/>
 	 * DOT NOT USE NEEDS FIXING
 	 * @return
-	 * @throws IOException 
-	 * @throws OperatorException 
+	 * @throws IOException
+	 * @throws OperatorException
 	 */
 	/*
 	public String Rdf2Dot() throws OperatorException, IOException {
@@ -400,14 +395,14 @@
 		OPMRdf2Xml converter = new OPMRdf2Xml();
 		OPMGraph graph = converter.convert(OPM_RDF_GRAPH_FILE);
 
-		List<Process> processes = graph.getProcesses().getProcess();		
+		List<Process> processes = graph.getProcesses().getProcess();
 		for (Process p:processes) { p.setId("\""+p.getId()+"\""); }
 
-		List<Artifact> artifacts = graph.getArtifacts().getArtifact();		
+		List<Artifact> artifacts = graph.getArtifacts().getArtifact();
 		for (Artifact a:artifacts) { a.setId("\""+a.getId()+"\""); }
 
-//		OPMToDot aOPMToDot = new OPMToDot(DOT_CONFIG_FILE);  		
-		OPMToDot aOPMToDot = new OPMToDot();  		
+//		OPMToDot aOPMToDot = new OPMToDot(DOT_CONFIG_FILE);
+		OPMToDot aOPMToDot = new OPMToDot();
 
 		aOPMToDot.convert(graph, new File(OPM_DOT_FILE));
 		return OPM_DOT_FILE;
