diff --git a/apache-taverna-activity-gis-activity-ui/src/main/java/org/apache/taverna/gis/ui/config/GisConfigurationPanel.java b/apache-taverna-activity-gis-activity-ui/src/main/java/org/apache/taverna/gis/ui/config/GisConfigurationPanel.java
index 160adce..15c0cfd 100644
--- a/apache-taverna-activity-gis-activity-ui/src/main/java/org/apache/taverna/gis/ui/config/GisConfigurationPanel.java
+++ b/apache-taverna-activity-gis-activity-ui/src/main/java/org/apache/taverna/gis/ui/config/GisConfigurationPanel.java
@@ -1,3 +1,23 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
 package org.apache.taverna.gis.ui.config;
 
 import java.awt.GridLayout;
diff --git a/apache-taverna-activity-gis-activity-ui/src/main/java/org/apache/taverna/gis/ui/config/GisConfigureAction.java b/apache-taverna-activity-gis-activity-ui/src/main/java/org/apache/taverna/gis/ui/config/GisConfigureAction.java
index 32ea030..c968fea 100644
--- a/apache-taverna-activity-gis-activity-ui/src/main/java/org/apache/taverna/gis/ui/config/GisConfigureAction.java
+++ b/apache-taverna-activity-gis-activity-ui/src/main/java/org/apache/taverna/gis/ui/config/GisConfigureAction.java
@@ -1,3 +1,23 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
 package org.apache.taverna.gis.ui.config;
 
 import java.awt.event.ActionEvent;
diff --git a/apache-taverna-activity-gis-activity-ui/src/main/java/org/apache/taverna/gis/ui/menu/GisConfigureMenuAction.java b/apache-taverna-activity-gis-activity-ui/src/main/java/org/apache/taverna/gis/ui/menu/GisConfigureMenuAction.java
index cdf45dc..2c8065d 100644
--- a/apache-taverna-activity-gis-activity-ui/src/main/java/org/apache/taverna/gis/ui/menu/GisConfigureMenuAction.java
+++ b/apache-taverna-activity-gis-activity-ui/src/main/java/org/apache/taverna/gis/ui/menu/GisConfigureMenuAction.java
@@ -1,3 +1,23 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
 package org.apache.taverna.gis.ui.menu;
 
 import java.net.URI;
diff --git a/apache-taverna-activity-gis-activity-ui/src/main/java/org/apache/taverna/gis/ui/serviceprovider/GisServiceDesc.java b/apache-taverna-activity-gis-activity-ui/src/main/java/org/apache/taverna/gis/ui/serviceprovider/GisServiceDesc.java
index 5361629..c9a93f0 100644
--- a/apache-taverna-activity-gis-activity-ui/src/main/java/org/apache/taverna/gis/ui/serviceprovider/GisServiceDesc.java
+++ b/apache-taverna-activity-gis-activity-ui/src/main/java/org/apache/taverna/gis/ui/serviceprovider/GisServiceDesc.java
@@ -1,3 +1,23 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
 package org.apache.taverna.gis.ui.serviceprovider;
 
 import java.net.URI;
@@ -15,7 +35,7 @@
 	public static final URI ACTIVITY_TYPE = URI
 			.create("http://ns.taverna.org.uk/2016/activity/gis");
 
-	
+
 	/**
 	 * The type of Activity which should be instantiated when adding a service
 	 * for this description
@@ -34,7 +54,7 @@
 		json.put("processIdentifier", processIdentifier);
 		return configuration;
 	}
-	
+
 	/**
 	 * An icon to represent this service description in the service palette.
 	 */
@@ -73,12 +93,12 @@
 		return Arrays.<Object>asList(ogcServiceUri, processIdentifier);
 	}
 
-	
+
 	// All fields are searchable in the Service palette,
 	// for instance try a search for exampleString:3
 	private URI ogcServiceUri;
 	private String processIdentifier;
-	
+
 	public URI getOgcServiceUri() {
 		return ogcServiceUri;
 	}
diff --git a/apache-taverna-activity-gis-activity-ui/src/main/java/org/apache/taverna/gis/ui/serviceprovider/GisServiceIcon.java b/apache-taverna-activity-gis-activity-ui/src/main/java/org/apache/taverna/gis/ui/serviceprovider/GisServiceIcon.java
index 5f56537..f2f3c56 100644
--- a/apache-taverna-activity-gis-activity-ui/src/main/java/org/apache/taverna/gis/ui/serviceprovider/GisServiceIcon.java
+++ b/apache-taverna-activity-gis-activity-ui/src/main/java/org/apache/taverna/gis/ui/serviceprovider/GisServiceIcon.java
@@ -1,3 +1,23 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
 package org.apache.taverna.gis.ui.serviceprovider;
 
 import java.net.URI;
