diff --git a/src/org/openstreetmap/josm/gui/layer/LayerPositionStrategy.java b/src/org/openstreetmap/josm/gui/layer/LayerPositionStrategy.java
index d577e30..3c1c754 100644
--- a/src/org/openstreetmap/josm/gui/layer/LayerPositionStrategy.java
+++ b/src/org/openstreetmap/josm/gui/layer/LayerPositionStrategy.java
@@ -2,57 +2,42 @@
 package org.openstreetmap.josm.gui.layer;
 
 import java.util.List;
+import java.util.function.Predicate;
 
-import org.openstreetmap.josm.tools.Predicate;
 import org.openstreetmap.josm.tools.Predicates;
 
 /**
  * This class defines a position to insert a given layer in the list of layers.
  * @author Michael Zangl
  * @since 10008
+ * @since xxx functional interface
  */
-public abstract class LayerPositionStrategy {
+@FunctionalInterface
+public interface LayerPositionStrategy {
 
     /**
      * always inserts at the front of the stack.
      */
-    public static final LayerPositionStrategy IN_FRONT = new LayerPositionStrategy() {
-        @Override
-        public int getPosition(LayerManager manager) {
-            return 0;
-        }
-    };
+    public static final LayerPositionStrategy IN_FRONT = manager -> 0;
 
     /**
      * A GPX layer is added below the lowest data layer.
      */
-    public static final LayerPositionStrategy AFTER_LAST_DATA_LAYER = afterLast(new Predicate<Layer>() {
-        @Override
-        public boolean evaluate(Layer object) {
-            return object instanceof OsmDataLayer || object instanceof ValidatorLayer;
-        }
-    });
+    public static final LayerPositionStrategy AFTER_LAST_DATA_LAYER = afterLast(
+            layer -> layer instanceof OsmDataLayer || layer instanceof ValidatorLayer);
 
     /**
      * A normal layer is added after all validation layers.
      */
-    public static final LayerPositionStrategy AFTER_LAST_VALIDATION_LAYER = afterLast(new Predicate<Layer>() {
-        @Override
-        public boolean evaluate(Layer object) {
-            return object instanceof ValidatorLayer;
-        }
-    });
+    public static final LayerPositionStrategy AFTER_LAST_VALIDATION_LAYER = afterLast(
+            layer -> layer instanceof ValidatorLayer);
 
     /**
      * The default for background layers: They are added before the first background layer in the list.
      * If there is none, they are added at the end of the list.
      */
-    public static final LayerPositionStrategy BEFORE_FIRST_BACKGROUND_LAYER = inFrontOfFirst(new Predicate<Layer>() {
-        @Override
-        public boolean evaluate(Layer object) {
-            return object.isBackgroundLayer();
-        }
-    });
+    public static final LayerPositionStrategy BEFORE_FIRST_BACKGROUND_LAYER = inFrontOfFirst(
+            layer -> layer.isBackgroundLayer());
 
     /**
      * Gets a {@link LayerPositionStrategy} that inserts this layer in front of a given layer
@@ -69,17 +54,14 @@ public abstract class LayerPositionStrategy {
      * @return The strategy.
      */
     public static LayerPositionStrategy inFrontOfFirst(final Predicate<Layer> what) {
-        return new LayerPositionStrategy() {
-            @Override
-            public int getPosition(LayerManager manager) {
-                List<Layer> layers = manager.getLayers();
-                for (int i = 0; i < layers.size(); i++) {
-                    if (what.evaluate(layers.get(i))) {
-                        return i;
-                    }
+        return manager -> {
+            List<Layer> layers = manager.getLayers();
+            for (int i = 0; i < layers.size(); i++) {
+                if (what.test(layers.get(i))) {
+                    return i;
                 }
-                return layers.size();
             }
+            return layers.size();
         };
     }
 
@@ -89,17 +71,14 @@ public abstract class LayerPositionStrategy {
      * @return The strategy.
      */
     public static LayerPositionStrategy afterLast(final Predicate<Layer> what) {
-        return new LayerPositionStrategy() {
-            @Override
-            public int getPosition(LayerManager manager) {
-                List<Layer> layers = manager.getLayers();
-                for (int i = layers.size() - 1; i >= 0; i--) {
-                    if (what.evaluate(layers.get(i))) {
-                        return i + 1;
-                    }
+        return manager -> {
+            List<Layer> layers = manager.getLayers();
+            for (int i = layers.size() - 1; i >= 0; i--) {
+                if (what.test(layers.get(i))) {
+                    return i + 1;
                 }
-                return 0;
             }
+            return 0;
         };
     }
 
@@ -108,5 +87,5 @@ public abstract class LayerPositionStrategy {
      * @param manager The layer manager to insert the layer in.
      * @return The position in the range 0...layers.size
      */
-    public abstract int getPosition(LayerManager manager);
+    int getPosition(LayerManager manager);
 }
diff --git a/test/unit/org/openstreetmap/josm/gui/layer/LayerManagerTest.java b/test/unit/org/openstreetmap/josm/gui/layer/LayerManagerTest.java
index 5fe8dde..6d4a9b9 100644
--- a/test/unit/org/openstreetmap/josm/gui/layer/LayerManagerTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/layer/LayerManagerTest.java
@@ -238,12 +238,7 @@ public class LayerManagerTest {
         TestLayer layer1 = new TestLayer() {
             @Override
             public LayerPositionStrategy getDefaultLayerPosition() {
-                return new LayerPositionStrategy() {
-                    @Override
-                    public int getPosition(LayerManager manager) {
-                        return 42;
-                    }
-                };
+                return manager -> 42;
             }
         };
         layerManager.addLayer(layer1);
