diff --git a/plugins/org.eclipse.ease.ui.scripts/plugin.xml b/plugins/org.eclipse.ease.ui.scripts/plugin.xml
index f9fe4d6..274d8a1 100644
--- a/plugins/org.eclipse.ease.ui.scripts/plugin.xml
+++ b/plugins/org.eclipse.ease.ui.scripts/plugin.xml
@@ -72,17 +72,6 @@
       </command>
       <command
             categoryId="org.eclipse.ease.commands.category.script"
-            defaultHandler="org.eclipse.ease.ui.scripts.handler.RenameScript"
-            id="org.eclipse.ease.commands.script.rename"
-            name="Rename Script">
-         <commandParameter
-               id="org.eclipse.ease.commands.script.rename.name"
-               name="Script Name"
-               optional="false">
-         </commandParameter>
-      </command>
-      <command
-            categoryId="org.eclipse.ease.commands.category.script"
             defaultHandler="org.eclipse.ease.ui.scripts.handler.EditScript"
             id="org.eclipse.ease.commands.script.edit"
             name="Edit Script">
@@ -148,7 +137,7 @@
       </menuContribution>
       <menuContribution
             allPopups="false"
-            locationURI="popup:org.eclipse.ease.scripts.properties.allKeywords">
+            locationURI="popup:org.eclipse.ease.scripts.properties.allKeywords?after=additions">
          <command
                commandId="org.eclipse.ease.commands.script.addKeyword"
                icon="icons/elcl16/new_keyword.png"
diff --git a/plugins/org.eclipse.ease.ui.scripts/src/org/eclipse/ease/ui/scripts/handler/EditScript.java b/plugins/org.eclipse.ease.ui.scripts/src/org/eclipse/ease/ui/scripts/handler/EditScript.java
index f3fdca9..147410b 100644
--- a/plugins/org.eclipse.ease.ui.scripts/src/org/eclipse/ease/ui/scripts/handler/EditScript.java
+++ b/plugins/org.eclipse.ease.ui.scripts/src/org/eclipse/ease/ui/scripts/handler/EditScript.java
@@ -25,15 +25,12 @@
 import org.eclipse.ease.ui.scripts.ScriptEditorInput;
 import org.eclipse.ease.ui.scripts.repository.IRepositoryService;
 import org.eclipse.ease.ui.scripts.repository.IScript;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.ui.IEditorDescriptor;
 import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.IPropertyListener;
 import org.eclipse.ui.IWorkbenchPage;
 import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.handlers.HandlerUtil;
 import org.eclipse.ui.ide.IDE;
 import org.eclipse.ui.texteditor.AbstractDecoratedTextEditor;
 import org.eclipse.ui.texteditor.AbstractTextEditor;