diff --git a/apache-taverna-activity-gis-activity-ui/src/main/java/org/apache/taverna/gis/ui/serviceprovider/GisServiceProvider.java b/apache-taverna-activity-gis-activity-ui/src/main/java/org/apache/taverna/gis/ui/serviceprovider/GisServiceProvider.java
index 13ad4b2..9811100 100644
--- a/apache-taverna-activity-gis-activity-ui/src/main/java/org/apache/taverna/gis/ui/serviceprovider/GisServiceProvider.java
+++ b/apache-taverna-activity-gis-activity-ui/src/main/java/org/apache/taverna/gis/ui/serviceprovider/GisServiceProvider.java
@@ -1,3 +1,23 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
 package org.apache.taverna.gis.ui.serviceprovider;
 
 import java.io.IOException;
@@ -32,7 +52,7 @@
 
 	public GisServiceProvider() {
 		super(defaultConfig());
-		
+
 	}
 
 	private static Configuration defaultConfig() {
@@ -69,16 +89,16 @@
 		// TODO: Optional: set description (Set a better description
 		service.setDescription(processIdentifier);
 
-		// TODO: Exctract in a separate method 
+		// TODO: Exctract in a separate method
 		// Get input ports
-		
+
 		WPSClientSession wpsClient = WPSClientSession.getInstance();
 
         ProcessDescriptionType processDescription;
 		try {
 			processDescription = wpsClient
 			        .getProcessDescription(serviceUri, processIdentifier);
-		
+
 			InputDescriptionType[] inputList = processDescription.getDataInputs()
 	                .getInputArray();
 
@@ -91,36 +111,36 @@
 	    		newInputPort.setAllowsLiteralValues(true);
 	    		newInputPort.setHandledReferenceSchemes(null);
 	    		newInputPort.setTranslatedElementType(String.class);
-	    		
+
 	    		inputPortDefinitions.add(newInputPort);
-	    		
+
 	        }
-	        
+
 	       // service.setInputPortDefinitions(inputPortDefinitions);
-			
-	        
+
+
 	        // Get output ports
-	        
+
 	        OutputDescriptionType[] outputList = processDescription.getProcessOutputs().getOutputArray();
 	        List<ActivityOutputPortDefinitionBean> outputPortDefinitions = new ArrayList<ActivityOutputPortDefinitionBean>();
-	        
+
 	        for( OutputDescriptionType output : outputList )
 	        {
 	        	ActivityOutputPortDefinitionBean newOutputPort = new ActivityOutputPortDefinitionBean();
 	        	newOutputPort.setName(output.getIdentifier().getStringValue());
 	        	newOutputPort.setDepth(0);
-	        	
+
 	        	outputPortDefinitions.add(newOutputPort);
-	        	
+
 	        }
-		
+
 	        //service.setOutputPortDefinitions(outputPortDefinitions);
-	        
+
 		} catch (IOException e) {
 			// TODO Auto-generated catch block
 			e.printStackTrace();
 		}
-        
+
 		results.add(service);
 
 		// partialResults() can also be called several times from inside
@@ -130,7 +150,7 @@
 		// No more results will be coming
 		callBack.finished();
 	}
-	
+
 	/**
 	 * Icon for service provider
 	 */
@@ -157,7 +177,7 @@
 
 	@Override
 	protected List<? extends Object> getIdentifyingData() {
-		return Arrays.asList(getConfiguration().getJson().get("osgiServiceUri"), 
+		return Arrays.asList(getConfiguration().getJson().get("osgiServiceUri"),
 				getConfiguration().getJson().get("processIdentifier"));
 	}
 
@@ -180,5 +200,5 @@
 		return false;
 	}
 
-	
+
 }
diff --git a/apache-taverna-activity-gis-activity-ui/src/main/java/org/apache/taverna/gis/ui/view/GisActivityContextViewFactory.java b/apache-taverna-activity-gis-activity-ui/src/main/java/org/apache/taverna/gis/ui/view/GisActivityContextViewFactory.java
index 1a0dc13..958c626 100644
--- a/apache-taverna-activity-gis-activity-ui/src/main/java/org/apache/taverna/gis/ui/view/GisActivityContextViewFactory.java
+++ b/apache-taverna-activity-gis-activity-ui/src/main/java/org/apache/taverna/gis/ui/view/GisActivityContextViewFactory.java
@@ -1,3 +1,23 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
 package org.apache.taverna.gis.ui.view;
 
 import java.net.URI;
