Index: src/org/openstreetmap/josm/data/validation/tests/Addresses.java
===================================================================
--- src/org/openstreetmap/josm/data/validation/tests/Addresses.java	(revision 14894)
+++ src/org/openstreetmap/josm/data/validation/tests/Addresses.java	(working copy)
@@ -18,6 +18,8 @@
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
+import org.openstreetmap.josm.command.Command;
+import org.openstreetmap.josm.command.DeleteCommand;
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.Node;
@@ -46,6 +48,7 @@
     protected static final int MULTIPLE_STREET_NAMES = 2603;
     protected static final int MULTIPLE_STREET_RELATIONS = 2604;
     protected static final int HOUSE_NUMBER_TOO_FAR = 2605;
+    protected static final int OBSOLETE_RELATION = 2606;
 
     protected static final DoubleProperty MAX_DUPLICATE_DISTANCE = new DoubleProperty("validator.addresses.max_duplicate_distance", 200.0);
     protected static final DoubleProperty MAX_STREET_DISTANCE = new DoubleProperty("validator.addresses.max_street_distance", 200.0);
@@ -261,6 +264,7 @@
         checkHouseNumbersWithoutStreet(r);
         checkForDuplicate(r);
         if (r.hasTag("type", ASSOCIATED_STREET)) {
+            checkIfObsolete(r);
             // Used to count occurrences of each house number in order to find duplicates
             Map<String, List<OsmPrimitive>> map = new HashMap<>();
             // Used to detect different street names
@@ -389,4 +393,59 @@
                 .primitives(errorList)
                 .build());
     }
+
+    /**
+     * Check if an associatedStreet Relation is obsolete.
+     * @param r the relation
+     */
+    private void checkIfObsolete(Relation r) {
+        for (RelationMember m : r.getMembers()) {
+            if (m.getMember().isIncomplete())
+                return;
+
+            boolean isHighway = m.isWay() && m.getMember().hasKey("highway");
+
+            switch (m.getRole()) {
+            case "house":
+            case "addr:houselink":
+            case "address":
+                if (!m.getMember().hasTag("addr:street") || !m.getMember().hasTag("addr:housenumber"))
+                    return;
+                break;
+            case "street":
+                if (!m.getMember().hasTag("name") && r.hasTag("name"))
+                    return;
+                break;
+            case "":
+                if (!isHighway && (!m.getMember().hasTag("addr:street") || !m.getMember().hasTag("addr:housenumber")))
+                    return;
+                if (isHighway && !m.getMember().hasTag("name") && r.hasTag("name"))
+                    return;
+                break;
+            default:
+            }
+        }
+        errors.add(TestError.builder(this, Severity.WARNING, OBSOLETE_RELATION)
+                .message(tr("Relation is obsolete"))
+                .primitives(r)
+                .build());
+    }
+
+    /**
+     * Merge the nodes into one.
+     * Copied from UtilsPlugin.MergePointsAction
+     */
+    @Override
+    public Command fixError(TestError testError) {
+        return new DeleteCommand(testError.getPrimitives());
+    }
+
+    @Override
+    public boolean isFixable(TestError testError) {
+        if (!(testError.getTester() instanceof Addresses))
+            return false;
+        return testError.getCode() == OBSOLETE_RELATION;
+    }
+
+
 }
