Clean up warnings and dependencies.
diff --git a/activity-palette-impl/pom.xml b/activity-palette-impl/pom.xml
index 246d929..4926a94 100644
--- a/activity-palette-impl/pom.xml
+++ b/activity-palette-impl/pom.xml
@@ -40,22 +40,19 @@
 		</dependency>
 
 		<dependency>
-			<groupId>org.apache.log4j</groupId>
-			<artifactId>com.springsource.org.apache.log4j</artifactId>
-			<version>${log4j.version}</version>
+			<groupId>log4j</groupId>
+			<artifactId>log4j</artifactId>
 		</dependency>
 		<dependency>
-			<groupId>org.apache.commons</groupId>
-			<artifactId>com.springsource.org.apache.commons.beanutils</artifactId>
-			<version>${commons.beanutils.version}</version>
+			<groupId>commons-beanutils</groupId>
+			<artifactId>commons-beanutils</artifactId>
 		</dependency>
 		<dependency>
 			<groupId>org.jdom</groupId>
 			<artifactId>com.springsource.org.jdom</artifactId>
-			<version>${jdom.version}</version>
 		</dependency>
 
-		<!-- TODO Remove impl dependency -->
+		<!-- TODO Remove non-test impl dependency -->
 		<dependency>
 			<groupId>net.sf.taverna.t2.core</groupId>
 			<artifactId>workflowmodel-impl</artifactId>
diff --git a/activity-palette-impl/src/test/java/net/sf/taverna/t2/workbench/ui/activitypalette/ActivityPaletteConfigurationTest.java b/activity-palette-impl/src/test/java/net/sf/taverna/t2/workbench/ui/activitypalette/ActivityPaletteConfigurationTest.java
index fc4a6f3..081a9af 100644
--- a/activity-palette-impl/src/test/java/net/sf/taverna/t2/workbench/ui/activitypalette/ActivityPaletteConfigurationTest.java
+++ b/activity-palette-impl/src/test/java/net/sf/taverna/t2/workbench/ui/activitypalette/ActivityPaletteConfigurationTest.java
@@ -55,7 +55,6 @@
 		conf.restoreDefaults();
 	}
 
-	@SuppressWarnings("unchecked")
 	@Test
 	public void testEmptyList() throws Exception {
 		conf.setPropertyStringList("list", new ArrayList<String>());
@@ -65,10 +64,9 @@
 		assertEquals("There should be 0 elements",0,list.size());
 	}
 
