diff --git a/src/org/openstreetmap/josm/data/validation/tests/Addresses.java b/src/org/openstreetmap/josm/data/validation/tests/Addresses.java
index 4f1fc1e50..387dd4601 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/Addresses.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/Addresses.java
@@ -19,6 +19,9 @@ import java.util.Set;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
+import javax.swing.JCheckBox;
+import javax.swing.JPanel;
+
 import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.command.DeleteCommand;
 import org.openstreetmap.josm.data.coor.EastNorth;
@@ -30,10 +33,13 @@ import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.RelationMember;
 import org.openstreetmap.josm.data.osm.TagMap;
 import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.data.preferences.BooleanProperty;
 import org.openstreetmap.josm.data.preferences.DoubleProperty;
+import org.openstreetmap.josm.data.preferences.sources.ValidatorPrefHelper;
 import org.openstreetmap.josm.data.validation.Severity;
 import org.openstreetmap.josm.data.validation.Test;
 import org.openstreetmap.josm.data.validation.TestError;
+import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.Geometry;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Pair;
@@ -70,8 +76,15 @@ public class Addresses extends Test {
     protected static final String ADDR_HOUSE_NAME    = "addr:housename";
     protected static final String ADDR_POSTCODE      = "addr:postcode";
     protected static final String ASSOCIATED_STREET  = "associatedStreet";
+    protected static final String NAME               = "name";
     // CHECKSTYLE.ON: SingleSpaceSeparator
 
+    private static final BooleanProperty PREF_INCLUDE_BLDG_POI =
+            new BooleanProperty(ValidatorPrefHelper.PREFIX + "." + OpeningHourTest.class.getSimpleName() + "." + "includebldgpois", false);
+    /* I18n: Label text for checkbox choosing to validate addresses for all types of objects, not just plain addresses */
+    private final JCheckBox checkboxIncludeBldgPOI = new JCheckBox(tr("Include POIs like amenities, offices, and buildings in duplicate address detection"));
+    private boolean includeBldgAndPOI = false;
+
     private Map<String, Collection<OsmPrimitive>> knownAddresses;
     private Set<String> ignoredAddresses;
 
@@ -79,7 +92,9 @@ public class Addresses extends Test {
      * Constructor
      */
     public Addresses() {
+        /* I18n: Label text for checkbox choosing to validate addresses */
         super(tr("Addresses"), tr("Checks for errors in addresses and associatedStreet relations."));
+        includeBldgAndPOI = PREF_INCLUDE_BLDG_POI.get();
     }
 
     protected List<Relation> getAndCheckAssociatedStreets(OsmPrimitive p) {
@@ -141,7 +156,7 @@ public class Addresses extends Test {
      * @param p OsmPrimitive that has an address
      */
     private void collectAddress(OsmPrimitive p) {
-        if (!isPOI(p)) {
+        if (includeBldgAndPOI || !isPOI(p)) {
             for (String simplifiedAddress : getSimplifiedAddresses(p)) {
                 if (!ignoredAddresses.contains(simplifiedAddress)) {
                     knownAddresses.computeIfAbsent(simplifiedAddress, x -> new ArrayList<>()).add(p);
@@ -154,7 +169,7 @@ public class Addresses extends Test {
         knownAddresses = new HashMap<>();
         ignoredAddresses = new HashSet<>();
         for (OsmPrimitive p : primitive.getDataSet().allNonDeletedPrimitives()) {
-            if (p instanceof Node && p.hasKey(ADDR_UNIT, ADDR_FLATS)) {
+            if ((includeBldgAndPOI || p instanceof Node) && p.hasKey(ADDR_UNIT, ADDR_FLATS)) {
                 for (OsmPrimitive r : p.getReferrers()) {
                     if (hasAddress(r)) {
                         // ignore addresses of buildings that are connected to addr:unit nodes
@@ -186,7 +201,7 @@ public class Addresses extends Test {
         if (knownAddresses == null) {
             initAddressMap(p);
         }
-        if (!isPOI(p) && hasAddress(p)) {
+        if ((includeBldgAndPOI || !isPOI(p)) && hasAddress(p)) {
             List<TestError> result = new ArrayList<>();
             for (String simplifiedAddress : getSimplifiedAddresses(p)) {
                 if (!ignoredAddresses.contains(simplifiedAddress) && knownAddresses.containsKey(simplifiedAddress)) {
@@ -198,6 +213,8 @@ public class Addresses extends Test {
                         Severity severityLevel;
                         String city1 = p.get(ADDR_CITY);
                         String city2 = p2.get(ADDR_CITY);
+                        String name1 = p.get(NAME);
+                        String name2 = p2.get(NAME);
                         double distance = getDistance(p, p2);
                         if (city1 != null && city2 != null) {
                             if (city1.equals(city2)) {
@@ -235,6 +252,10 @@ public class Addresses extends Test {
                                 }
                             }
                         }
+                        if (severityLevel == Severity.WARNING && name1 != name2) {
+                            // since multiple objects can exist at one address, a different name tag isn't very concerning
+                            severityLevel = Severity.OTHER;
+                        }
                         result.add(TestError.builder(this, severityLevel, DUPLICATE_HOUSE_NUMBER)
                                 .message(tr("Duplicate house numbers"), marktr("''{0}'' ({1}m)"), simplifiedAddress, (int) distance)
                                 .primitives(Arrays.asList(p, p2)).build());
@@ -522,4 +543,19 @@ public class Addresses extends Test {
         return testError.getCode() == OBSOLETE_RELATION;
     }
 
+    @Override
+    public void addGui(JPanel testPanel) {
+        super.addGui(testPanel);
+        checkboxIncludeBldgPOI.setSelected(PREF_INCLUDE_BLDG_POI.get());
+        testPanel.add(checkboxIncludeBldgPOI, GBC.eol().insets(20, 0, 0, 0));
+    }
+
+    @Override
+    public boolean ok() {
+        super.ok();
+        PREF_INCLUDE_BLDG_POI.put(checkboxIncludeBldgPOI.isSelected());
+        includeBldgAndPOI = PREF_INCLUDE_BLDG_POI.get();
+        return false;
+    }
+
 }
