diff --git a/org.eclipse.jdt.debug.ui/plugin.properties b/org.eclipse.jdt.debug.ui/plugin.properties
index 7476dad..c454609 100644
--- a/org.eclipse.jdt.debug.ui/plugin.properties
+++ b/org.eclipse.jdt.debug.ui/plugin.properties
@@ -272,7 +272,6 @@
 FormatStackTraceActionDelegate.tooltip= Format
 
 javaLogicalStruturePref.name=Logical Structures
-EditLogicalStructure.label=Edit Logical Structure...
 
 allInstances.label=All Ins&tances...
 allInstances.tooltip=Displays a popup window showing all live instances of the selected type in the current running VM
diff --git a/org.eclipse.jdt.debug.ui/plugin.xml b/org.eclipse.jdt.debug.ui/plugin.xml
index 81ceaef..ee5c856 100644
--- a/org.eclipse.jdt.debug.ui/plugin.xml
+++ b/org.eclipse.jdt.debug.ui/plugin.xml
@@ -895,21 +895,6 @@
             </not>
          </visibility>
       </objectContribution>
-      <objectContribution
-            objectClass="org.eclipse.jdt.debug.core.IJavaVariable"
-            id="org.eclipse.jdt.debug.ui.JavaLogicalStructureActions">
-         <action
-               enablesFor="1"
-               label="%EditLogicalStructure.label"
-               class="org.eclipse.jdt.internal.debug.ui.actions.EditVariableLogicalStructureAction"
-               menubarPath="emptyNavigationGroup"
-               id="EditLogicalStructure"/>
-         <visibility>
-            <objectState
-                  value="canEditLogicalStructure"
-                  name="JavaLogicalStructureFilter"/>
-         </visibility>
-      </objectContribution>
       <viewerContribution
             targetID="#JavaSnippetEditorContext"
             id="org.eclipse.jdt.debug.ui.JavaSnippetPopupActions">
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JDIElementImageDescriptor.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JDIElementImageDescriptor.java
new file mode 100644
index 0000000..6643b11
--- /dev/null
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JDIElementImageDescriptor.java
@@ -0,0 +1,88 @@
+/*******************************************************************************
+ * Copyright (c) 2017 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.internal.debug.ui;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.debug.internal.ui.DebugPluginImages;
+import org.eclipse.debug.internal.ui.IInternalDebugUIConstants;
+import org.eclipse.jface.resource.CompositeImageDescriptor;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.swt.graphics.Point;
+
+public class JDIElementImageDescriptor extends CompositeImageDescriptor {
+
+	private ImageDescriptor fBaseImage;
+	private int fFlags;
+	private Point fSize;
+	public JDIElementImageDescriptor(ImageDescriptor baseImage, int flags, Point size) {
+		fBaseImage = baseImage;
+		Assert.isNotNull(fBaseImage);
+		fFlags = flags;
+		Assert.isTrue(fFlags >= 0);
+		fSize = size;
+		Assert.isNotNull(fSize);
+	}
+
+	@Override
+	protected void drawCompositeImage(int width, int height) {
+		drawImage(createCachedImageDataProvider(fBaseImage), 0, 0);
+		drawRightBottom();
+	}
+
+	private void drawRightBottom() {
+		Point size = getSize();
+		Point pos = new Point(size.x, size.y);
+
+		if ((fFlags & JDIImageDescriptor.LOGICAL_STRUCTURE) != 0) {
+			addRightBottomImage(DebugPluginImages.getImageDescriptor(IInternalDebugUIConstants.IMG_OVR_SHOW_LOGICAL_STRUCTURE), pos);
+		}
+	}
+
+	private void addRightBottomImage(ImageDescriptor desc, Point pos) {
+		CachedImageDataProvider provider = createCachedImageDataProvider(desc);
+		int x = pos.x - provider.getWidth();
+		int y = pos.y - provider.getHeight();
+		if (x >= 0 && y >= 0) {
+			drawImage(provider, x, y);
+			pos.x = x;
+		}
+	}
+
+	@Override
+	protected Point getSize() {
+		if (fSize == null) {
+			CachedImageDataProvider provider = createCachedImageDataProvider(fBaseImage);
+			fSize = new Point(provider.getWidth(), provider.getHeight());
+		}
+		return fSize;
+	}
+
+	/**
+	 * @see Object#equals(java.lang.Object)
+	 */
+	@Override
+	public boolean equals(Object object) {
+		if (!(object instanceof JDIElementImageDescriptor)) {
+			return false;
+		}
+		JDIElementImageDescriptor other = (JDIElementImageDescriptor) object;
+		return (fBaseImage.equals(other.fBaseImage) && fFlags == other.fFlags);
+	}
+
+	/**
+	 * @see Object#hashCode()
+	 */
+	@Override
+	public int hashCode() {
+		return fBaseImage.hashCode() | fFlags;
+	}
+
+}
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JDIImageDescriptor.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JDIImageDescriptor.java
index eefa81b..69cb384 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JDIImageDescriptor.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JDIImageDescriptor.java
@@ -62,6 +62,8 @@
 	/** Flag to render disabled due to trigger point adornment */
 	public final static int TRIGGER_SUPPRESSED = 0x20000;
 
