diff --git a/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/actions/ExternalToolActivityConfigureAction.java b/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/actions/ExternalToolActivityConfigureAction.java
index 52f9eed..5d57280 100644
--- a/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/actions/ExternalToolActivityConfigureAction.java
+++ b/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/actions/ExternalToolActivityConfigureAction.java
@@ -32,8 +32,8 @@
 
 /**
  * This class implements an ActivityConfigurationAction to configure the ExternalToolActivity
- * plugin. The configuration action is called "Configure UseCase invocation" and is implemented in
- * the KnowARCConfigurationDialog inside the knowarc-usecases maven artifact.
+ * plugin. The configuration action is called "Configure ToolDesc invocation" and is implemented in
+ * the KnowARCConfigurationDialog inside the knowarc-tooldescs maven artifact.
  *
  * @author Hajo Nils Krabbenhoeft
  */
diff --git a/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/servicedescriptions/ExternalToolServiceDescription.java b/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/servicedescriptions/ExternalToolServiceDescription.java
index 594ddd7..fb793f6 100644
--- a/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/servicedescriptions/ExternalToolServiceDescription.java
+++ b/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/servicedescriptions/ExternalToolServiceDescription.java
@@ -52,7 +52,7 @@
 
 	private String repositoryUrl;
 	private String externaltoolid;
