diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardNewFolderMainPage.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardNewFolderMainPage.java
index c272e86..6be45da 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardNewFolderMainPage.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardNewFolderMainPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2016 IBM Corporation and others.
+ * Copyright (c) 2000, 2019 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -13,6 +13,7 @@
  *     Leon J. Breedt - Added multiple folder creation support (in WizardNewFolderMainPage)
  *     Lars Vogel <Lars.Vogel@vogella.com> - Bug 430694, 472784
  *     Patrik Suzzi <psuzzi@gmail.com> - Bug 371776
+ *     Alexander Fedorov <alexander.fedorov@arsysop.ru> - Bug 548799
  *******************************************************************************/
 package org.eclipse.ui.dialogs;
 
@@ -49,6 +50,7 @@
 import org.eclipse.jface.operation.IRunnableWithProgress;
 import org.eclipse.jface.resource.CompositeImageDescriptor;
 import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.ResourceLocator;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.window.Window;
 import org.eclipse.jface.wizard.WizardPage;
@@ -77,7 +79,6 @@
 import org.eclipse.ui.internal.ide.dialogs.ResourceFilterEditDialog;
 import org.eclipse.ui.internal.ide.misc.OverlayIcon;
 import org.eclipse.ui.internal.ide.misc.ResourceAndContainerGroup;