diff --git a/apache-taverna-activity-gis-activity-ui/src/main/java/org/apache/taverna/gis/ui/view/GisContextualView.java b/apache-taverna-activity-gis-activity-ui/src/main/java/org/apache/taverna/gis/ui/view/GisContextualView.java
index 08fff1f..d0d4274 100644
--- a/apache-taverna-activity-gis-activity-ui/src/main/java/org/apache/taverna/gis/ui/view/GisContextualView.java
+++ b/apache-taverna-activity-gis-activity-ui/src/main/java/org/apache/taverna/gis/ui/view/GisContextualView.java
@@ -1,3 +1,23 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
 package org.apache.taverna.gis.ui.view;
 
 import java.awt.Frame;
diff --git a/apache-taverna-activity-gis-activity/src/main/java/org/apache/taverna/gis/GisActivity.java b/apache-taverna-activity-gis-activity/src/main/java/org/apache/taverna/gis/GisActivity.java
index aa5c952..2b8aef0 100644
--- a/apache-taverna-activity-gis-activity/src/main/java/org/apache/taverna/gis/GisActivity.java
+++ b/apache-taverna-activity-gis-activity/src/main/java/org/apache/taverna/gis/GisActivity.java
@@ -1,3 +1,23 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
 package org.apache.taverna.gis;
 
 import java.io.IOException;
@@ -32,7 +52,7 @@
 
 public class GisActivity extends AbstractAsynchronousActivity<GisActivityConfigurationBean>
 		implements AsynchronousActivity<GisActivityConfigurationBean> {
-	
+
 	private GisActivityConfigurationBean configBean;
 
 	@Override
@@ -61,13 +81,13 @@
 		{
 			addInput(inputPort.getName(),inputPort.getDepth(),inputPort.getAllowsLiteralValues(),inputPort.getHandledReferenceSchemes(), inputPort.getTranslatedElementType());
 		}
-		
+
 		// Add output ports
 		for(ActivityOutputPortDefinitionBean outputPort : configBean.getOutputPortDefinitions())
 		{
 			addOutput(outputPort.getName(),outputPort.getDepth());
 		}
-		
+
 	}
 
 	@SuppressWarnings("unchecked")
@@ -82,27 +102,27 @@
 
 				// Declare outputs variable
 				Map<String, T2Reference> outputs = null;
