Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 18630)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 18631)
@@ -268,4 +268,6 @@
     public static final CachingProperty<Boolean> PROP_PREVIEW_ON_HOVER_PRIORITIZE_SELECTION = 
         new BooleanProperty("propertiesdialog.preview-on-hover.always-show-selected", true).cached();
+    private final HoverPreviewPreferSelectionPropListener hoverPreviewPrioritizeSelectionPropListener = 
+        new HoverPreviewPreferSelectionPropListener();
 
     /**
@@ -328,4 +330,5 @@
 
         PROP_PREVIEW_ON_HOVER.addListener(hoverPreviewPropListener);
+        PROP_PREVIEW_ON_HOVER_PRIORITIZE_SELECTION.addListener(hoverPreviewPrioritizeSelectionPropListener);
     }
 
@@ -645,4 +648,5 @@
         TaggingPresets.removeListener(this);
         PROP_PREVIEW_ON_HOVER.removeListener(hoverPreviewPropListener);
+        PROP_PREVIEW_ON_HOVER_PRIORITIZE_SELECTION.removeListener(hoverPreviewPrioritizeSelectionPropListener);
         Container parent = pluginHook.getParent();
         if (parent != null) {
@@ -665,8 +669,8 @@
 
         // Temporarily disable listening to primitive mouse hover events while we have a selection as that takes priority
-        if (PROP_PREVIEW_ON_HOVER.get() && PROP_PREVIEW_ON_HOVER_PRIORITIZE_SELECTION.get()) {
+        if (Boolean.TRUE.equals(PROP_PREVIEW_ON_HOVER.get())) {
             if (newSel.isEmpty()) {
                 MainApplication.getMap().mapView.addPrimitiveHoverListener(this);
-            } else {
+            } else if (Boolean.TRUE.equals(PROP_PREVIEW_ON_HOVER_PRIORITIZE_SELECTION.get())) {
                 MainApplication.getMap().mapView.removePrimitiveHoverListener(this);
             }
@@ -1527,10 +1531,25 @@
         @Override
         public void valueChanged(ValueChangeEvent<? extends Boolean> e) {
-            if (e.getProperty().get() && isDialogShowing()) {
+            if (Boolean.TRUE.equals(e.getProperty().get()) && isDialogShowing()) {
                 MainApplication.getMap().mapView.addPrimitiveHoverListener(PropertiesDialog.this);
-            } else if (!e.getProperty().get()) {
+            } else if (Boolean.FALSE.equals(e.getProperty().get())) {
                 MainApplication.getMap().mapView.removePrimitiveHoverListener(PropertiesDialog.this);
             }
         }
     }
+
+    /*
+     * Ensure HoverListener is re-added when selection priority is disabled while something is selected.
+     * Otherwise user would need to change selection to see the preference change take effect.
+     */
+    private class HoverPreviewPreferSelectionPropListener implements ValueChangeListener<Boolean> {
+        @Override
+        public void valueChanged(ValueChangeEvent<? extends Boolean> e) {
+            if (Boolean.FALSE.equals(e.getProperty().get()) &&
+                Boolean.TRUE.equals(PROP_PREVIEW_ON_HOVER.get()) &&
+                isDialogShowing()) {
+                MainApplication.getMap().mapView.addPrimitiveHoverListener(PropertiesDialog.this);
+            }
+        }
+    }
 }