-	@SuppressWarnings("unchecked")
 	@Test
 	public void testSingleItem() throws Exception {
-		List<String> list = new ArrayList<String>();
+		List<String> list = new ArrayList<>();
 		list.add("fred");
 		conf.setPropertyStringList("single", list);
 
@@ -80,7 +78,7 @@
 
 	@Test
 	public void testList() throws Exception {
-		List<String> list = new ArrayList<String>();
+		List<String> list = new ArrayList<>();
 		list.add("fred");
 		list.add("bloggs");
 		conf.setPropertyStringList("list", list);
diff --git a/configuration-impl/src/test/java/net/sf/taverna/t2/workbench/ui/impl/configuration/colour/ColourManagerTest.java b/configuration-impl/src/test/java/net/sf/taverna/t2/workbench/ui/impl/configuration/colour/ColourManagerTest.java
index 6deebbd..0239ea8 100644
--- a/configuration-impl/src/test/java/net/sf/taverna/t2/workbench/ui/impl/configuration/colour/ColourManagerTest.java
+++ b/configuration-impl/src/test/java/net/sf/taverna/t2/workbench/ui/impl/configuration/colour/ColourManagerTest.java
@@ -22,7 +22,6 @@
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 
 import java.awt.Color;
@@ -35,7 +34,6 @@
 import org.junit.Test;
 
 import uk.org.taverna.configuration.Configurable;
-import uk.org.taverna.configuration.ConfigurationManager;
 import uk.org.taverna.configuration.app.impl.ApplicationConfigurationImpl;
 import uk.org.taverna.configuration.impl.ConfigurationManagerImpl;
 
diff --git a/contextual-views-impl/pom.xml b/contextual-views-impl/pom.xml
index a208c35..1cafa80 100644
--- a/contextual-views-impl/pom.xml
+++ b/contextual-views-impl/pom.xml
@@ -11,8 +11,7 @@
 	<artifactId>contextual-views-impl</artifactId>
 	<packaging>bundle</packaging>
 	<name>Contextual Views Implementation</name>
-	<description>Contextual views for the activities
-	</description>
+	<description>Contextual views for the activities</description>
 	<dependencies>
 		<dependency>
 			<groupId>net.sf.taverna.t2.ui-api</groupId>
@@ -33,7 +32,6 @@
 		<dependency>
 			<groupId>javax.help</groupId>
 			<artifactId>javahelp</artifactId>
-                        <version>${javahelp.version}</version>
 		</dependency>
 
 		<dependency>
diff --git a/edits-impl/src/test/java/net/sf/taverna/t2/workbench/edits/impl/TestEditManagerImpl.java b/edits-impl/src/test/java/net/sf/taverna/t2/workbench/edits/impl/TestEditManagerImpl.java
index 4932918..9123671 100644
--- a/edits-impl/src/test/java/net/sf/taverna/t2/workbench/edits/impl/TestEditManagerImpl.java
+++ b/edits-impl/src/test/java/net/sf/taverna/t2/workbench/edits/impl/TestEditManagerImpl.java
@@ -231,8 +231,9 @@
 
 	private class EditManagerObserver implements Observer<EditManagerEvent> {
 
-		public List<EditManagerEvent> events = new ArrayList<EditManagerEvent>();
+		public List<EditManagerEvent> events = new ArrayList<>();
 
+		@Override
 		public void notify(Observable<EditManagerEvent> sender,
 				EditManagerEvent message) throws Exception {
 			events.add(message);
diff --git a/file-impl/pom.xml b/file-impl/pom.xml
index 79d1c9c..98dcce7 100644
--- a/file-impl/pom.xml
+++ b/file-impl/pom.xml
@@ -57,29 +57,24 @@
 		</dependency>
 
 		<dependency>
-			<groupId>org.apache.log4j</groupId>
-			<artifactId>com.springsource.org.apache.log4j</artifactId>
-			<version>${log4j.version}</version>
+			<groupId>log4j</groupId>
+			<artifactId>log4j</artifactId>
 		</dependency>
 		<dependency>
-			<groupId>org.apache.commons</groupId>
-			<artifactId>com.springsource.org.apache.commons.collections</artifactId>
-			<version>${commons.collections.version}</version>
+			<groupId>commons-collections</groupId>
+			<artifactId>commons-collections</artifactId>
 		</dependency>
 		<dependency>
 			<groupId>org.apache.commons</groupId>
 			<artifactId>com.springsource.org.apache.commons.lang</artifactId>
-			<version>${commons.lang.version}</version>
 		</dependency>
 		<dependency>
 			<groupId>commons-codec</groupId>
 			<artifactId>commons-codec</artifactId>
-			<version>${commons.codec.version}</version>
 		</dependency>
 		<dependency>
 			<groupId>org.jdom</groupId>
 			<artifactId>com.springsource.org.jdom</artifactId>
-			<version>${jdom.version}</version>
 		</dependency>
 
 		<dependency>
diff --git a/menu-impl/pom.xml b/menu-impl/pom.xml
index 1606707..d95bf49 100644
--- a/menu-impl/pom.xml
+++ b/menu-impl/pom.xml
@@ -55,7 +55,6 @@
 		<dependency>
 			<groupId>javax.help</groupId>
 			<artifactId>javahelp</artifactId>
-                        <version>${javahelp.version}</version>
 		</dependency>
 
 		<dependency>
diff --git a/pom.xml b/pom.xml
index 7469bf9..3df0f2b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -77,6 +77,36 @@
 				<version>${log4j.version}</version>
 			</dependency>
 			<dependency>
+				<groupId>commons-beanutils</groupId>
+				<artifactId>commons-beanutils</artifactId>
+				<version>${commons.beanutils.version}</version>
+			</dependency>
+			<dependency>
+				<groupId>commons-collections</groupId>
+				<artifactId>commons-collections</artifactId>
+				<version>${commons.collections.version}</version>
+			</dependency>
+			<dependency>
+				<groupId>commons-codec</groupId>
+				<artifactId>commons-codec</artifactId>
+				<version>${commons.codec.version}</version>
+			</dependency>
+			<dependency>
+				<groupId>commons-io</groupId>
+				<artifactId>commons-io</artifactId>
+				<version>${commons.io.version}</version>
+			</dependency>
+			<dependency>
+				<groupId>org.apache.commons</groupId>
+				<artifactId>com.springsource.org.apache.commons.lang</artifactId>
+				<version>${commons.lang.version}</version>
+			</dependency>
+			<dependency>
+				<groupId>org.jdom</groupId>
+				<artifactId>com.springsource.org.jdom</artifactId>
+				<version>${jdom.version}</version>
+			</dependency>
+			<dependency>
 				<groupId>junit</groupId>
 				<artifactId>junit</artifactId>
 				<version>${junit.version}</version>
diff --git a/renderers-impl/pom.xml b/renderers-impl/pom.xml
index ca477f5..24e06c0 100644
--- a/renderers-impl/pom.xml
+++ b/renderers-impl/pom.xml
@@ -43,14 +43,12 @@
 		</dependency>
 
 		<dependency>
-			<groupId>org.apache.log4j</groupId>
-			<artifactId>com.springsource.org.apache.log4j</artifactId>
-			<version>${log4j.version}</version>
+			<groupId>log4j</groupId>
+			<artifactId>log4j</artifactId>
 		</dependency>
 		<dependency>
 			<groupId>org.jdom</groupId>
 			<artifactId>com.springsource.org.jdom</artifactId>
-			<version>${jdom.version}</version>
 		</dependency>
 		<dependency>
 			<groupId>org.fife.ui.hex</groupId>
diff --git a/renderers-impl/src/test/java/net/sf/taverna/t2/renderers/TestRendererSPI.java b/renderers-impl/src/test/java/net/sf/taverna/t2/renderers/TestRendererSPI.java
index c113c7b..ece7cf5 100644
--- a/renderers-impl/src/test/java/net/sf/taverna/t2/renderers/TestRendererSPI.java
+++ b/renderers-impl/src/test/java/net/sf/taverna/t2/renderers/TestRendererSPI.java
@@ -30,6 +30,7 @@
 import org.junit.Test;
 
 
+@SuppressWarnings("unused")
 public class TestRendererSPI {
 	
 	private static final String TEST_NS = "testNS";
diff --git a/selection-impl/src/main/java/net/sf/taverna/t2/workbench/selection/impl/DataflowSelectionModelImpl.java b/selection-impl/src/main/java/net/sf/taverna/t2/workbench/selection/impl/DataflowSelectionModelImpl.java
index 21fb1cd..09d6f71 100644
--- a/selection-impl/src/main/java/net/sf/taverna/t2/workbench/selection/impl/DataflowSelectionModelImpl.java
+++ b/selection-impl/src/main/java/net/sf/taverna/t2/workbench/selection/impl/DataflowSelectionModelImpl.java
@@ -20,6 +20,9 @@
  ******************************************************************************/
 package net.sf.taverna.t2.workbench.selection.impl;
 
+import static net.sf.taverna.t2.workbench.selection.events.DataflowSelectionMessage.Type.ADDED;
+import static net.sf.taverna.t2.workbench.selection.events.DataflowSelectionMessage.Type.REMOVED;
+
 import java.util.Comparator;
 import java.util.HashSet;
 import java.util.List;
@@ -30,7 +33,6 @@
 import net.sf.taverna.t2.lang.observer.Observer;
 import net.sf.taverna.t2.workbench.selection.DataflowSelectionModel;
 import net.sf.taverna.t2.workbench.selection.events.DataflowSelectionMessage;
-import net.sf.taverna.t2.workbench.selection.events.DataflowSelectionMessage.Type;
 
 /**
  * Default implementation of a <code>DataflowSelectionModel</code>.
@@ -38,26 +40,21 @@
  * @author David Withers
  */
 public class DataflowSelectionModelImpl implements DataflowSelectionModel {
-
 	private MultiCaster<DataflowSelectionMessage> multiCaster;
-
-	private Set<Object> selection = new TreeSet<Object>(new Comparator<Object>() {
+	private Set<Object> selection = new TreeSet<>(new Comparator<Object>() {
 		@Override
 		public int compare(Object o1, Object o2) {
-			if (o1 == o2) {
+			if (o1 == o2)
 				return 0;
-			} else {
-				return o1.hashCode() - o2.hashCode();
-			}
+			return o1.hashCode() - o2.hashCode();
 		}
 	});
 
 	/**
 	 * Constructs a new instance of DataflowSelectionModelImpl.
-	 *
 	 */
 	public DataflowSelectionModelImpl() {
-		multiCaster = new MultiCaster<DataflowSelectionMessage>(this);
+		multiCaster = new MultiCaster<>(this);
 	}
 
 	@Override
@@ -66,46 +63,40 @@
 			if (!selection.contains(element)) {
 				clearSelection();
 				selection.add(element);
-				multiCaster.notify(new DataflowSelectionMessage(Type.ADDED, element));
+				multiCaster.notify(new DataflowSelectionMessage(ADDED, element));
 			}
 		}
 	}
 
 	@Override
 	public void clearSelection() {
-		for (Object element : new HashSet<Object>(selection)) {
+		for (Object element : new HashSet<>(selection))
 			removeSelection(element);
-		}
 	}
 
 	@Override
 	public Set<Object> getSelection() {
-		return new HashSet<Object>(selection);
+		return new HashSet<>(selection);
 	}
 
 	@Override
 	public void removeSelection(Object element) {
-		if (element != null && selection.remove(element)) {
-			multiCaster
-					.notify(new DataflowSelectionMessage(Type.REMOVED, element));
-		}
+		if (element != null && selection.remove(element))
+			multiCaster.notify(new DataflowSelectionMessage(REMOVED, element));
 	}
 
 	@Override
 	public void setSelection(Set<Object> elements) {
 		if (elements == null) {
 			clearSelection();
-		} else {
-			Set<Object> newSelection = new HashSet<Object>(elements);
-			for (Object element : new HashSet<Object>(selection)) {
-				if (!newSelection.remove(element)) {
-					removeSelection(element);
-				}
-			}
-			for (Object element : newSelection) {
-				addSelection(element);
-			}
+			return;
 		}
+		Set<Object> newSelection = new HashSet<>(elements);
+		for (Object element : new HashSet<>(selection))
+			if (!newSelection.remove(element))
+				removeSelection(element);
+		for (Object element : newSelection)
+			addSelection(element);
 	}
 
 	@Override
@@ -122,5 +113,4 @@
 	public void removeObserver(Observer<DataflowSelectionMessage> observer) {
 		multiCaster.removeObserver(observer);
 	}
-
 }
diff --git a/selection-impl/src/main/java/net/sf/taverna/t2/workbench/selection/impl/SelectionManagerImpl.java b/selection-impl/src/main/java/net/sf/taverna/t2/workbench/selection/impl/SelectionManagerImpl.java
index 67bcf71..2e86f1a 100644
--- a/selection-impl/src/main/java/net/sf/taverna/t2/workbench/selection/impl/SelectionManagerImpl.java
+++ b/selection-impl/src/main/java/net/sf/taverna/t2/workbench/selection/impl/SelectionManagerImpl.java
@@ -25,6 +25,7 @@
 import java.util.IdentityHashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import net.sf.taverna.t2.lang.observer.MultiCaster;
 import net.sf.taverna.t2.lang.observer.Observable;
@@ -66,6 +67,9 @@
  * @author David Withers
  */
 public class SelectionManagerImpl implements SelectionManager {
+	private static final String RESULTS_PERSPECTIVE_ID = "net.sf.taverna.t2.ui.perspectives.results.ResultsPerspective";
+
+	private static final String DESIGN_PERSPECTIVE_ID = "net.sf.taverna.t2.ui.perspectives.design.DesignPerspective";
 
 	private static final Logger logger = Logger.getLogger(SelectionManagerImpl.class);
 
@@ -73,14 +77,10 @@
 	private Map<WorkflowBundle, DataflowSelectionModel> workflowSelectionModels = new IdentityHashMap<>();
 	private Map<WorkflowBundle, Workflow> selectedWorkflows = new IdentityHashMap<>();
 	private Map<WorkflowBundle, Profile> selectedProfiles = new IdentityHashMap<>();
-
 	private String selectedWorkflowRun;
 	private Map<String, DataflowSelectionModel> workflowRunSelectionModels = new HashMap<>();
-
 	private PerspectiveSPI selectedPerspective;
-
-	private MultiCaster<SelectionManagerEvent> observers = new MultiCaster<SelectionManagerEvent>(this);
-
+	private MultiCaster<SelectionManagerEvent> observers = new MultiCaster<>(this);
 	private FileManager fileManager;
 	private List<PerspectiveSPI> perspectives;
 
@@ -108,32 +108,31 @@
 	}
 
 	private void setSelectedWorkflowBundle(WorkflowBundle workflowBundle, boolean notifyFileManager) {
-		if (workflowBundle != null && workflowBundle != selectedWorkflowBundle) {
-			if (notifyFileManager) {
-				fileManager.setCurrentDataflow(workflowBundle);
-			} else {
-				if (selectedWorkflows.get(workflowBundle) == null) {
-					selectedWorkflows.put(workflowBundle, workflowBundle.getMainWorkflow());
-				}
-				if (selectedProfiles.get(workflowBundle) == null) {
-					selectedProfiles.put(workflowBundle, workflowBundle.getMainProfile());
-				}
-				SelectionManagerEvent selectionManagerEvent = new WorkflowBundleSelectionEvent(selectedWorkflowBundle, workflowBundle);
-				selectedWorkflowBundle = workflowBundle;
-				notify(selectionManagerEvent);
-				selectDesignPerspective();
-			}
+		if (workflowBundle == null || workflowBundle == selectedWorkflowBundle)
+			return;
+		if (notifyFileManager) {
+			fileManager.setCurrentDataflow(workflowBundle);
+			return;
 		}
+		if (selectedWorkflows.get(workflowBundle) == null)
+			selectedWorkflows.put(workflowBundle,
+					workflowBundle.getMainWorkflow());
+		if (selectedProfiles.get(workflowBundle) == null)
+			selectedProfiles.put(workflowBundle,
+					workflowBundle.getMainProfile());
+		SelectionManagerEvent selectionManagerEvent = new WorkflowBundleSelectionEvent(
+				selectedWorkflowBundle, workflowBundle);
+		selectedWorkflowBundle = workflowBundle;
+		notify(selectionManagerEvent);
+		selectDesignPerspective();
 	}
 
 	private void removeWorkflowBundle(WorkflowBundle dataflow) {
 		synchronized (workflowSelectionModels) {
 			DataflowSelectionModel selectionModel = workflowSelectionModels.remove(dataflow);
-			if (selectionModel != null) {
-				for (Observer<DataflowSelectionMessage> observer : selectionModel.getObservers()) {
+			if (selectionModel != null)
+				for (Observer<DataflowSelectionMessage> observer : selectionModel.getObservers())
 					selectionModel.removeObserver(observer);
-				}
-			}
 		}
 		synchronized (selectedWorkflows) {
 			selectedWorkflows.remove(dataflow);
@@ -151,9 +150,11 @@
 	@Override
 	public void setSelectedWorkflow(Workflow workflow) {
 		if (workflow != null) {
-			Workflow selectedWorkflow = selectedWorkflows.get(workflow.getParent());
+			Workflow selectedWorkflow = selectedWorkflows.get(workflow
+					.getParent());
 			if (selectedWorkflow != workflow) {
-				SelectionManagerEvent selectionManagerEvent = new WorkflowSelectionEvent(selectedWorkflow, workflow);
+				SelectionManagerEvent selectionManagerEvent = new WorkflowSelectionEvent(
+						selectedWorkflow, workflow);
 				selectedWorkflows.put(workflow.getParent(), workflow);
 				notify(selectionManagerEvent);
 			}
@@ -170,7 +171,8 @@
 		if (profile != null) {
 			Profile selectedProfile = selectedProfiles.get(profile.getParent());
 			if (selectedProfile != profile) {
-				SelectionManagerEvent selectionManagerEvent = new ProfileSelectionEvent(selectedProfile, profile);
+				SelectionManagerEvent selectionManagerEvent = new ProfileSelectionEvent(
+						selectedProfile, profile);
 				selectedProfiles.put(profile.getParent(), profile);
 				notify(selectionManagerEvent);
 			}
@@ -184,8 +186,10 @@
 
 	@Override
 	public void setSelectedWorkflowRun(String workflowRun) {
-		if ((selectedWorkflowRun == null && workflowRun != null) || !selectedWorkflowRun.equals(workflowRun)) {
-			SelectionManagerEvent selectionManagerEvent = new WorkflowRunSelectionEvent(selectedWorkflowRun, workflowRun);
+		if ((selectedWorkflowRun == null && workflowRun != null)
+				|| !selectedWorkflowRun.equals(workflowRun)) {
+			SelectionManagerEvent selectionManagerEvent = new WorkflowRunSelectionEvent(
+					selectedWorkflowRun, workflowRun);
 			selectedWorkflowRun = workflowRun;
 			notify(selectionManagerEvent);
 			selectResultsPerspective();
@@ -205,14 +209,15 @@
 		return selectionModel;
 	}
 
+	@SuppressWarnings("unused")
 	private void removeWorkflowRun(String workflowRun) {
 		synchronized (workflowRunSelectionModels) {
-			DataflowSelectionModel selectionModel = workflowRunSelectionModels.remove(workflowRun);
-			if (selectionModel != null) {
-				for (Observer<DataflowSelectionMessage> observer : selectionModel.getObservers()) {
+			DataflowSelectionModel selectionModel = workflowRunSelectionModels
+					.remove(workflowRun);
+			if (selectionModel != null)
+				for (Observer<DataflowSelectionMessage> observer : selectionModel
+						.getObservers())
 					selectionModel.removeObserver(observer);
-				}
-			}
 		}
 	}
 
@@ -224,28 +229,27 @@
 	@Override
 	public void setSelectedPerspective(PerspectiveSPI perspective) {
 		if (selectedPerspective != perspective) {
-			SelectionManagerEvent selectionManagerEvent = new PerspectiveSelectionEvent(selectedPerspective, perspective);
+			SelectionManagerEvent selectionManagerEvent = new PerspectiveSelectionEvent(
+					selectedPerspective, perspective);
 			selectedPerspective = perspective;
 			notify(selectionManagerEvent);
 		}
 	}
 
 	private void selectDesignPerspective() {
-		for (PerspectiveSPI perspective : perspectives) {
-			if ("net.sf.taverna.t2.ui.perspectives.design.DesignPerspective".equals(perspective.getID())) {
+		for (PerspectiveSPI perspective : perspectives)
+			if (DESIGN_PERSPECTIVE_ID.equals(perspective.getID())) {
 				setSelectedPerspective(perspective);
 				break;
 			}
-		}
 	}
 
 	private void selectResultsPerspective() {
-		for (PerspectiveSPI perspective : perspectives) {
-			if ("net.sf.taverna.t2.ui.perspectives.results.ResultsPerspective".equals(perspective.getID())) {
+		for (PerspectiveSPI perspective : perspectives)
+			if (RESULTS_PERSPECTIVE_ID.equals(perspective.getID())) {
 				setSelectedPerspective(perspective);
 				break;
 			}
-		}
 	}
 
 	@Override
@@ -257,21 +261,21 @@
 			String selectedWorkflowRun = getSelectedWorkflowRun();
 			PerspectiveSPI selectedPerspective = getSelectedPerspective();
 			try {
-				if (selectedWorkflowBundle != null) {
-					observer.notify(this, new WorkflowBundleSelectionEvent(null, selectedWorkflowBundle));
-				}
-				if (selectedWorkflow != null) {
-					observer.notify(this, new WorkflowSelectionEvent(null, selectedWorkflow));
-				}
-				if (selectedProfile != null) {
-					observer.notify(this, new ProfileSelectionEvent(null, selectedProfile));
-				}
-				if (selectedWorkflowRun != null) {
-					observer.notify(this, new WorkflowRunSelectionEvent(null, selectedWorkflowRun));
-				}
-				if (selectedPerspective != null) {
-					observer.notify(this, new PerspectiveSelectionEvent(null, selectedPerspective));
-				}
+				if (selectedWorkflowBundle != null)
+					observer.notify(this, new WorkflowBundleSelectionEvent(
+							null, selectedWorkflowBundle));
+				if (selectedWorkflow != null)
+					observer.notify(this, new WorkflowSelectionEvent(null,
+							selectedWorkflow));
+				if (selectedProfile != null)
+					observer.notify(this, new ProfileSelectionEvent(null,
+							selectedProfile));
+				if (selectedWorkflowRun != null)
+					observer.notify(this, new WorkflowRunSelectionEvent(null,
+							selectedWorkflowRun));
+				if (selectedPerspective != null)
+					observer.notify(this, new PerspectiveSelectionEvent(null,
+							selectedPerspective));
 			} catch (Exception e) {
 				logger.warn("Could not notify " + observer, e);
 			}
@@ -304,6 +308,7 @@
 	}
 
 	public class FileManagerObserver implements Observer<FileManagerEvent> {
+		@Override
 		public void notify(Observable<FileManagerEvent> sender,
 				FileManagerEvent message) throws Exception {
 			if (message instanceof ClosedDataflowEvent) {
@@ -320,7 +325,7 @@
 	}
 
 	private class EditManagerObserver implements Observer<EditManagerEvent> {
-
+		@Override
 		public void notify(Observable<EditManagerEvent> sender, EditManagerEvent message)
 				throws Exception {
 			Edit<?> edit = message.getEdit();
@@ -330,29 +335,28 @@
 		private void considerEdit(Edit<?> edit, boolean undoing) {
 			if (edit instanceof CompoundEdit) {
 				CompoundEdit compound = (CompoundEdit) edit;
-				for (Edit<?> e : compound.getChildEdits()) {
+				for (Edit<?> e : compound.getChildEdits())
 					considerEdit(e, undoing);
-				}
-			} else {
-				Object subject = edit.getSubject();
-				if (subject instanceof Workflow) {
-					DataflowSelectionModel selectionModel = getDataflowSelectionModel(((Workflow) edit.getSubject()).getParent());
-					if (edit instanceof AddChildEdit) {
-						Object child = ((AddChildEdit<?>) edit).getChild();
-						if (child instanceof Processor || child instanceof InputWorkflowPort || child instanceof OutputWorkflowPort) {
-							if (undoing && selectionModel.getSelection().contains(child)) {
-								selectionModel.clearSelection();
-							} else {
-								HashSet<Object> selection = new HashSet<Object>();
-								selection.add(child);
-								selectionModel.setSelection(selection);
-							}
-						}
+			} else if (edit instanceof AddChildEdit
+					&& edit.getSubject() instanceof Workflow) {
+				Workflow subject = (Workflow) edit.getSubject();
+				DataflowSelectionModel selectionModel = getDataflowSelectionModel(subject
+						.getParent());
+				Object child = ((AddChildEdit<?>) edit).getChild();
+				if (child instanceof Processor
+						|| child instanceof InputWorkflowPort
+						|| child instanceof OutputWorkflowPort) {
+					if (undoing
+							&& selectionModel.getSelection().contains(child))
+						selectionModel.clearSelection();
+					else {
+						Set<Object> selection = new HashSet<>();
+						selection.add(child);
+						selectionModel.setSelection(selection);
 					}
 				}
 			}
 		}
-
 	}
 
 	private void notify(SelectionManagerEvent event) {
@@ -360,5 +364,4 @@
 			observers.notify(event);
 		}
 	}
-
 }
diff --git a/update-manager/pom.xml b/update-manager/pom.xml
index 622d804..c2f2003 100644
--- a/update-manager/pom.xml
+++ b/update-manager/pom.xml
@@ -20,12 +20,7 @@
 		<dependency>
 			<groupId>uk.org.taverna.commons</groupId>
 			<artifactId>taverna-update-api</artifactId>
-			<version>0.1.0-SNAPSHOT</version>
+			<version>${taverna.commons.version}</version>
 		</dependency>
-		<!-- <dependency>
-			<groupId>net.sf.taverna.t2.ui-impl</groupId>
-			<artifactId>plugins-gui</artifactId>
-			<version>${project.version}</version>
-		</dependency> -->
 	</dependencies>
 </project>
diff --git a/update-manager/src/main/java/net/sf/taverna/t2/workbench/update/impl/UpdateManagerView.java b/update-manager/src/main/java/net/sf/taverna/t2/workbench/update/impl/UpdateManagerView.java
index bced53d..6b70101 100644
--- a/update-manager/src/main/java/net/sf/taverna/t2/workbench/update/impl/UpdateManagerView.java
+++ b/update-manager/src/main/java/net/sf/taverna/t2/workbench/update/impl/UpdateManagerView.java
@@ -27,10 +27,9 @@
 import uk.org.taverna.commons.update.UpdateManager;
 
 /**
- *
- *
  * @author David Withers
  */
+@SuppressWarnings({ "serial", "unused" })
 public class UpdateManagerView extends JPanel {
 
 	private UpdateManager updateManager;
@@ -43,5 +42,4 @@
 	private void initialize() {
 		setLayout(new GridBagLayout());
 	}
-
 }
diff --git a/update-manager/src/main/java/net/sf/taverna/t2/workbench/update/impl/menu/UpdateMenuAction.java b/update-manager/src/main/java/net/sf/taverna/t2/workbench/update/impl/menu/UpdateMenuAction.java
index f0d709f..2c1459b 100644
--- a/update-manager/src/main/java/net/sf/taverna/t2/workbench/update/impl/menu/UpdateMenuAction.java
+++ b/update-manager/src/main/java/net/sf/taverna/t2/workbench/update/impl/menu/UpdateMenuAction.java
@@ -20,12 +20,16 @@
  ******************************************************************************/
 package net.sf.taverna.t2.workbench.update.impl.menu;
 
+import static javax.swing.JOptionPane.YES_OPTION;
+import static javax.swing.JOptionPane.showConfirmDialog;
+import static javax.swing.JOptionPane.showMessageDialog;
+
+import java.awt.Component;
 import java.awt.event.ActionEvent;
 import java.net.URI;
 
 import javax.swing.AbstractAction;
 import javax.swing.Action;
-import javax.swing.JOptionPane;
 
 import net.sf.taverna.t2.ui.menu.AbstractMenuAction;
 
@@ -35,9 +39,7 @@
 import uk.org.taverna.commons.update.UpdateManager;
 
 public class UpdateMenuAction extends AbstractMenuAction {
-
 	private static final Logger logger = Logger.getLogger(UpdateMenuAction.class);
-
 	private static final URI ADVANCED_MENU_URI = URI
 			.create("http://taverna.sf.net/2008/t2workbench/menu#advanced");
 
@@ -47,28 +49,13 @@
 		super(ADVANCED_MENU_URI, 1000);
 	}
 
+	@SuppressWarnings("serial")
 	@Override
 	protected Action createAction() {
 		return new AbstractAction("Check for updates") {
-
 			@Override
 			public void actionPerformed(ActionEvent e) {
-				try {
-					boolean updateAvailable = updateManager.checkForUpdates();
-					if (updateAvailable) {
-						int option = JOptionPane.showConfirmDialog(null, "Update available. Update Now?");
-						if (option == JOptionPane.YES_OPTION) {
-							updateManager.update();
-							JOptionPane.showMessageDialog(null, "Update complete. Restart Taverna to apply update.");
-						}
-					} else {
-						JOptionPane.showMessageDialog(null, "No update available");
-					}
-				} catch (UpdateException ex) {
-					JOptionPane.showMessageDialog(null, "Update failed: "  + ex.getMessage());
-					logger.warn("Update failed", ex);
-				}
-
+				findUpdates();
 			}
 		};
 	}
@@ -77,4 +64,29 @@
 		this.updateManager = updateManager;
 	}
 
+	private void findUpdates() {
+		Component parent = null;
+		try {
+			if (!areUpdatesAvailable()) {
+				showMessageDialog(null, "No update available");
+				return;
+			}
+			if (showConfirmDialog(parent, "Update available. Update Now?") != YES_OPTION)
+				return;
+			applyUpdates();
+			showMessageDialog(parent,
+					"Update complete. Restart Taverna to apply update.");
+		} catch (UpdateException ex) {
+			showMessageDialog(parent, "Update failed: " + ex.getMessage());
+			logger.warn("Update failed", ex);
+		}
+	}
+
+	protected boolean areUpdatesAvailable() throws UpdateException {
+		return updateManager.checkForUpdates();
+	}
+
+	protected void applyUpdates() throws UpdateException {
+		updateManager.update();
+	}
 }
diff --git a/update-manager/src/main/java/net/sf/taverna/t2/workbench/updatemanager/PluginMenuAction.java b/update-manager/src/main/java/net/sf/taverna/t2/workbench/updatemanager/PluginMenuAction.java
index 36fa72c..e6b4695 100644
--- a/update-manager/src/main/java/net/sf/taverna/t2/workbench/updatemanager/PluginMenuAction.java
+++ b/update-manager/src/main/java/net/sf/taverna/t2/workbench/updatemanager/PluginMenuAction.java
@@ -1,37 +1,43 @@
 package net.sf.taverna.t2.workbench.updatemanager;
 
+import static java.awt.event.KeyEvent.VK_F12;
+import static javax.swing.KeyStroke.getKeyStroke;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
 import java.net.URI;
 
+import javax.swing.AbstractAction;
 import javax.swing.Action;
 
 import net.sf.taverna.t2.ui.menu.AbstractMenuAction;
 
 public class PluginMenuAction extends AbstractMenuAction {
-
 	private static final String UPDATES_AND_PLUGINS = "Updates and plugins";
 
 	@SuppressWarnings("serial")
-//	protected class SoftwareUpdates extends AbstractAction {
-//
-//		public SoftwareUpdates() {
-//			super(UPDATES_AND_PLUGINS, UpdatesAvailableIcon.updateRecommendedIcon);
-//			putValue(Action.ACCELERATOR_KEY,
-//					KeyStroke.getKeyStroke(KeyEvent.VK_F12, 0));
-//		}
-//
-//		public void actionPerformed(ActionEvent e) {
-//			Component parent = null;
-//			if (e.getSource() instanceof Component) {
-//				parent = (Component) e.getSource();
-//			}
-//			final PluginManagerFrame pluginManagerUI = new PluginManagerFrame(
-//					PluginManager.getInstance());
-//			if (parent != null) {
-//				pluginManagerUI.setLocationRelativeTo(parent);
-//			}
-//			pluginManagerUI.setVisible(true);
-//		}
-//	}
+	protected class SoftwareUpdates extends AbstractAction {
+		public SoftwareUpdates() {
+			super(UPDATES_AND_PLUGINS, null/*UpdatesAvailableIcon.updateRecommendedIcon*/);
+			putValue(ACCELERATOR_KEY, getKeyStroke(VK_F12, 0));
+		}
+
+		@Override
+		public void actionPerformed(ActionEvent e) {
+			@SuppressWarnings("unused")
+			Component parent = null;
+			if (e.getSource() instanceof Component) {
+				parent = (Component) e.getSource();
+			}
+			//FIXME this does nothing!
+			//final PluginManagerFrame pluginManagerUI = new PluginManagerFrame(
+			//		PluginManager.getInstance());
+			//if (parent != null) {
+			//	pluginManagerUI.setLocationRelativeTo(parent);
+			//}
+			//pluginManagerUI.setVisible(true);
+		}
+	}
 
 	public PluginMenuAction() {
 		super(URI.create("http://taverna.sf.net/2008/t2workbench/menu#advanced"),
@@ -40,8 +46,7 @@
 
 	@Override
 	protected Action createAction() {
-//		return new SoftwareUpdates();
+		//return new SoftwareUpdates();
 		return null;
 	}
-
 }
diff --git a/update-manager/src/main/java/net/sf/taverna/t2/workbench/updatemanager/UpdatesAvailableMenuAction.java b/update-manager/src/main/java/net/sf/taverna/t2/workbench/updatemanager/UpdatesAvailableMenuAction.java
index 34af475..e2611be 100644
--- a/update-manager/src/main/java/net/sf/taverna/t2/workbench/updatemanager/UpdatesAvailableMenuAction.java
+++ b/update-manager/src/main/java/net/sf/taverna/t2/workbench/updatemanager/UpdatesAvailableMenuAction.java
@@ -1,19 +1,19 @@
 package net.sf.taverna.t2.workbench.updatemanager;
 
+import static net.sf.taverna.t2.workbench.updatemanager.UpdatesToolbarSection.UPDATES_SECTION;
+
 import java.awt.Component;
 
 import net.sf.taverna.t2.ui.menu.AbstractMenuCustom;
 
 public class UpdatesAvailableMenuAction extends AbstractMenuCustom {
-
 	public UpdatesAvailableMenuAction() {
-		super(UpdatesToolbarSection.UPDATES_SECTION, 10);
+		super(UPDATES_SECTION, 10);
 	}
 
 	@Override
 	protected Component createCustomComponent() {
-//		return new UpdatesAvailableIcon();
+		//return new UpdatesAvailableIcon();
 		return null;
 	}
-
 }
diff --git a/update-manager/src/main/java/net/sf/taverna/t2/workbench/updatemanager/UpdatesToolbarSection.java b/update-manager/src/main/java/net/sf/taverna/t2/workbench/updatemanager/UpdatesToolbarSection.java
index a8e7c9b..b16d614 100644
--- a/update-manager/src/main/java/net/sf/taverna/t2/workbench/updatemanager/UpdatesToolbarSection.java
+++ b/update-manager/src/main/java/net/sf/taverna/t2/workbench/updatemanager/UpdatesToolbarSection.java
@@ -1,17 +1,16 @@
 package net.sf.taverna.t2.workbench.updatemanager;
 
+import static net.sf.taverna.t2.ui.menu.DefaultToolBar.DEFAULT_TOOL_BAR;
+
 import java.net.URI;
 
 import net.sf.taverna.t2.ui.menu.AbstractMenuSection;
-import net.sf.taverna.t2.ui.menu.DefaultToolBar;
 
 public class UpdatesToolbarSection extends AbstractMenuSection {
-
 	public static final URI UPDATES_SECTION = URI
 			.create("http://taverna.sf.net/2008/t2workbench/toolbar#updatesSection");
 
 	public UpdatesToolbarSection() {
-		super(DefaultToolBar.DEFAULT_TOOL_BAR, 10000, UPDATES_SECTION);
+		super(DEFAULT_TOOL_BAR, 10000, UPDATES_SECTION);
 	}
-
 }
diff --git a/workbench-impl/pom.xml b/workbench-impl/pom.xml
index ca4a1de..5b52d3a 100644
--- a/workbench-impl/pom.xml
+++ b/workbench-impl/pom.xml
@@ -96,13 +96,10 @@
 		<dependency>
 			<groupId>commons-io</groupId>
 			<artifactId>commons-io</artifactId>
-			<version>${commons.io.version}</version>
 		</dependency>
-
 		<dependency>
-			<groupId>org.apache.log4j</groupId>
-			<artifactId>com.springsource.org.apache.log4j</artifactId>
-			<version>${log4j.version}</version>
+			<groupId>log4j</groupId>
+			<artifactId>log4j</artifactId>
 		</dependency>
 
 		<dependency>
diff --git a/workbench-impl/src/main/java/net/sf/taverna/t2/workbench/ui/impl/UserRegistrationForm.java b/workbench-impl/src/main/java/net/sf/taverna/t2/workbench/ui/impl/UserRegistrationForm.java
index 1226c5e..97f831f 100644
--- a/workbench-impl/src/main/java/net/sf/taverna/t2/workbench/ui/impl/UserRegistrationForm.java
+++ b/workbench-impl/src/main/java/net/sf/taverna/t2/workbench/ui/impl/UserRegistrationForm.java
@@ -389,7 +389,7 @@
 		if (previousRegistrationData != null)
 			keepMeInformedCheckBox.setSelected(previousRegistrationData
 					.getKeepMeInformed());
-		keepMeInformedCheckBox.addKeyListener(new java.awt.event.KeyAdapter() {
+		keepMeInformedCheckBox.addKeyListener(new KeyAdapter() {
 			@Override
 			public void keyPressed(KeyEvent evt) {
 				if (evt.getKeyCode() == VK_ENTER) {
@@ -570,7 +570,7 @@
 		// Terms and conditions link
 		JEditorPane termsAndConditionsURL = new JEditorPane();
 		termsAndConditionsURL.setEditable(false);
-		termsAndConditionsURL.setBackground(this.getBackground());
+		termsAndConditionsURL.setBackground(getBackground());
 		termsAndConditionsURL.setFocusable(false);
 		HTMLEditorKit kit = new HTMLEditorKit();
 		termsAndConditionsURL.setEditorKit(kit);
@@ -599,8 +599,7 @@
 		gbc.anchor = WEST;
 		gbc.gridwidth = 2;
 		gbc.insets = new Insets(5, 10, 0, 10);
-		JPanel termsAndConditionsPanel = new JPanel(new FlowLayout(
-				FlowLayout.LEFT));
+		JPanel termsAndConditionsPanel = new JPanel(new FlowLayout(LEFT));
 		termsAndConditionsPanel.add(termsAndConditionsCheckBox);
 		termsAndConditionsPanel.add(termsAndConditionsURL);
 		mainPanel.add(termsAndConditionsPanel, gbc);
@@ -697,9 +696,8 @@
 	protected void doNotRegister() {
 		try {
 			FileUtils.touch(doNotRegisterMeFile);
-			if (remindMeLaterFile.exists()) {
+			if (remindMeLaterFile.exists())
 				remindMeLaterFile.delete();
-			}
 		} catch (IOException ioex) {
 			logger.error(
 					"Failed to touch the 'Do not register me' file at user registration.",
@@ -709,26 +707,25 @@
 	}
 
 	private void register() {
-		if (validateForm()) {
-			UserRegistrationData regData = new UserRegistrationData();
-			regData.setTavernaVersion(appName);
-			regData.setFirstName(firstNameTextField.getText());
-			regData.setLastName(lastNameTextField.getText());
-			regData.setEmailAddress(emailTextField.getText());
-			regData.setKeepMeInformed(keepMeInformedCheckBox.isSelected());
-			regData.setInstitutionOrCompanyName(institutionOrCompanyTextField
-					.getText());
-			regData.setIndustry(industryTypeTextField.getSelectedItem()
-					.toString());
-			regData.setField(fieldTextField.getText());
-			regData.setPurposeOfUsingTaverna(purposeTextArea.getText());
+		if (!validateForm())
+			return;
+		UserRegistrationData regData = new UserRegistrationData();
+		regData.setTavernaVersion(appName);
+		regData.setFirstName(firstNameTextField.getText());
+		regData.setLastName(lastNameTextField.getText());
+		regData.setEmailAddress(emailTextField.getText());
+		regData.setKeepMeInformed(keepMeInformedCheckBox.isSelected());
+		regData.setInstitutionOrCompanyName(institutionOrCompanyTextField
+				.getText());
+		regData.setIndustry(industryTypeTextField.getSelectedItem().toString());
+		regData.setField(fieldTextField.getText());
+		regData.setPurposeOfUsingTaverna(purposeTextArea.getText());
 
-			if (postUserRegistrationDataToServer(regData)) {
-				saveUserRegistrationData(regData, registrationDataFile);
-				if (remindMeLaterFile.exists())
-					remindMeLaterFile.delete();
-				closeDialog();
-			}
+		if (postUserRegistrationDataToServer(regData)) {
+			saveUserRegistrationData(regData, registrationDataFile);
+			if (remindMeLaterFile.exists())
+				remindMeLaterFile.delete();
+			closeDialog();
 		}
 	}
 
@@ -764,25 +761,24 @@
 		// Try to retrieve data from file
 		try {
 			props.load(new FileInputStream(propertiesFile));
-			regData.setTavernaVersion(props
-					.getProperty(TAVERNA_VERSION_PROPERTY_NAME));
-			regData.setFirstName(props.getProperty(FIRST_NAME_PROPERTY_NAME));
-			regData.setLastName(props.getProperty(LAST_NAME_PROPERTY_NAME));
-			regData.setEmailAddress(props
-					.getProperty(EMAIL_ADDRESS_PROPERTY_NAME));
-			regData.setKeepMeInformed((props.getProperty(
-					KEEP_ME_INFORMED_PROPERTY_NAME).equals(TRUE) ? true : false));
-			regData.setInstitutionOrCompanyName(props
-					.getProperty(INSTITUTION_OR_COMPANY_PROPERTY_NAME));
-			regData.setIndustry(props.getProperty(INDUSTRY_PROPERTY_NAME));
-			regData.setField(props.getProperty(FIELD_PROPERTY_NAME));
-			regData.setPurposeOfUsingTaverna(props
-					.getProperty(PURPOSE_PROPERTY_NAME));
 		} catch (IOException e) {
 			logger.error("Failed to load old user registration data from "
 					+ propertiesFile.getAbsolutePath(), e);
 			return null;
 		}
+		regData.setTavernaVersion(props
+				.getProperty(TAVERNA_VERSION_PROPERTY_NAME));
+		regData.setFirstName(props.getProperty(FIRST_NAME_PROPERTY_NAME));
+		regData.setLastName(props.getProperty(LAST_NAME_PROPERTY_NAME));
+		regData.setEmailAddress(props.getProperty(EMAIL_ADDRESS_PROPERTY_NAME));
+		regData.setKeepMeInformed(props.getProperty(
+				KEEP_ME_INFORMED_PROPERTY_NAME).equals(TRUE));
+		regData.setInstitutionOrCompanyName(props
+				.getProperty(INSTITUTION_OR_COMPANY_PROPERTY_NAME));
+		regData.setIndustry(props.getProperty(INDUSTRY_PROPERTY_NAME));
+		regData.setField(props.getProperty(FIELD_PROPERTY_NAME));
+		regData.setPurposeOfUsingTaverna(props
+				.getProperty(PURPOSE_PROPERTY_NAME));
 		return regData;
 	}
 
@@ -948,11 +944,10 @@
 
 			@Override
 			public Insets getBorderInsets(Component c) {
-				if (position == TOP) {
+				if (position == TOP)
 					return new Insets(5, 0, 0, 0);
-				} else {
+				else
 					return new Insets(0, 0, 5, 0);
-				}
 			}
 
 			@Override
diff --git a/workbench-impl/src/main/java/net/sf/taverna/t2/workbench/ui/impl/UserRegistrationHook.java b/workbench-impl/src/main/java/net/sf/taverna/t2/workbench/ui/impl/UserRegistrationHook.java
index c78fd01..257c3f3 100644
--- a/workbench-impl/src/main/java/net/sf/taverna/t2/workbench/ui/impl/UserRegistrationHook.java
+++ b/workbench-impl/src/main/java/net/sf/taverna/t2/workbench/ui/impl/UserRegistrationHook.java
@@ -30,6 +30,8 @@
 import uk.org.taverna.configuration.app.ApplicationConfiguration;
 
 public class UserRegistrationHook implements StartupSPI {
+	/** Delay between when we ask the user about registration, in milliseconds */
+	private static final int TWO_WEEKS = 14 * 24 * 3600 * 1000;
 	public static final String REGISTRATION_DIRECTORY_NAME = "registration";
 	public static final String REGISTRATION_DATA_FILE_NAME = "registration_data.properties";
 	public static final String REMIND_ME_LATER_FILE_NAME = "remind_me_later";
@@ -74,7 +76,7 @@
 		if (remindMeLaterFile.exists()) {
 			long lastModified = remindMeLaterFile.lastModified();
 			long now = new Date().getTime();
-			if (now - lastModified < 14 * 24 * 3600 * 1000)
+			if (now - lastModified < TWO_WEEKS)
 				// 2 weeks have not passed since we last asked
 				return true;
 
@@ -123,22 +125,22 @@
 				previousRegistrationDataFile = regFile;
 		}
 
-		if (previousRegistrationDataFile == null) {
+		UserRegistrationForm form;
+		if (previousRegistrationDataFile == null)
 			// No previous registration file - ask user to register
-			UserRegistrationForm form = new UserRegistrationForm(
-					applicationConfiguration.getName(), registrationDataFile,
-					doNotRegisterMeFile, remindMeLaterFile);
-			form.setVisible(true);
-			return true;
-		} else {
-			// Fill in user's old registration data in the form and ask them to register
-			UserRegistrationForm form = new UserRegistrationForm(
-					applicationConfiguration.getName(),
+			form = new UserRegistrationForm(applicationConfiguration.getName(),
+					registrationDataFile, doNotRegisterMeFile,
+					remindMeLaterFile);
+		else
+			/*
+			 * Fill in user's old registration data in the form and ask them to
+			 * register
+			 */
+			form = new UserRegistrationForm(applicationConfiguration.getName(),
 					previousRegistrationDataFile, registrationDataFile,
 					doNotRegisterMeFile, remindMeLaterFile);
-			form.setVisible(true);
-			return true;
-		}
+		form.setVisible(true);
+		return true;
 	}
 
 	/**
diff --git a/workbench-impl/src/main/java/net/sf/taverna/t2/workbench/ui/impl/menu/ExitAction.java b/workbench-impl/src/main/java/net/sf/taverna/t2/workbench/ui/impl/menu/ExitAction.java
index 9a10f21..d5573be 100644
--- a/workbench-impl/src/main/java/net/sf/taverna/t2/workbench/ui/impl/menu/ExitAction.java
+++ b/workbench-impl/src/main/java/net/sf/taverna/t2/workbench/ui/impl/menu/ExitAction.java
@@ -35,6 +35,7 @@
  * @author Stian Soiland-Reyes
  */
 public class ExitAction extends AbstractMenuAction {
+	private static final String EXIT_LABEL = "Exit";
 	private static final String MAC_OS_X = "Mac OS X";
 	private Workbench workbench;
 
@@ -46,7 +47,7 @@
 	@SuppressWarnings("serial")
 	@Override
 	protected Action createAction() {
-		return new AbstractAction("Exit") {
+		return new AbstractAction(EXIT_LABEL) {
 			@Override
 			public void actionPerformed(ActionEvent e) {
 				workbench.exit();
diff --git a/workbench-impl/src/main/resources/META-INF/spring/workbench-impl-context-osgi.xml b/workbench-impl/src/main/resources/META-INF/spring/workbench-impl-context-osgi.xml
index 71932d6..0dc7efc 100644
--- a/workbench-impl/src/main/resources/META-INF/spring/workbench-impl-context-osgi.xml
+++ b/workbench-impl/src/main/resources/META-INF/spring/workbench-impl-context-osgi.xml
@@ -11,7 +11,11 @@
 
 	<service ref="StoreWindowStateOnShutdown" interface="net.sf.taverna.t2.workbench.ShutdownSPI" />
 
-	<service ref="ExitAction" auto-export="interfaces" />
+	<service ref="ExitAction" auto-export="interfaces">
+		<service-properties>
+			<beans:entry key="menu.action" value="file.exit" />
+		</service-properties>
+	</service>
 
 	<service ref="Workbench" interface="net.sf.taverna.t2.workbench.ui.Workbench" />