-				
+
 				try {
-					
+
 					// prepare the execute object
 					WPSClientSession wpsClient = WPSClientSession.getInstance();
 
 					ProcessDescriptionType processDescription = wpsClient.getProcessDescription(configBean.getOgcServiceUri().toString(), configBean.getProcessIdentifier());
-					
+
 					ExecuteRequestBuilder executeBuilder = new ExecuteRequestBuilder(processDescription);
 
 					for (ActivityInputPortDefinitionBean activityInputPort : configBean.getInputPortDefinitions()) {
 						String portValue = (String) referenceService.renderIdentifier(inputs.get(activityInputPort.getName()), String.class, context);
 						executeBuilder.addLiteralData(activityInputPort.getName(), portValue);
 					}
-				
+
 					ExecuteDocument execute = executeBuilder.getExecute();
-			
+
 					execute.getExecute().setService("WPS");
-					
+
 					Object responseObject = null;
-					
+
 					try {
 						// execute service
 						responseObject = wpsClient.execute(configBean.getOgcServiceUri().toString(), execute);
@@ -114,30 +134,30 @@
 					// Register outputs
 					outputs = new HashMap<String, T2Reference>();
 					T2Reference simpleRef = null;
-					
+
 					if (responseObject instanceof ExecuteResponseDocument) {
 			            ExecuteResponseDocument response = (ExecuteResponseDocument) responseObject;
-			            
+
 			            // analyser is used to get complex data
 			            ExecuteResponseAnalyser analyser = new ExecuteResponseAnalyser(
 			                    execute, response, processDescription);
-			            
+
 			            for(OutputDataType output : response.getExecuteResponse().getProcessOutputs().getOutputArray())
 						{
 			            	DataType data = output.getData();
-			            	
+
 			            	if (data.isSetLiteralData())
 							{
 			            		simpleRef = referenceService.register(data.getLiteralData().getStringValue(), 0, true, context);
 
 								outputs.put(output.getIdentifier().getStringValue(), simpleRef);
 							}
-			            	
+
 						}
-			            
+
 			        }
-					
-					
+
+
 				} catch (WPSClientException e) {
 					callback.fail(e.getMessage());
 				} catch (IOException e) {
diff --git a/apache-taverna-activity-gis-activity/src/main/java/org/apache/taverna/gis/GisActivityConfigurationBean.java b/apache-taverna-activity-gis-activity/src/main/java/org/apache/taverna/gis/GisActivityConfigurationBean.java
index 31d193b..babafae 100644
--- a/apache-taverna-activity-gis-activity/src/main/java/org/apache/taverna/gis/GisActivityConfigurationBean.java
+++ b/apache-taverna-activity-gis-activity/src/main/java/org/apache/taverna/gis/GisActivityConfigurationBean.java
@@ -1,3 +1,23 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
 package org.apache.taverna.gis;
 
 import java.io.Serializable;
@@ -10,13 +30,13 @@
 
 /**
  * Gis activity configuration bean.
- * 
+ *
  */
 public class GisActivityConfigurationBean extends ActivityPortsDefinitionBean implements Serializable {
 
 	/*
 	 * TODO: Remove this comment. Should the jackson ojbect be managed in this class?
-	 * 
+	 *
 	 * The configuration specifies the variable options and configurations for
 	 * an activity that has been added to a workflow. For instance for a WSDL
 	 * activity, the configuration contains the URL for the WSDL together with
@@ -24,19 +44,19 @@
 	 * is to be returned, while Beanshell script configurations contain both the
 	 * scripts and the input/output ports (by subclassing
 	 * ActivityPortsDefinitionBean).
-	 * 
+	 *
 	 * Configuration beans are serialised as XML (currently by using XMLBeans)
 	 * when Taverna is saving the workflow definitions. Therefore the
 	 * configuration beans need to follow the JavaBeans style and only have
 	 * fields of 'simple' types such as Strings, integers, etc. Other beans can
 	 * be referenced as well, as long as they are part of the same plugin.
 	 */
-	
+
 
 	private URI ogcServiceUri;
 	private String processIdentifier;
-	
-	public URI getOgcServiceUri() {	
+
+	public URI getOgcServiceUri() {
 		return ogcServiceUri;
 	}
 	public void setOgcServiceUri(URI ogcServiceUri) {
diff --git a/apache-taverna-activity-gis-activity/src/main/java/org/apache/taverna/gis/GisActivityExample.java b/apache-taverna-activity-gis-activity/src/main/java/org/apache/taverna/gis/GisActivityExample.java
index e533b43..47f80f3 100644
--- a/apache-taverna-activity-gis-activity/src/main/java/org/apache/taverna/gis/GisActivityExample.java
+++ b/apache-taverna-activity-gis-activity/src/main/java/org/apache/taverna/gis/GisActivityExample.java
@@ -1,3 +1,23 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
 package org.apache.taverna.gis;
 
 import java.util.ArrayList;
diff --git a/apache-taverna-activity-gis-activity/src/main/java/org/apache/taverna/gis/GisActivityFactory.java b/apache-taverna-activity-gis-activity/src/main/java/org/apache/taverna/gis/GisActivityFactory.java
index 540dd3d..0f43ab0 100644
--- a/apache-taverna-activity-gis-activity/src/main/java/org/apache/taverna/gis/GisActivityFactory.java
+++ b/apache-taverna-activity-gis-activity/src/main/java/org/apache/taverna/gis/GisActivityFactory.java
@@ -1,3 +1,23 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
 package org.apache.taverna.gis;
 
 import static org.apache.taverna.gis.GisActivity.*;
diff --git a/apache-taverna-activity-gis-activity/src/main/java/org/apache/taverna/gis/GisActivityHealthChecker.java b/apache-taverna-activity-gis-activity/src/main/java/org/apache/taverna/gis/GisActivityHealthChecker.java
index 9e143b5..b1e3093 100644
--- a/apache-taverna-activity-gis-activity/src/main/java/org/apache/taverna/gis/GisActivityHealthChecker.java
+++ b/apache-taverna-activity-gis-activity/src/main/java/org/apache/taverna/gis/GisActivityHealthChecker.java
@@ -1,3 +1,23 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
 package org.apache.taverna.gis;
 
 import java.net.URI;
diff --git a/apache-taverna-activity-gis-activity/src/test/java/org/apache/taverna/gis/GisActivityFactoryTest.java b/apache-taverna-activity-gis-activity/src/test/java/org/apache/taverna/gis/GisActivityFactoryTest.java
index 4b137c6..9468849 100644
--- a/apache-taverna-activity-gis-activity/src/test/java/org/apache/taverna/gis/GisActivityFactoryTest.java
+++ b/apache-taverna-activity-gis-activity/src/test/java/org/apache/taverna/gis/GisActivityFactoryTest.java
@@ -1,3 +1,23 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
 package org.apache.taverna.gis;
 
 import static org.junit.Assert.assertEquals;
diff --git a/apache-taverna-activity-gis-activity/src/test/java/org/apache/taverna/gis/GisActivityTest.java b/apache-taverna-activity-gis-activity/src/test/java/org/apache/taverna/gis/GisActivityTest.java
index 1134774..6faea0d 100644
--- a/apache-taverna-activity-gis-activity/src/test/java/org/apache/taverna/gis/GisActivityTest.java
+++ b/apache-taverna-activity-gis-activity/src/test/java/org/apache/taverna/gis/GisActivityTest.java
@@ -1,3 +1,23 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
 package org.apache.taverna.gis;
 
 import static org.junit.Assert.assertEquals;