-	private ToolDescription useCaseDescription;
+	private ToolDescription toolDescription;
 
 	public String getRepositoryUrl() {
 		return repositoryUrl;
@@ -71,8 +71,8 @@
 	}
 
 	public Icon getIcon() {
-		if (useCaseDescription != null) {
-			String icon_url = useCaseDescription.getIcon_url();
+		if (toolDescription != null) {
+			String icon_url = toolDescription.getIcon_url();
 			if ((icon_url != null) && !icon_url.isEmpty() && !icon_url.endsWith(".ico"))
 				try {
 					ImageIcon result = new ImageIcon(new URL(icon_url));
@@ -94,7 +94,7 @@
 		ExternalToolActivityConfigurationBean bean = new ExternalToolActivityConfigurationBean();
 		bean.setRepositoryUrl(repositoryUrl);
 		bean.setExternaltoolid(externaltoolid);
-		bean.setToolDescription(useCaseDescription);
+		bean.setToolDescription(toolDescription);
 		bean.setMechanism(manager.getDefaultMechanism());
 
 		return bean;
@@ -108,7 +108,7 @@
 	public List<? extends Comparable> getPath() {
 		List<String> result = new ArrayList<String>();
 		result.add("Tools decribed @ " + repositoryUrl);
-		String group = useCaseDescription.getGroup();
+		String group = toolDescription.getGroup();
 		if ((group != null) && !group.isEmpty()) {
 			String[] groups = group.split(":");
 			for (String g : groups) {
@@ -126,8 +126,8 @@
 	}
 	
 	public String getDescription() {
-		if (useCaseDescription != null) {
-			String description = useCaseDescription.getDescription();
+		if (toolDescription != null) {
+			String description = toolDescription.getDescription();
 			if (description == null) {
 				return "";
 			}
@@ -136,8 +136,8 @@
 		return "";
 	}
 
-	public void setToolDescription(UseCaseDescription usecase) {
-		this.useCaseDescription = usecase;
+	public void setToolDescription(ToolDescription tooldesc) {
+		this.toolDescription = tooldesc;
 	}
 
 }
diff --git a/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/servicedescriptions/ExternalToolServiceProvider.java b/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/servicedescriptions/ExternalToolServiceProvider.java
index b0990b2..479a30f 100644
--- a/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/servicedescriptions/ExternalToolServiceProvider.java
+++ b/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/servicedescriptions/ExternalToolServiceProvider.java
@@ -63,22 +63,22 @@
 		callBack.status("Parsing use case repository:" + repositoryUrl);
 			// prepare a list of all use case descriptions which are stored in
 			// the given repository URL
-			List<ToolDescription> usecases = new ArrayList<UseCaseDescription> ();
+			List<ToolDescription> tooldescs = new ArrayList<ToolDescription> ();
 			try {
-				usecases = ToolDescriptionParser.readDescriptionsFromUrl(
+				tooldescs = ToolDescriptionParser.readDescriptionsFromUrl(
 						repositoryUrl);
 			} catch (IOException e) {
 				callBack.fail("Unable to read tool descriptions", e);
 			}
-			callBack.status("Found " + usecases.size() + " use cases:" + repositoryUrl);
+			callBack.status("Found " + tooldescs.size() + " use cases:" + repositoryUrl);
 			// convert all the ToolDescriptions in the XML file into
 			// ExternalToolServiceDescription items
 			List<ExternalToolServiceDescription> items = new ArrayList<ExternalToolServiceDescription>();
-			for (ToolDescription usecase : usecases) {
+			for (ToolDescription tooldesc : tooldescs) {
 				ExternalToolServiceDescription item = new ExternalToolServiceDescription();
 				item.setRepositoryUrl(repositoryUrl);
-				item.setExternaltoolid(usecase.getUsecaseid());
-				item.setToolDescription(usecase);
+				item.setExternaltoolid(tooldesc.getTooldescid());
+				item.setToolDescription(tooldesc);
 				items.add(item);
 			}
 			// we dont have streaming data loading or partial results, so return
diff --git a/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/servicedescriptions/ExternalToolTemplateServiceDescription.java b/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/servicedescriptions/ExternalToolTemplateServiceDescription.java
index e112468..de3bcee 100644
--- a/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/servicedescriptions/ExternalToolTemplateServiceDescription.java
+++ b/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/servicedescriptions/ExternalToolTemplateServiceDescription.java
@@ -57,7 +57,7 @@
 	public ExternalToolActivityConfigurationBean getActivityConfiguration() {
 		ExternalToolActivityConfigurationBean result = new ExternalToolActivityConfigurationBean();
 		result.setExternaltoolid(UUID.randomUUID().toString());
-		result.setToolDescription(new UseCaseDescription(""));
+		result.setToolDescription(new ToolDescription(""));
 		result.setMechanism(manager.getDefaultMechanism());
 		return result;
 	}
diff --git a/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/EditablePanel.java b/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/EditablePanel.java
index 353f5c3..2a59950 100644
--- a/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/EditablePanel.java
+++ b/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/EditablePanel.java
@@ -51,16 +51,16 @@
 				ExternalToolActivityConfigurationBean bean = view.getConfiguration();
 				String repositoryUrl = bean.getRepositoryUrl();
 				String id = bean.getExternaltoolid();
-				ToolDescription usecase = null;
+				ToolDescription tooldesc = null;
 				try {
-					usecase = ToolDescriptionParser.readDescriptionFromUrl(
+					tooldesc = ToolDescriptionParser.readDescriptionFromUrl(
 						repositoryUrl, id);
 				}
 				catch (IOException ex) {
 					// Already logged
 				}
-				if (usecase != null) {
-					bean.setToolDescription(usecase);
+				if (tooldesc != null) {
+					bean.setToolDescription(tooldesc);
 					view.refreshConfiguration(bean);
 				} else {
 					JOptionPane.showMessageDialog(view, "Unable to find tool description " + id, "Missing tool description", JOptionPane.ERROR_MESSAGE);
diff --git a/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/ExternalToolActivityContextualView.java b/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/ExternalToolActivityContextualView.java
index 0ebeca2..75aa2c2 100644
--- a/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/ExternalToolActivityContextualView.java
+++ b/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/ExternalToolActivityContextualView.java
@@ -77,8 +77,8 @@
 		}
 		html += "<tr><td>Id</td><td>" + id + "</td></tr>";
 
-		ToolDescription useCaseDescription = bean.getUseCaseDescription();
-		String name = useCaseDescription.getUsecaseid();
+		ToolDescription toolDescription = bean.getToolDescription();
+		String name = toolDescription.getTooldescid();
 		if ((name == null) || name.isEmpty()) {
 			name = "<b>Not specified</b>";
 		}
@@ -87,7 +87,7 @@
 		Map<String, ScriptInput> stringReplacements = new TreeMap<String, ScriptInput>();
 		Map<String, ScriptInput> fileInputs = new TreeMap<String, ScriptInput>();
 
-		for (Entry<String, ScriptInput> entry : useCaseDescription.getInputs().entrySet()) {
+		for (Entry<String, ScriptInput> entry : toolDescription.getInputs().entrySet()) {
 			String key = entry.getKey();
 			ScriptInput value = entry.getValue();
 			if (value.isFile()) {
@@ -123,7 +123,7 @@
 			}
 		}
 
-		List<ScriptInputStatic> staticInputs = useCaseDescription.getStatic_inputs();
+		List<ScriptInputStatic> staticInputs = toolDescription.getStatic_inputs();
 		if (!staticInputs.isEmpty()) {
 			html += "<tr><td colspan=2 align=center><b>Static inputs</b></td></tr>";
 			html += "<tr><td><b>Type</b></td><td><b>To file</b></td></tr>";
@@ -139,7 +139,7 @@
 				html += "</tr>";
 			}
 		}
-		Map<String, ScriptOutput> outputs = useCaseDescription.getOutputs();
+		Map<String, ScriptOutput> outputs = toolDescription.getOutputs();
 		if (!outputs.isEmpty()) {
 			html += "<tr><td colspan=2 align=center><b>File outputs</b></td></tr>";
 			html += "<tr><td><b>Port name</b></td><td><b>From file</b></td></tr>";
diff --git a/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/ExternalToolConfigView.java b/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/ExternalToolConfigView.java
index 65d4768..2660237 100644
--- a/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/ExternalToolConfigView.java
+++ b/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/ExternalToolConfigView.java
@@ -168,9 +168,9 @@
 		
 
 		if (!isFromRepository()) {
-			ToolDescription ucd = newConfiguration.getUseCaseDescription();
+			ToolDescription ucd = newConfiguration.getToolDescription();
 
-			ucd.setUsecaseid(nameField.getText());
+			ucd.setTooldescid(nameField.getText());
 			if (groupField.getText().isEmpty()) {
 				ucd.setGroup(null);
 			} else {
@@ -299,14 +299,14 @@
 		}
 
 		if (!isFromRepository()) {
-			ToolDescription useCaseDescription = configuration
+			ToolDescription toolDescription = configuration
 					.getToolDescription();
 
-			nameField.setText(useCaseDescription.getUsecaseid());
-			if (useCaseDescription.getGroup() != null) {
-				groupField.setText(useCaseDescription.getGroup());
+			nameField.setText(toolDescription.getTooldescid());
+			if (toolDescription.getGroup() != null) {
+				groupField.setText(toolDescription.getGroup());
 			}
-			descriptionArea.setText(useCaseDescription.getDescription());
+			descriptionArea.setText(toolDescription.getDescription());
 			stringReplacementViewList = new ArrayList<ExternalToolStringReplacementViewer>();
 			inputFileViewList = new ArrayList<ExternalToolFileViewer>();
 			fileListViewList = new ArrayList<ExternalToolFileViewer>();
@@ -315,7 +315,7 @@
 			staticStringViewList = new ArrayList<ExternalToolStaticStringViewer>();
 /*			runtimeEnvironmentViewList = new ArrayList<ExternalToolRuntimeEnvironmentViewer>();*/
 
-			for (Entry<String, ScriptInput> entry : useCaseDescription
+			for (Entry<String, ScriptInput> entry : toolDescription
 					.getInputs().entrySet()) {
 				String name = entry.getKey();
 				ScriptInputUser si = (ScriptInputUser) entry.getValue();
@@ -337,7 +337,7 @@
 						}
 					});
 
-			for (Entry<String, ScriptInput> entry : useCaseDescription
+			for (Entry<String, ScriptInput> entry : toolDescription
 					.getInputs().entrySet()) {
 				String name = entry.getKey();
 				ScriptInputUser si = (ScriptInputUser) entry.getValue();
@@ -358,7 +358,7 @@
 						}
 					});
 
-			for (Entry<String, ScriptInput> entry : useCaseDescription
+			for (Entry<String, ScriptInput> entry : toolDescription
 					.getInputs().entrySet()) {
 				String name = entry.getKey();
 				ScriptInputUser si = (ScriptInputUser) entry.getValue();
@@ -379,7 +379,7 @@
 						}
 					});
 
-			for (Entry<String, ScriptOutput> entry : useCaseDescription
+			for (Entry<String, ScriptOutput> entry : toolDescription
 					.getOutputs().entrySet()) {
 				ScriptOutput so = entry.getValue();
 				final ExternalToolFileViewer outputView = new ExternalToolFileViewer(
@@ -396,7 +396,7 @@
 						}
 					});
 
-			for (ScriptInputStatic siss : useCaseDescription.getStatic_inputs()) {
+			for (ScriptInputStatic siss : toolDescription.getStatic_inputs()) {
 				if ((siss.getUrl() == null) && siss.isFile()) {
 					final ExternalToolStaticStringViewer staticView = new ExternalToolStaticStringViewer(
 							siss);
@@ -413,7 +413,7 @@
 						}
 					});
 
-			for (ScriptInputStatic sis : useCaseDescription.getStatic_inputs()) {
+			for (ScriptInputStatic sis : toolDescription.getStatic_inputs()) {
 				if ((sis.getUrl() != null) && sis.isFile()) {
 					final ExternalToolStaticUrlViewer staticView = new ExternalToolStaticUrlViewer(
 							sis);
@@ -430,7 +430,7 @@
 						}
 					});
 
-/*			for (RuntimeEnvironmentConstraint rec : useCaseDescription.getREs()) {
+/*			for (RuntimeEnvironmentConstraint rec : toolDescription.getREs()) {
 				final ExternalToolRuntimeEnvironmentViewer newView = new ExternalToolRuntimeEnvironmentViewer(
 						rec.getID(), rec.getRelation());
 				runtimeEnvironmentViewList.add(newView);
@@ -455,7 +455,7 @@
 			scriptTextArea.setEditorKit(new NoWrapEditorKit());
 			scriptTextArea.setFont(new Font("Monospaced", Font.PLAIN, 14));
 			scriptTextArea.setDocument(doc);
-			scriptTextArea.setText(useCaseDescription.getCommand());
+			scriptTextArea.setText(toolDescription.getCommand());
 			scriptTextArea.setCaretPosition(0);
 			scriptTextArea.setPreferredSize(new Dimension(200, 100));
 
diff --git a/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/LoadDescriptionAction.java b/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/LoadDescriptionAction.java
index c696044..931c90e 100644
--- a/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/LoadDescriptionAction.java
+++ b/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/LoadDescriptionAction.java
@@ -73,14 +73,14 @@
 				
 				List<String> descriptionNames = new ArrayList();
 				for (ToolDescription ud : descriptions) {
-					descriptionNames.add(ud.getUsecaseid());
+					descriptionNames.add(ud.getTooldescid());
 				}
 				Collections.sort(descriptionNames);
 				String chosenName = (String) JOptionPane.showInputDialog(this.scriptPanel, "Please select a tool description",
 						"Select tool description", JOptionPane.PLAIN_MESSAGE, null, descriptionNames.toArray(), descriptionNames.get(0));
 				if (chosenName != null) {
 					for (ToolDescription ud : descriptions) {
-						if (ud.getUsecaseid().equals(chosenName)) {
+						if (ud.getTooldescid().equals(chosenName)) {
 							view.getConfiguration().setToolDescription(ud);
 							view.refreshConfiguration(view.getConfiguration());
 							return;
diff --git a/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/SaveDescriptionAction.java b/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/SaveDescriptionAction.java
index 3bf6fed..d200b2e 100644
--- a/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/SaveDescriptionAction.java
+++ b/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/SaveDescriptionAction.java
@@ -63,11 +63,11 @@
 	}
 
 	public void actionPerformed(ActionEvent e) {
-		ToolDescription currentDescription = view.makeConfiguration().getUseCaseDescription();
-		String usecaseid = currentDescription.getUsecaseid();
+		ToolDescription currentDescription = view.makeConfiguration().getToolDescription();
+		String tooldescid = currentDescription.getTooldescid();
 		String description = currentDescription.getDescription();
 		String group = currentDescription.getGroup();
-		if ((usecaseid == null) || usecaseid.isEmpty() || (description == null) || description.isEmpty() || (group == null) || group.isEmpty()) {
+		if ((tooldescid == null) || tooldescid.isEmpty() || (description == null) || description.isEmpty() || (group == null) || group.isEmpty()) {
 			JOptionPane.showMessageDialog(view, "Please fill in the tool annotation and\nthen re-export the description", "Missing annotation", JOptionPane.PLAIN_MESSAGE, null);
 			view.showAnnotationPanel();
 		} else {
@@ -111,9 +111,9 @@
 					} else {
 						currentDescriptions = new ArrayList<ToolDescription>();
 					}
-					Element overallElement = new Element("usecases");
+					Element overallElement = new Element("tooldescs");
 					for (ToolDescription ud : currentDescriptions) {
-						if (!ud.getUsecaseid().equals(description.getUsecaseid())) {
+						if (!ud.getTooldescid().equals(description.getTooldescid())) {
 							overallElement.addContent(ud.writeToXMLElement());
 						}
 					}
diff --git a/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/ScriptPanel.java b/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/ScriptPanel.java
index 2a2590a..98785a2 100644
--- a/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/ScriptPanel.java
+++ b/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/ScriptPanel.java
@@ -75,11 +75,11 @@
 				BorderLayout.CENTER);
 		
 
-		ToolDescription useCaseDescription = view.getConfiguration().getUseCaseDescription();
-		stdInCheckBox.setSelected(useCaseDescription.isIncludeStdIn());
-		stdOutCheckBox.setSelected(useCaseDescription.isIncludeStdOut());
-		stdErrCheckBox.setSelected(useCaseDescription.isIncludeStdErr());
-		returnCodesField.setText(useCaseDescription.getReturnCodesAsText());
+		ToolDescription toolDescription = view.getConfiguration().getToolDescription();
+		stdInCheckBox.setSelected(toolDescription.isIncludeStdIn());
+		stdOutCheckBox.setSelected(toolDescription.isIncludeStdOut());
+		stdErrCheckBox.setSelected(toolDescription.isIncludeStdErr());
+		returnCodesField.setText(toolDescription.getReturnCodesAsText());
 		
 		JPanel codesPanel = new JPanel(new FlowLayout());
 		codesPanel.add(new JLabel("Valid return codes:"));
@@ -100,16 +100,16 @@
 					ExternalToolActivityConfigurationBean bean = view.makeConfiguration();
 					String repositoryUrl = bean.getRepositoryUrl();
 					String id = bean.getExternaltoolid();
-					ToolDescription usecase = null;
+					ToolDescription tooldesc = null;
 					try {
-						usecase = ToolDescriptionParser.readDescriptionFromUrl(
+						tooldesc = ToolDescriptionParser.readDescriptionFromUrl(
 							repositoryUrl, id);
 					}
 					catch (IOException ex) {
 						// Already logged
 					}
-					if (usecase != null) {
-						bean.setToolDescription(usecase);
+					if (tooldesc != null) {
+						bean.setToolDescription(tooldesc);
 						view.setEditable(false, bean);
 					} else {
 						JOptionPane.showMessageDialog(view, "Unable to find tool description " + id, "Missing tool description", JOptionPane.ERROR_MESSAGE);
diff --git a/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/ToolXMLPanel.java b/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/ToolXMLPanel.java
index 5c7ff53..d362567 100644
--- a/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/ToolXMLPanel.java
+++ b/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/ToolXMLPanel.java
@@ -34,15 +34,15 @@
  */
 public class ToolXMLPanel extends JPanel {
 
-	public ToolXMLPanel(ToolDescription useCaseDescription) {
+	public ToolXMLPanel(ToolDescription toolDescription) {
 		super(new BorderLayout());
-		XMLTree xmlTree = new XMLTree(useCaseDescription.writeToXMLElement());
+		XMLTree xmlTree = new XMLTree(toolDescription.writeToXMLElement());
 		this.add(new JScrollPane(xmlTree), BorderLayout.CENTER);
 	}
 
-	public void regenerateTree(ToolDescription useCaseDescription) {
+	public void regenerateTree(ToolDescription toolDescription) {
 		this.removeAll();
-		XMLTree xmlTree = new XMLTree(useCaseDescription.writeToXMLElement());
+		XMLTree xmlTree = new XMLTree(toolDescription.writeToXMLElement());
 		this.add(new JScrollPane(xmlTree), BorderLayout.CENTER);		
 	}
 