+	public final static int LOGICAL_STRUCTURE = 0x400000;
+
 	private ImageDescriptor fBaseImage;
 	private int fFlags;
 	private Point fSize;
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JDIModelPresentation.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JDIModelPresentation.java
index b7f7df0..71350ff 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JDIModelPresentation.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JDIModelPresentation.java
@@ -22,6 +22,7 @@
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.debug.core.DebugException;
 import org.eclipse.debug.core.DebugPlugin;
+import org.eclipse.debug.core.ILogicalStructureType;
 import org.eclipse.debug.core.model.IBreakpoint;
 import org.eclipse.debug.core.model.IDisconnect;
 import org.eclipse.debug.core.model.IExpression;
@@ -29,9 +30,11 @@
 import org.eclipse.debug.core.model.ITerminate;
 import org.eclipse.debug.core.model.IThread;
 import org.eclipse.debug.core.model.IValue;
+import org.eclipse.debug.core.model.IVariable;
 import org.eclipse.debug.core.model.IWatchExpression;
 import org.eclipse.debug.core.sourcelookup.containers.LocalFileStorage;
 import org.eclipse.debug.core.sourcelookup.containers.ZipEntryStorage;
+import org.eclipse.debug.internal.ui.DebugUIPlugin;
 import org.eclipse.debug.internal.ui.DefaultLabelProvider;
 import org.eclipse.debug.ui.DebugUITools;
 import org.eclipse.debug.ui.IDebugModelPresentation;
@@ -84,6 +87,7 @@
 import org.eclipse.jdt.ui.JavaElementImageDescriptor;
 import org.eclipse.jdt.ui.JavaElementLabelProvider;
 import org.eclipse.jdt.ui.JavaUI;
+import org.eclipse.jface.resource.CompositeImageDescriptor;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.viewers.IColorProvider;
 import org.eclipse.jface.viewers.LabelProvider;
