diff --git a/bundles/org.eclipse.e4.tools.compat/src/org/eclipse/e4/tools/compat/internal/ContextServiceFactory.java b/bundles/org.eclipse.e4.tools.compat/src/org/eclipse/e4/tools/compat/internal/ContextServiceFactory.java
index a35860b..8594181 100644
--- a/bundles/org.eclipse.e4.tools.compat/src/org/eclipse/e4/tools/compat/internal/ContextServiceFactory.java
+++ b/bundles/org.eclipse.e4.tools.compat/src/org/eclipse/e4/tools/compat/internal/ContextServiceFactory.java
@@ -26,13 +26,10 @@
 import org.eclipse.e4.ui.di.UISynchronize;
 import org.eclipse.e4.ui.services.IServiceConstants;
 import org.eclipse.e4.ui.services.IStylingEngine;
-import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Widget;
-import org.eclipse.ui.ISelectionListener;
 import org.eclipse.ui.ISelectionService;
-import org.eclipse.ui.IWorkbenchPart;
 import org.eclipse.ui.IWorkbenchPartSite;
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.internal.services.IWorkbenchLocationService;
@@ -135,21 +132,17 @@
 			windowContext.set(ISelectionService.class, window.getSelectionService());
 
 			windowContext.declareModifiable(IServiceConstants.ACTIVE_SELECTION);