@@ -42,92 +39,90 @@
 public class EditScript extends AbstractHandler implements IHandler {
 
 	public static final String COMMAND_ID = "org.eclipse.ease.commands.script.edit";
+	public static final String PARAMETER_NAME = COMMAND_ID + ".name";
 
 	@Override
 	public Object execute(final ExecutionEvent event) throws ExecutionException {
-		ISelection selection = HandlerUtil.getCurrentSelection(event);
-		if (selection instanceof IStructuredSelection) {
-			for (final Object element : ((IStructuredSelection) selection).toList()) {
-				if (element instanceof IScript) {
-					final Object content = ((IScript) element).getResource();
-					if ((content instanceof IFile) && (((IFile) content).exists())) {
-						// open editor
-						IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
-						try {
-							IDE.openEditor(page, (IFile) content);
-						} catch (PartInitException e) {
-							Logger.error(Activator.PLUGIN_ID, "Could not open editor for file " + content, e);
-						}
+		final IScript script = RunScript.getScript(event, PARAMETER_NAME);
 
-					} else if ((content instanceof File) && (((File) content).exists())) {
-						ScriptType type = ((IScript) element).getType();
-						IEditorDescriptor descriptor = PlatformUI.getWorkbench().getEditorRegistry().getDefaultEditor("foo." + type.getDefaultExtension());
-						if (descriptor != null) {
-							IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
-							try {
-								final ScriptEditorInput editorInput = new ScriptEditorInput((IScript) element);
-								final IEditorPart editor = page.openEditor(editorInput, descriptor.getId());
+		if (script != null) {
+			final Object content = script.getResource();
+			if ((content instanceof IFile) && (((IFile) content).exists())) {
+				// open editor
+				final IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+				try {
+					IDE.openEditor(page, (IFile) content);
+				} catch (final PartInitException e) {
+					Logger.error(Activator.PLUGIN_ID, "Could not open editor for file " + content, e);
+				}
 
-								// editor will not save external script files,
-								// we need to do this on our own
-								editor.addPropertyListener(new IPropertyListener() {
-									@Override
-									public void propertyChanged(final Object source, final int propId) {
+			} else if ((content instanceof File) && (((File) content).exists())) {
+				final ScriptType type = script.getType();
+				final IEditorDescriptor descriptor = PlatformUI.getWorkbench().getEditorRegistry().getDefaultEditor("foo." + type.getDefaultExtension());
+				if (descriptor != null) {
+					final IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+					try {
+						final ScriptEditorInput editorInput = new ScriptEditorInput(script);
+						final IEditorPart editor = page.openEditor(editorInput, descriptor.getId());
 
-										// check for changes of PROP_DIRTY from
-										// true to false,
-										// meaning the editor tried to save data
-										if (IEditorPart.PROP_DIRTY == propId) {
-											if ((editor instanceof AbstractDecoratedTextEditor) && (!editor.isDirty())) {
-												final IDocumentProvider documentProvider = ((AbstractTextEditor) editor).getDocumentProvider();
-												final String newSource = documentProvider.getDocument(editorInput).get();
+						// editor will not save external script files,
+						// we need to do this on our own
+						editor.addPropertyListener(new IPropertyListener() {
+							@Override
+							public void propertyChanged(final Object source, final int propId) {
 
-												FileOutputStream outputStream = null;
+								// check for changes of PROP_DIRTY from
+								// true to false,
+								// meaning the editor tried to save data
+								if (IEditorPart.PROP_DIRTY == propId) {
+									if ((editor instanceof AbstractDecoratedTextEditor) && (!editor.isDirty())) {
+										final IDocumentProvider documentProvider = ((AbstractTextEditor) editor).getDocumentProvider();
+										final String newSource = documentProvider.getDocument(editorInput).get();
+
+										FileOutputStream outputStream = null;
+										try {
+											outputStream = new FileOutputStream((File) content);
+											outputStream.write(newSource.getBytes());
+
+										} catch (final Exception e) {
+											Logger.error(Activator.PLUGIN_ID, "Could not store recorded script.", e);
+										} finally {
+											if (outputStream != null) {
 												try {
-													outputStream = new FileOutputStream((File) content);
-													outputStream.write(newSource.getBytes());
-
-												} catch (Exception e) {
-													Logger.error(Activator.PLUGIN_ID, "Could not store recorded script.", e);
-												} finally {
-													if (outputStream != null) {
-														try {
-															outputStream.close();
-														} catch (IOException e) {
-															// giving up
-														}
-													}
+													outputStream.close();
+												} catch (final IOException e) {
+													// giving up
 												}
-
-												// refresh script in repository
-												final IRepositoryService repositoryService = PlatformUI.getWorkbench().getService(IRepositoryService.class);
-												// FIXME we should only update
-												// this one resource instead of
-												// all scripts
-												repositoryService.update(false);
 											}
 										}
+
+										// refresh script in repository
+										final IRepositoryService repositoryService = PlatformUI.getWorkbench().getService(IRepositoryService.class);
+										// FIXME we should only update
+										// this one resource instead of
+										// all scripts
+										repositoryService.update(false);
 									}
-								});
-
-							} catch (PartInitException e) {
-								Logger.error(Activator.PLUGIN_ID, "Could not open editor for file " + content, e);
+								}
 							}
-						}
+						});
 
-					} else {
-						ScriptType type = ((IScript) element).getType();
-						IEditorDescriptor descriptor = PlatformUI.getWorkbench().getEditorRegistry().getDefaultEditor("foo." + type.getDefaultExtension());
-						if (descriptor != null) {
-							IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
-							try {
-								final ScriptEditorInput editorInput = new ScriptEditorInput((IScript) element);
-								page.openEditor(editorInput, descriptor.getId());
+					} catch (final PartInitException e) {
+						Logger.error(Activator.PLUGIN_ID, "Could not open editor for file " + content, e);
+					}
+				}
 
-							} catch (PartInitException e) {
-								Logger.error(Activator.PLUGIN_ID, "Could not open editor for file " + content, e);
-							}
-						}
+			} else {
+				final ScriptType type = script.getType();
+				final IEditorDescriptor descriptor = PlatformUI.getWorkbench().getEditorRegistry().getDefaultEditor("foo." + type.getDefaultExtension());
+				if (descriptor != null) {
+					final IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+					try {
+						final ScriptEditorInput editorInput = new ScriptEditorInput(script);
+						page.openEditor(editorInput, descriptor.getId());
+
+					} catch (final PartInitException e) {
+						Logger.error(Activator.PLUGIN_ID, "Could not open editor for file " + content, e);
 					}
 				}
 			}
diff --git a/plugins/org.eclipse.ease.ui.scripts/src/org/eclipse/ease/ui/scripts/handler/RenameScript.java b/plugins/org.eclipse.ease.ui.scripts/src/org/eclipse/ease/ui/scripts/handler/RenameScript.java
deleted file mode 100644
index 1daf73e..0000000
--- a/plugins/org.eclipse.ease.ui.scripts/src/org/eclipse/ease/ui/scripts/handler/RenameScript.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 Christian Pontesegger and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Christian Pontesegger - initial API and implementation
- *******************************************************************************/
-package org.eclipse.ease.ui.scripts.handler;
-
-import org.eclipse.core.commands.AbstractHandler;
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.commands.IHandler;
-
-public class RenameScript extends AbstractHandler implements IHandler {
-
-	public static final String COMMAND_ID = "org.eclipse.ease.commands.script.rename";
-	public static final String PARAMETER_NAME = "org.eclipse.ease.commands.script.rename.name";
-
-	@Override
-	public final Object execute(final ExecutionEvent event) throws ExecutionException {
-
-		final String[] macros = event.getParameter(PARAMETER_NAME).split(";");
-
-		for (final String macroID : macros) {
-			// TODO implement dialog
-			// final Macro macro = MacroManager.getDefault().getMacro(macroID);
-			// MacroManager.getDefault().removeMacro(macro);
-		}
-
-		return null;
-	}
-}
diff --git a/plugins/org.eclipse.ease.ui.scripts/src/org/eclipse/ease/ui/scripts/handler/RunScript.java b/plugins/org.eclipse.ease.ui.scripts/src/org/eclipse/ease/ui/scripts/handler/RunScript.java
index b55244e..867b257 100644
--- a/plugins/org.eclipse.ease.ui.scripts/src/org/eclipse/ease/ui/scripts/handler/RunScript.java
+++ b/plugins/org.eclipse.ease.ui.scripts/src/org/eclipse/ease/ui/scripts/handler/RunScript.java
@@ -30,27 +30,10 @@
 
 	@Override
 	public final Object execute(final ExecutionEvent event) throws ExecutionException {
-		IScript script = null;
-
-		final String scriptName = event.getParameter(PARAMETER_NAME);
-		if (scriptName != null) {
-			// script name provided as parameter
-			final IRepositoryService repositoryService = (IRepositoryService) PlatformUI.getWorkbench().getService(IRepositoryService.class);
-			script = repositoryService.getScript(scriptName);
-
-		} else {
-			// look for active script selection
-			ISelection selection = HandlerUtil.getCurrentSelection(event);
-			if (selection instanceof IStructuredSelection) {
-				Object element = ((IStructuredSelection) selection).getFirstElement();
-				if (element instanceof IScript)
-					script = (IScript) element;
-			}
-		}
-
+		final IScript script = getScript(event, PARAMETER_NAME);
 		if (script != null) {
 			// see if we may execute this in the current view or as stand-alone
-			IWorkbenchPart part = HandlerUtil.getActivePart(event);
+			final IWorkbenchPart part = HandlerUtil.getActivePart(event);
 
 			if (part instanceof IScriptEngineProvider)
 				// execute in current view
@@ -64,4 +47,26 @@
 
 		return null;
 	}
+
+	public static IScript getScript(final ExecutionEvent event, String parameterName) {
+		IScript script = null;
+
+		final String scriptName = event.getParameter(parameterName);
+		if (scriptName != null) {
+			// script name provided as parameter
+			final IRepositoryService repositoryService = PlatformUI.getWorkbench().getService(IRepositoryService.class);
+			script = repositoryService.getScript(scriptName);
+
+		} else {
+			// look for active script selection
+			final ISelection selection = HandlerUtil.getCurrentSelection(event);
+			if (selection instanceof IStructuredSelection) {
+				final Object element = ((IStructuredSelection) selection).getFirstElement();
+				if (element instanceof IScript)
+					script = (IScript) element;
+			}
+		}
+
+		return script;
+	}
 }
diff --git a/plugins/org.eclipse.ease.ui.scripts/src/org/eclipse/ease/ui/scripts/ui/ScriptContextMenuEntries.java b/plugins/org.eclipse.ease.ui.scripts/src/org/eclipse/ease/ui/scripts/ui/ScriptContextMenuEntries.java
index c4b0151..175f1aa 100644
--- a/plugins/org.eclipse.ease.ui.scripts/src/org/eclipse/ease/ui/scripts/ui/ScriptContextMenuEntries.java
+++ b/plugins/org.eclipse.ease.ui.scripts/src/org/eclipse/ease/ui/scripts/ui/ScriptContextMenuEntries.java
@@ -13,7 +13,6 @@
 import java.util.HashMap;
 
 import org.eclipse.ease.ui.scripts.handler.EditScript;
-import org.eclipse.ease.ui.scripts.handler.RenameScript;
 import org.eclipse.ease.ui.scripts.handler.RunScript;
 import org.eclipse.ease.ui.scripts.repository.IScript;
 import org.eclipse.jface.action.Separator;
@@ -56,7 +55,7 @@
 
 			if (names.length() > 0) {
 				names.deleteCharAt(names.length() - 1);
-				final HashMap<String, String> parameters = new HashMap<String, String>();
+				final HashMap<String, String> parameters = new HashMap<>();
 
 				// add "run" entry
 				parameters.put(RunScript.PARAMETER_NAME, names.toString());
@@ -73,27 +72,11 @@
 
 				// add "edit" entry
 				parameters.clear();
+				parameters.put(EditScript.PARAMETER_NAME, names.toString());
 				contributionParameter.commandId = EditScript.COMMAND_ID;
 				contributionParameter.label = "Edit";
 				contribution = new CommandContributionItem(contributionParameter);
 				additions.addContributionItem(contribution, null);
-
-				// add "rename" entry
-				parameters.clear();
-				parameters.put(RenameScript.PARAMETER_NAME, names.toString());
-				contributionParameter.commandId = RenameScript.COMMAND_ID;
-				contributionParameter.label = "Rename";
-				contribution = new CommandContributionItem(contributionParameter);
-				additions.addContributionItem(contribution, null);
-
-				// TODO re-implement
-				// add "delete" entry
-				// parameters.clear();
-				// parameters.put(Delete.PARAMETER_NAME, names.toString());
-				// contributionParameter.commandId = Delete.COMMAND_ID;
-				// contributionParameter.label = "Delete";
-				// contribution = new CommandContributionItem(contributionParameter);
-				// additions.addContributionItem(contribution, null);
 			}
 		}
 	}