@@ -913,9 +917,12 @@
 	}
 
 	protected Image getVariableImage(IAdaptable element) {
-		JavaElementImageDescriptor descriptor= new JavaElementImageDescriptor(
+		CompositeImageDescriptor descriptor = new JavaElementImageDescriptor(
 			computeBaseImageDescriptor(element), computeAdornmentFlags(element), BIG_SIZE);
-		return JavaPlugin.getImageDescriptorRegistry().get(descriptor);
+		descriptor = new JDIElementImageDescriptor(descriptor, computeLogicalStructureAdornmentFlags(element), BIG_SIZE);
+		Image image = JDIDebugUIPlugin.getImageDescriptorRegistry().get(descriptor);
+
+		return image;
 	}
 
 	/**
@@ -1133,6 +1140,22 @@
 		return flags;
 	}
 
+	private int computeLogicalStructureAdornmentFlags(IAdaptable element) {
+		int flags = 0;
+		 if (element instanceof IVariable) {
+            try {
+                IValue value= ((IVariable) element).getValue();
+                ILogicalStructureType[] types = DebugPlugin.getLogicalStructureTypes(value);
+		        if (types.length > 0) {
+		        	return flags |= JDIImageDescriptor.LOGICAL_STRUCTURE;
+		        }
+            }catch (DebugException e) {
+				DebugUIPlugin.log(e.getStatus());
+            }
+		}
+        return flags;
+	}
+
 	/**
 	 * @see IDebugModelPresentation#getEditorInput(Object)
 	 */
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaLogicalStructuresPreferencePage.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaLogicalStructuresPreferencePage.java
index ef4c59c..07c859d 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaLogicalStructuresPreferencePage.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaLogicalStructuresPreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2016 IBM Corporation and others.
+ * Copyright (c) 2004, 2017 IBM Corporation 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
@@ -212,6 +212,23 @@
 	}
 
 	@Override
+	public void applyData(Object data) {
+		if (data instanceof String) {
+			Object[] logicalStructures = fLogicalStructuresContentProvider.getElements(null);
+			for (int i = 0, length = logicalStructures.length; i < length; i++) {
+				JavaLogicalStructure javaLogicalStructure = ((JavaLogicalStructure) logicalStructures[i]);
+				if (((String) data).compareToIgnoreCase(javaLogicalStructure.getId() + javaLogicalStructure.getDescription()
+						+ javaLogicalStructure.hashCode()) == 0) {
+					fLogicalStructuresViewer.setSelection(new StructuredSelection(logicalStructures[i]));
+					return;
+				}
+			}
+		} else {
+			super.applyData(data);
+		}
+	}
+
+	@Override
 	public void createControl(Composite parent) {
 		super.createControl(parent);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IJavaDebugHelpContextIds.JAVA_LOGICAL_STRUCTURES_PAGE);
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaVarActionFilter.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaVarActionFilter.java
index 93639d8..af0ec12 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaVarActionFilter.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaVarActionFilter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2015 IBM Corporation and others.
+ * Copyright (c) 2005, 2017 IBM Corporation 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
@@ -21,11 +21,9 @@
 import org.eclipse.jdt.debug.core.IJavaObject;
 import org.eclipse.jdt.debug.core.IJavaType;
 import org.eclipse.jdt.debug.core.IJavaVariable;
-import org.eclipse.jdt.internal.debug.core.logicalstructures.JavaStructureErrorValue;
 import org.eclipse.jdt.internal.debug.core.model.JDINullValue;
 import org.eclipse.jdt.internal.debug.core.model.JDIPlaceholderValue;
 import org.eclipse.jdt.internal.debug.core.model.JDIReferenceListVariable;
-import org.eclipse.jdt.internal.debug.ui.actions.EditVariableLogicalStructureAction;
 import org.eclipse.jdt.internal.debug.ui.display.JavaInspectExpression;
 import org.eclipse.ui.IActionFilter;
 
@@ -213,9 +211,6 @@
 						return JavaDetailFormattersManager.getDefault().hasSuperclassDetailFormatter(((IJavaObject)varValue).getJavaType());
 					}
 				}