-			window.getSelectionService().addSelectionListener(new ISelectionListener() {
-
-				@Override
-				public void selectionChanged(IWorkbenchPart part, ISelection selection) {
-					if (!selection.isEmpty()) {
-						if (selection instanceof IStructuredSelection) {
-							final IStructuredSelection s = (IStructuredSelection) selection;
-							if (s.size() == 1) {
-								windowContext.set(IServiceConstants.ACTIVE_SELECTION, s.getFirstElement());
-							} else {
-								windowContext.set(IServiceConstants.ACTIVE_SELECTION, s.toList());
-							}
+			window.getSelectionService().addSelectionListener((part, selection) -> {
+				if (!selection.isEmpty()) {
+					if (selection instanceof IStructuredSelection) {
+						final IStructuredSelection s = (IStructuredSelection) selection;
+						if (s.size() == 1) {
+							windowContext.set(IServiceConstants.ACTIVE_SELECTION, s.getFirstElement());
 						} else {
-							windowContext.set(IServiceConstants.ACTIVE_SELECTION, selection);
+							windowContext.set(IServiceConstants.ACTIVE_SELECTION, s.toList());
 						}
+					} else {
+						windowContext.set(IServiceConstants.ACTIVE_SELECTION, selection);
 					}
 				}
 			});
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/XMIModelResource.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/XMIModelResource.java
index dfa59f2..baf3f27 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/XMIModelResource.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/XMIModelResource.java
@@ -15,7 +15,6 @@
 
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.EventObject;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -29,7 +28,6 @@
 import org.eclipse.e4.ui.internal.workbench.E4XMIResourceFactory;
 import org.eclipse.emf.common.command.BasicCommandStack;
 import org.eclipse.emf.common.command.Command;
-import org.eclipse.emf.common.command.CommandStackListener;
 import org.eclipse.emf.common.command.CompoundCommand;
 import org.eclipse.emf.common.util.TreeIterator;
 import org.eclipse.emf.common.util.URI;
@@ -59,13 +57,9 @@
 
 		final ResourceSet resourceSet = new ResourceSetImpl();
 		final BasicCommandStack commandStack = new BasicCommandStack();
-		commandStack.addCommandStackListener(new CommandStackListener() {
-
-			@Override
-			public void commandStackChanged(EventObject event) {
-				fireDirtyChanged();
-				fireCommandStackChanged();
-			}
+		commandStack.addCommandStackListener(event -> {
+			fireDirtyChanged();
+			fireCommandStackChanged();
 		});
 		editingDomain = new AdapterFactoryEditingDomain(adapterFactory, commandStack, resourceSet);
 		resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap()
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/ObservableColumnLabelProvider.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/ObservableColumnLabelProvider.java
index 6283bbc..18fc7b2 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/ObservableColumnLabelProvider.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/ObservableColumnLabelProvider.java
@@ -17,7 +17,6 @@
 
 import org.eclipse.core.databinding.observable.map.IMapChangeListener;
 import org.eclipse.core.databinding.observable.map.IObservableMap;
-import org.eclipse.core.databinding.observable.map.MapChangeEvent;
 import org.eclipse.jface.viewers.CellLabelProvider;
 import org.eclipse.jface.viewers.LabelProviderChangedEvent;
 import org.eclipse.jface.viewers.ViewerCell;
@@ -28,13 +27,10 @@
 public class ObservableColumnLabelProvider<M> extends CellLabelProvider {
 	private IObservableMap<M, ?>[] attributeMaps;
 
-	private IMapChangeListener<M, Object> mapChangeListener = new IMapChangeListener<M, Object>() {
-		@Override
-		public void handleMapChange(MapChangeEvent<? extends M, ?> event) {
-			Set<? extends M> affectedElements = event.diff.getChangedKeys();
-			LabelProviderChangedEvent newEvent = new LabelProviderChangedEvent(ObservableColumnLabelProvider.this, affectedElements.toArray());
-			fireLabelProviderChanged(newEvent);
-		}
+	private IMapChangeListener<M, Object> mapChangeListener = event -> {
+		Set<? extends M> affectedElements = event.diff.getChangedKeys();
+		LabelProviderChangedEvent newEvent = new LabelProviderChangedEvent(ObservableColumnLabelProvider.this, affectedElements.toArray());
+		fireLabelProviderChanged(newEvent);
 	};
 
 	/**
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/properties/ProjectOSGiTranslationProvider.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/properties/ProjectOSGiTranslationProvider.java
index afc4b28..c82b2b1 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/properties/ProjectOSGiTranslationProvider.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/properties/ProjectOSGiTranslationProvider.java
@@ -19,9 +19,7 @@
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResourceChangeEvent;
-import org.eclipse.core.resources.IResourceChangeListener;
 import org.eclipse.core.resources.IResourceDelta;
-import org.eclipse.core.resources.IResourceDeltaVisitor;
 import org.eclipse.core.resources.IWorkspaceRoot;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.e4.core.di.annotations.Optional;
@@ -65,23 +63,13 @@
 		super(null);
 
 		this.project = project;
-		this.project.getWorkspace().addResourceChangeListener(new IResourceChangeListener() {
-
-			@Override
-			public void resourceChanged(IResourceChangeEvent event) {
-				if (event.getType() == IResourceChangeEvent.POST_CHANGE) {
-					try {
-						event.getDelta().accept(new IResourceDeltaVisitor() {
-
-							@Override
-							public boolean visit(IResourceDelta delta) throws CoreException {
-								return ProjectOSGiTranslationProvider.this.visit(delta);
-							}
-						});
-					} catch (final CoreException e) {
-						// TODO Auto-generated catch block
-						e.printStackTrace();
-					}
+		this.project.getWorkspace().addResourceChangeListener(event -> {
+			if (event.getType() == IResourceChangeEvent.POST_CHANGE) {
+				try {
+					event.getDelta().accept(delta -> ProjectOSGiTranslationProvider.this.visit(delta));
+				} catch (final CoreException e) {
+					// TODO Auto-generated catch block
+					e.printStackTrace();
 				}
 			}
 		});
@@ -271,12 +259,7 @@
 				final String resourceName = toResourceName(bundleName, "properties"); //$NON-NLS-1$
 				InputStream stream = null;
 				try {
-					stream = AccessController.doPrivileged(new PrivilegedExceptionAction<InputStream>() {
-						@Override
-						public InputStream run() throws IOException {
-							return getResourceAsStream(resourceName);
-						}
-					});
+					stream = AccessController.doPrivileged((PrivilegedExceptionAction<InputStream>) () -> getResourceAsStream(resourceName));
 				} catch (final PrivilegedActionException e) {
 					throw (IOException) e.getException();
 				}
diff --git a/bundles/org.eclipse.e4.tools.services/src/org/eclipse/e4/tools/services/impl/ResourceBundleHelper.java b/bundles/org.eclipse.e4.tools.services/src/org/eclipse/e4/tools/services/impl/ResourceBundleHelper.java
index 5521b92..daca617 100644
--- a/bundles/org.eclipse.e4.tools.services/src/org/eclipse/e4/tools/services/impl/ResourceBundleHelper.java
+++ b/bundles/org.eclipse.e4.tools.services/src/org/eclipse/e4/tools/services/impl/ResourceBundleHelper.java
@@ -560,22 +560,19 @@
 				InputStream stream = null;
 				try {
 					stream = AccessController.doPrivileged(
-							new PrivilegedExceptionAction<InputStream>() {
-								@Override
-								public InputStream run() throws IOException {
-									InputStream is = null;
-									final URL url = osgiBundle.getEntry(resourceName);
-									if (url != null) {
-										final URLConnection connection = url.openConnection();
-										if (connection != null) {
-											// Disable caches to get fresh data for
-											// reloading.
-											connection.setUseCaches(false);
-											is = connection.getInputStream();
-										}
+							(PrivilegedExceptionAction<InputStream>) () -> {
+								InputStream is = null;
+								final URL url = osgiBundle.getEntry(resourceName);
+								if (url != null) {
+									final URLConnection connection = url.openConnection();
+									if (connection != null) {
+										// Disable caches to get fresh data for
+										// reloading.
+										connection.setUseCaches(false);
+										is = connection.getInputStream();
 									}
-									return is;
 								}
+								return is;
 							});
 				} catch (final PrivilegedActionException e) {
 					throw (IOException) e.getException();