-import org.eclipse.ui.plugin.AbstractUIPlugin;
 
 /**
  * Standard main page for a wizard that creates a folder resource.
@@ -502,15 +503,17 @@
 					.getImageDescriptor(ISharedImages.IMG_OBJ_FOLDER);
 
 			ImageDescriptor[][] linkedResourceOverlayMap = new ImageDescriptor[4][1];
-			linkedResourceOverlayMap[1] = new ImageDescriptor[] { AbstractUIPlugin.imageDescriptorFromPlugin(
-					IDEWorkbenchPlugin.IDE_WORKBENCH, "$nl$/icons/full/ovr16/link_ovr.png") }; //$NON-NLS-1$
+			linkedResourceOverlayMap[1] = new ImageDescriptor[] { ResourceLocator
+					.imageDescriptorFromBundle(IDEWorkbenchPlugin.IDE_WORKBENCH, "$nl$/icons/full/ovr16/link_ovr.png") //$NON-NLS-1$
+					.orElse(null) };
 
 			CompositeImageDescriptor linkedFolderDescriptor = new OverlayIcon(folderDescriptor,
 					linkedResourceOverlayMap, new Point(16, 16));
 
 			ImageDescriptor[][] virtualFolderOverlayMap = new ImageDescriptor[4][1];
-			virtualFolderOverlayMap[1] = new ImageDescriptor[] { AbstractUIPlugin.imageDescriptorFromPlugin(
-					IDEWorkbenchPlugin.IDE_WORKBENCH, "$nl$/icons/full/ovr16/virt_ovr.png") }; //$NON-NLS-1$
+			virtualFolderOverlayMap[1] = new ImageDescriptor[] { ResourceLocator
+					.imageDescriptorFromBundle(IDEWorkbenchPlugin.IDE_WORKBENCH, "$nl$/icons/full/ovr16/virt_ovr.png") //$NON-NLS-1$
+					.orElse(null) };
 
 			CompositeImageDescriptor virtualFolderDescriptor = new OverlayIcon(folderDescriptor,
 					virtualFolderOverlayMap, new Point(16, 16));
@@ -633,7 +636,7 @@
 	 * Initializes this page's controls.
 	 */
 	protected void initializePage() {
-		Iterator it = currentSelection.iterator();
+		Iterator<?> it = currentSelection.iterator();
 		if (it.hasNext()) {
 			Object next = it.next();
 			IResource selectedResource = Adapters.adapt(next, IResource.class);
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEWorkbenchPlugin.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEWorkbenchPlugin.java
index db1d3a8..0207dc2 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEWorkbenchPlugin.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEWorkbenchPlugin.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2017 IBM Corporation and others.
+ * Copyright (c) 2000, 2019 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -11,6 +11,7 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Patrik Suzzi <psuzzi@gmail.com> - Bug 489250
+ *     Alexander Fedorov <alexander.fedorov@arsysop.ru> - Bug 548799
  *******************************************************************************/
 
 package org.eclipse.ui.internal.ide;
@@ -32,6 +33,7 @@
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.resource.JFaceResources;
 import org.eclipse.jface.resource.LocalResourceManager;
+import org.eclipse.jface.resource.ResourceLocator;
 import org.eclipse.jface.resource.ResourceManager;
 import org.eclipse.swt.custom.BusyIndicator;
 import org.eclipse.swt.widgets.Display;
@@ -316,7 +318,7 @@
 	 * @return ImageDescriptor
 	 */
 	public static ImageDescriptor getIDEImageDescriptor(String relativePath){
-		return imageDescriptorFromPlugin(IDE_WORKBENCH, ICONS_PATH + relativePath);
+		return ResourceLocator.imageDescriptorFromBundle(IDE_WORKBENCH, ICONS_PATH + relativePath).orElse(null);
 	}
 	/**
 	 * Return the resourceManager used by this plug-in.
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/LinkedResourceDecorator.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/LinkedResourceDecorator.java
index 9e08e9f..b78048c 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/LinkedResourceDecorator.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/LinkedResourceDecorator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 2019 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -11,19 +11,21 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Lars Vogel <Lars.Vogel@gmail.com> - Bug 430694
+ *     Alexander Fedorov <alexander.fedorov@arsysop.ru> - Bug 548799
  *******************************************************************************/
 package org.eclipse.ui.internal.ide;
 
 import java.net.URI;
+import java.util.Optional;
 
 import org.eclipse.core.filesystem.IFileInfo;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.ResourceLocator;
 import org.eclipse.jface.viewers.IDecoration;
 import org.eclipse.jface.viewers.ILabelProviderListener;
 import org.eclipse.jface.viewers.ILightweightLabelDecorator;
 import org.eclipse.ui.internal.ide.dialogs.IDEResourceInfoUtils;
-import org.eclipse.ui.plugin.AbstractUIPlugin;
 
 /**
  * A LinkedResourceDecorator decorates an element's image with a linked
@@ -32,15 +34,15 @@
  * @since 2.1
  */
 public class LinkedResourceDecorator implements ILightweightLabelDecorator {
-	private static final ImageDescriptor LINK;
+	private static final Optional<ImageDescriptor> LINK;
 
-	private static final ImageDescriptor LINK_WARNING;
+	private static final Optional<ImageDescriptor> LINK_WARNING;
 
 	static {
-		LINK = AbstractUIPlugin.imageDescriptorFromPlugin(
+		LINK = ResourceLocator.imageDescriptorFromBundle(
 				IDEWorkbenchPlugin.IDE_WORKBENCH,
 				"$nl$/icons/full/ovr16/link_ovr.png"); //$NON-NLS-1$
-		LINK_WARNING = AbstractUIPlugin.imageDescriptorFromPlugin(
+		LINK_WARNING = ResourceLocator.imageDescriptorFromBundle(
 				IDEWorkbenchPlugin.IDE_WORKBENCH,
 				"$nl$/icons/full/ovr16/linkwarn_ovr.png"); //$NON-NLS-1$
 	}
@@ -103,9 +105,9 @@
 				fileInfo = IDEResourceInfoUtils.getFileInfo(location);
 			}
 			if (fileInfo != null && fileInfo.exists()) {
-				decoration.addOverlay(LINK);
+				LINK.ifPresent(decoration::addOverlay);
 			} else {
-				decoration.addOverlay(LINK_WARNING);
+				LINK_WARNING.ifPresent(decoration::addOverlay);
 			}
 		}
 
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/SymlinkDecorator.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/SymlinkDecorator.java
index 2de5de8..a954a7f 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/SymlinkDecorator.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/SymlinkDecorator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (C) 2012, 2015 Robin Rosenberg <robin.rosenberg@dewire.com>
+ * Copyright (C) 2012, 2019 Robin Rosenberg <robin.rosenberg@dewire.com> and others.
  *
  *
  * This program and the accompanying materials
@@ -8,20 +8,23 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- *
- * Lars Vogel <Lars.Vogel@gmail.com> - Bug 430694
+ *     Robin Rosenberg <robin.rosenberg@dewire.com> - initial API and implementation
+ *     Lars Vogel <Lars.Vogel@gmail.com> - Bug 430694
+ *     Alexander Fedorov <alexander.fedorov@arsysop.ru> - Bug 548799
  *******************************************************************************/
 package org.eclipse.ui.internal.ide;
 
+import java.util.Optional;
+
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.ResourceAttributes;
 import org.eclipse.core.resources.mapping.ResourceMapping;
 import org.eclipse.core.runtime.Adapters;
 import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.ResourceLocator;
 import org.eclipse.jface.viewers.IDecoration;
 import org.eclipse.jface.viewers.ILabelProviderListener;
 import org.eclipse.jface.viewers.ILightweightLabelDecorator;
-import org.eclipse.ui.plugin.AbstractUIPlugin;
 
 /**
  * Decorate symbolic links
@@ -29,10 +32,10 @@
  */
 public class SymlinkDecorator implements ILightweightLabelDecorator {
 
-	private static ImageDescriptor SYMLINK;
+	private static Optional<ImageDescriptor> SYMLINK;
 
 	static {
-		SYMLINK = AbstractUIPlugin.imageDescriptorFromPlugin(
+		SYMLINK = ResourceLocator.imageDescriptorFromBundle(
 				IDEWorkbenchPlugin.IDE_WORKBENCH,
 				"$nl$/icons/full/ovr16/symlink_ovr.png"); //$NON-NLS-1$
 
@@ -59,14 +62,15 @@
 
 	@Override
 	public void decorate(Object element, IDecoration decoration) {
-		if (element instanceof ResourceMapping)
+		if (element instanceof ResourceMapping) {
 			element = ((ResourceMapping) element).getModelObject();
-
+		}
 		IResource resource = Adapters.adapt(element, IResource.class);
 		if (resource != null) {
 			ResourceAttributes resourceAttributes = resource.getResourceAttributes();
-			if (resourceAttributes != null && resourceAttributes.isSymbolicLink())
-				decoration.addOverlay(SYMLINK);
+			if (resourceAttributes != null && resourceAttributes.isSymbolicLink()) {
+				SYMLINK.ifPresent(decoration::addOverlay);
+			}
 		}
 	}
 }
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/VirtualResourceDecorator.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/VirtualResourceDecorator.java
index f2b94fd..57fc18b 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/VirtualResourceDecorator.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/VirtualResourceDecorator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2015 IBM Corporation and others.
+ * Copyright (c) 2009, 2019 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -11,26 +11,29 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Lars Vogel <Lars.Vogel@gmail.com> - Bug 430694
+ *     Alexander Fedorov <alexander.fedorov@arsysop.ru> - Bug 548799
  *******************************************************************************/
 package org.eclipse.ui.internal.ide;
 
+import java.util.Optional;
+
 import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.ResourceLocator;
 import org.eclipse.jface.viewers.IDecoration;
 import org.eclipse.jface.viewers.ILabelProviderListener;
 import org.eclipse.jface.viewers.ILightweightLabelDecorator;
-import org.eclipse.ui.plugin.AbstractUIPlugin;
 
 /**
  * A VirtualResourceDecorator replaces an element's image, if it is a virtual
  * resource.
  */
 public class VirtualResourceDecorator implements ILightweightLabelDecorator {
-	private static final ImageDescriptor VIRTUAL_FOLDER;
+	private static final Optional<ImageDescriptor> VIRTUAL_FOLDER;
 
 	static {
-		VIRTUAL_FOLDER = AbstractUIPlugin.imageDescriptorFromPlugin(
+		VIRTUAL_FOLDER = ResourceLocator.imageDescriptorFromBundle(
 				IDEWorkbenchPlugin.IDE_WORKBENCH,
 				"$nl$/icons/full/ovr16/virt_ovr.png"); //$NON-NLS-1$
 	}
@@ -85,7 +88,7 @@
 	@Override
 	public void decorate(Object element, IDecoration decoration) {
 		if (element instanceof IFolder && ((IResource) element).isVirtual()) {
-			decoration.addOverlay(VIRTUAL_FOLDER, IDecoration.BOTTOM_RIGHT);
+			VIRTUAL_FOLDER.ifPresent(o -> decoration.addOverlay(o, IDecoration.BOTTOM_RIGHT));
 		}
 	}
 }
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/PathVariablesGroup.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/PathVariablesGroup.java
index 28ccadf..620415b 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/PathVariablesGroup.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/PathVariablesGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2017 IBM Corporation and others.
+ * Copyright (c) 2000, 2019 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -14,6 +14,7 @@
  *     Helena Halperin (IBM) - bug #299212
  *     Lars Vogel <Lars.Vogel@gmail.com> - Bug 430694
  *     Robert Roth <robert.roth.off@gmail.com> - Bug 57371
+ *     Alexander Fedorov <alexander.fedorov@arsysop.ru> - Bug 548799
  *******************************************************************************/
 package org.eclipse.ui.internal.ide.dialogs;
 
@@ -37,7 +38,7 @@
 import org.eclipse.jface.dialogs.ErrorDialog;
 import org.eclipse.jface.dialogs.IDialogConstants;
 import org.eclipse.jface.layout.TableColumnLayout;
-import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.ResourceLocator;
 import org.eclipse.jface.viewers.CellLabelProvider;
 import org.eclipse.jface.viewers.ColumnViewerToolTipSupport;
 import org.eclipse.jface.viewers.ColumnWeightData;
@@ -74,7 +75,6 @@
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.internal.ide.IDEWorkbenchMessages;
 import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin;
-import org.eclipse.ui.plugin.AbstractUIPlugin;
 
 import com.ibm.icu.text.Collator;
 
@@ -151,7 +151,7 @@
 	private final Image BUILTIN_IMG = PlatformUI.getWorkbench()
 			.getSharedImages().getImage(ISharedImages.IMG_OBJ_FOLDER);
 	// unknown (non-existent) image. created locally, dispose locally
-	private Image imageUnkown;
+	private Image imageUnknown;
 
 	// current project for which the variables are being edited.
 	// If null, the workspace variables are being edited instead.
@@ -232,12 +232,10 @@
 	public Control createContents(Composite parent) {
 		Font font = parent.getFont();
 
-		if (imageUnkown == null) {
-			ImageDescriptor descriptor = AbstractUIPlugin
-					.imageDescriptorFromPlugin(
+		if (imageUnknown == null) {
+			ResourceLocator.imageDescriptorFromBundle(
 							IDEWorkbenchPlugin.IDE_WORKBENCH,
-							"$nl$/icons/full/obj16/warning.png"); //$NON-NLS-1$
-			imageUnkown = descriptor.createImage();
+					"$nl$/icons/full/obj16/warning.png").ifPresent(d -> imageUnknown = d.createImage()); //$NON-NLS-1$
 		}
 		initializeDialogUnits(parent);
 		shell = parent.getShell();
@@ -375,7 +373,7 @@
 			IPath resolvedValue = URIUtil.toPath(resolvedURI);
 			IFileInfo file = IDEResourceInfoUtils.getFileInfo(resolvedValue);
 			if (!isBuiltInVariable(varName))
-				cell.setImage(file.exists() ? (file.isDirectory() ? FOLDER_IMG : FILE_IMG) : imageUnkown);
+				cell.setImage(file.exists() ? (file.isDirectory() ? FOLDER_IMG : FILE_IMG) : imageUnknown);
 			else
 				cell.setImage(BUILTIN_IMG);
 		}
@@ -419,9 +417,9 @@
 	 * Disposes the group's resources.
 	 */
 	public void dispose() {
-		if (imageUnkown != null) {
-			imageUnkown.dispose();
-			imageUnkown = null;
+		if (imageUnknown != null) {
+			imageUnknown.dispose();
+			imageUnknown = null;
 		}
 	}
 
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ResourceFilterGroup.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ResourceFilterGroup.java
index f10d2ec..f9f2529 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ResourceFilterGroup.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ResourceFilterGroup.java
@@ -14,6 +14,7 @@
  *     Lars Vogel <Lars.Vogel@gmail.com> - Bug 430694
  *     Mickael Istria (Red Hat Inc.) - Bug 486901
  *                                   - [Cleanup] Avoid useless string instances
+ *     Alexander Fedorov <alexander.fedorov@arsysop.ru> - Bug 548799
  *******************************************************************************/
 package org.eclipse.ui.internal.ide.dialogs;
 
@@ -58,8 +59,8 @@
 import org.eclipse.jface.dialogs.TrayDialog;
 import org.eclipse.jface.fieldassist.TextContentAdapter;
 import org.eclipse.jface.layout.TreeColumnLayout;
-import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.resource.ResourceLocator;
 import org.eclipse.jface.text.FindReplaceDocumentAdapterContentProposalProvider;
 import org.eclipse.jface.viewers.CellEditor;
 import org.eclipse.jface.viewers.CheckboxCellEditor;
@@ -124,7 +125,6 @@
 import org.eclipse.ui.internal.ide.IIDEHelpContextIds;
 import org.eclipse.ui.internal.ide.misc.FileInfoAttributesMatcher;
 import org.eclipse.ui.internal.ide.misc.StringFileInfoMatcher;
-import org.eclipse.ui.plugin.AbstractUIPlugin;
 
 /**
  * A widget group that displays resource filters. Includes buttons to edit,
@@ -161,41 +161,20 @@
 	 *
 	 */
 	public ResourceFilterGroup() {
-		ImageDescriptor fileIconDescriptor = AbstractUIPlugin
-		.imageDescriptorFromPlugin(IDEWorkbenchPlugin.IDE_WORKBENCH,
-				"$nl$/icons/full/obj16/fileType_filter.png"); //$NON-NLS-1$
-		if (fileIconDescriptor != null)
-			fileIcon = fileIconDescriptor.createImage();
-
-		ImageDescriptor folderIconDescriptor = AbstractUIPlugin.imageDescriptorFromPlugin(
-				IDEWorkbenchPlugin.IDE_WORKBENCH,
-				"$nl$/icons/full/obj16/folderType_filter.png"); //$NON-NLS-1$
-		if (folderIconDescriptor != null)
-			folderIcon = folderIconDescriptor.createImage();
-
-		ImageDescriptor fileFolderIconDescriptor = AbstractUIPlugin.imageDescriptorFromPlugin(
-				IDEWorkbenchPlugin.IDE_WORKBENCH,
-				"$nl$/icons/full/obj16/fileFolderType_filter.png"); //$NON-NLS-1$
-		if (fileFolderIconDescriptor != null)
-			fileFolderIcon = fileFolderIconDescriptor.createImage();
-
-		ImageDescriptor descriptor = AbstractUIPlugin.imageDescriptorFromPlugin(
-				IDEWorkbenchPlugin.IDE_WORKBENCH,
-				"$nl$/icons/full/obj16/includeMode_filter.png"); //$NON-NLS-1$
-		if (descriptor != null)
-			includeIcon = descriptor.createImage();
-
-		descriptor = AbstractUIPlugin.imageDescriptorFromPlugin(
-				IDEWorkbenchPlugin.IDE_WORKBENCH,
-				"$nl$/icons/full/obj16/excludeMode_filter.png"); //$NON-NLS-1$
-		if (descriptor != null)
-			excludeIcon = descriptor.createImage();
-
-		ImageDescriptor inheritableIconDescriptor = AbstractUIPlugin.imageDescriptorFromPlugin(
-				IDEWorkbenchPlugin.IDE_WORKBENCH,
-				"$nl$/icons/full/obj16/inheritable_filter.png"); //$NON-NLS-1$
-		if (inheritableIconDescriptor != null)
-			inheritableIcon = inheritableIconDescriptor.createImage();
+		ResourceLocator.imageDescriptorFromBundle(IDEWorkbenchPlugin.IDE_WORKBENCH,
+				"$nl$/icons/full/obj16/fileType_filter.png").ifPresent(d -> fileIcon = d.createImage()); //$NON-NLS-1$
+		ResourceLocator.imageDescriptorFromBundle(IDEWorkbenchPlugin.IDE_WORKBENCH,
+				"$nl$/icons/full/obj16/folderType_filter.png").ifPresent(d -> folderIcon = d.createImage()); //$NON-NLS-1$
+		ResourceLocator
+				.imageDescriptorFromBundle(IDEWorkbenchPlugin.IDE_WORKBENCH,
+						"$nl$/icons/full/obj16/fileFolderType_filter.png") //$NON-NLS-1$
+				.ifPresent(d -> fileFolderIcon = d.createImage());
+		ResourceLocator.imageDescriptorFromBundle(IDEWorkbenchPlugin.IDE_WORKBENCH,
+				"$nl$/icons/full/obj16/includeMode_filter.png").ifPresent(d -> includeIcon = d.createImage()); //$NON-NLS-1$
+		ResourceLocator.imageDescriptorFromBundle(IDEWorkbenchPlugin.IDE_WORKBENCH,
+				"$nl$/icons/full/obj16/excludeMode_filter.png").ifPresent(d -> excludeIcon = d.createImage()); //$NON-NLS-1$
+		ResourceLocator.imageDescriptorFromBundle(IDEWorkbenchPlugin.IDE_WORKBENCH,
+				"$nl$/icons/full/obj16/inheritable_filter.png").ifPresent(d -> inheritableIcon = d.createImage()); //$NON-NLS-1$
 	}
 
 	Image getImage(String string, int i) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/registry/ProjectImageRegistryReader.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/registry/ProjectImageRegistryReader.java
index 4697d20..2517ae7 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/registry/ProjectImageRegistryReader.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/registry/ProjectImageRegistryReader.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2014 IBM Corporation and others.
+ * Copyright (c) 2000, 2019 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -10,14 +10,14 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Alexander Fedorov <alexander.fedorov@arsysop.ru> - Bug 548799
  *******************************************************************************/
 package org.eclipse.ui.internal.ide.registry;
 
 import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.IExtensionRegistry;
-import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.ResourceLocator;
 import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin;
-import org.eclipse.ui.plugin.AbstractUIPlugin;
 
 /**
  * A strategy to project nature image extensions from the registry.
@@ -60,13 +60,8 @@
 			return true;
 		}
 		String extendingPluginId = element.getContributor().getName();
-		ImageDescriptor image = AbstractUIPlugin.imageDescriptorFromPlugin(
-				extendingPluginId, icon);
-
-		if (image != null) {
-			registry.setNatureImage(natureId, image);
-		}
-
+		ResourceLocator.imageDescriptorFromBundle(extendingPluginId, icon)
+				.ifPresent(d -> registry.setNatureImage(natureId, d));
 		return true;
 	}
 