-				else if (name.equals("JavaLogicalStructureFilter") && value.equals("canEditLogicalStructure")) {  //$NON-NLS-1$ //$NON-NLS-2$
-                    return varValue instanceof JavaStructureErrorValue || EditVariableLogicalStructureAction.getLogicalStructure(varValue) != null;
-                }
 			} catch (DebugException e) {}
 		}
 		else if (target instanceof JavaInspectExpression) {
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/EditVariableLogicalStructureAction.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/EditVariableLogicalStructureAction.java
deleted file mode 100644
index 5fefc2a..0000000
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/EditVariableLogicalStructureAction.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2015 IBM Corporation 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:
- *     IBM Corporation - initial implementation
- *******************************************************************************/
-package org.eclipse.jdt.internal.debug.ui.actions;
-
-import org.eclipse.debug.core.DebugException;
-import org.eclipse.debug.core.DebugPlugin;
-import org.eclipse.debug.core.ILogicalStructureType;
-import org.eclipse.debug.core.model.IValue;
-import org.eclipse.jdt.debug.core.IJavaVariable;
-import org.eclipse.jdt.internal.debug.core.logicalstructures.JavaLogicalStructure;
-import org.eclipse.jdt.internal.debug.core.logicalstructures.JavaLogicalStructures;
-import org.eclipse.jdt.internal.debug.core.logicalstructures.JavaStructureErrorValue;
-import org.eclipse.jdt.internal.debug.ui.EditLogicalStructureDialog;
-import org.eclipse.jdt.internal.debug.ui.JDIDebugUIPlugin;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.window.Window;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.IObjectActionDelegate;
-import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.ui.actions.ActionDelegate;
-
-/**
- * Action which prompts the user to edit the logical structure that
- * is currently active on the given object.
- */
-public class EditVariableLogicalStructureAction extends ActionDelegate implements IObjectActionDelegate {
-
-    /**
-     * The editable structure for the currently selected variable or
-     * <code>null</code> if none.
-     */
-    private JavaLogicalStructure fStructure= null;
-
-    /* (non-Javadoc)
-     * @see org.eclipse.ui.IObjectActionDelegate#setActivePart(org.eclipse.jface.action.IAction, org.eclipse.ui.IWorkbenchPart)
-     */
-    @Override
-	public void setActivePart(IAction action, IWorkbenchPart targetPart) {
-    }
-
-    /**
-     * Prompt the user to edit the logical structure associated with the currently
-     * selected variable.
-     */
-    @Override
-	public void run(IAction action) {
-        if (fStructure == null) {
-            return;
-        }
-        Shell shell= JDIDebugUIPlugin.getActiveWorkbenchShell();
-        if (shell != null) {
-            EditLogicalStructureDialog dialog= new EditLogicalStructureDialog(shell, fStructure);
-            if (dialog.open() == Window.OK) {
-                JavaLogicalStructures.saveUserDefinedJavaLogicalStructures();
-            }
-        }
-    }
-
-    /**
-     * @see ActionDelegate#selectionChanged(org.eclipse.jface.action.IAction, org.eclipse.jface.viewers.ISelection)
-     */
-    @Override
-	public void selectionChanged(IAction action, ISelection selection) {
-        fStructure= null;
-        Object element = ((IStructuredSelection) selection).getFirstElement();
-        if (element instanceof IJavaVariable) {
-            try {
-                IValue value= ((IJavaVariable) element).getValue();
-                if (value instanceof JavaStructureErrorValue) {
-                    value= ((JavaStructureErrorValue) value).getParentValue();
-                }
-                ILogicalStructureType type= getLogicalStructure(value);
-                if (type instanceof JavaLogicalStructure) {
-                    JavaLogicalStructure javaStructure= (JavaLogicalStructure) type;
-                    if (!javaStructure.isContributed()) {
-                        fStructure= javaStructure;
-                    }
-                }
-            } catch (DebugException e) {
-                JDIDebugUIPlugin.log(e.getStatus());
-            }
-        }
-        action.setEnabled(fStructure != null);
-    }
-
-    /**
-     * Returns the logical structure currently associated with the given
-     * value or <code>null</code> if none.
-     * @param value the value
-     * @return the logical structure currently associated with the given
-     *  value or <code>null</code> if none.
-     */
-    public static ILogicalStructureType getLogicalStructure(IValue value) {
-        // This code is based on VariablesViewContentProvider#getLogicalValue(IValue)
-        ILogicalStructureType type = null;
-        ILogicalStructureType[] types = DebugPlugin.getLogicalStructureTypes(value);
-        if (types.length > 0) {
-            type= DebugPlugin.getDefaultStructureType(types);
-        }
-        return type;
-    }
-}
