diff --git a/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java b/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java
index ecece99..80d722e 100644
--- a/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java
+++ b/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java
@@ -807,12 +807,30 @@ private static Command getLastCommand() {
     }
 
     /**
-     * Present warning in case of large and possibly unwanted movements and undo
-     * unwanted movements.
+     * Present warning in the follwing cases and undo unwanted movements: <ul>
+     * <li>large and possibly unwanted movements</li>
+     * <li>movement of node with attached ways that are hidden by filters</li>
      *
      * @param e the mouse event causing the action (mouse released)
      */
     private void confirmOrUndoMovement(MouseEvent e) {
+        boolean movesHiddenPrimitive = false;
+        for (OsmPrimitive osm : getCurrentDataSet().getSelected()) {
+            for (Way ref : OsmPrimitive.getFilteredList(osm.getReferrers(), Way.class)) {
+                if (ref.isDisabledAndHidden()) {
+                    movesHiddenPrimitive = true;
+                    break;
+                }
+            }
+        }
+        if (movesHiddenPrimitive) {
+            ExtendedDialog ed = new ConfirmMoveDialog();
+            ed.setContent(tr("Are you sure that you want to move node with attached ways that are hidden by filters?"));
+            ed.showDialog();
+            if (ed.getValue() != 1) {
+                Main.main.undoRedo.undo();
+            }
+        }
         int max = Main.pref.getInteger("warn.move.maxelements", 20), limit = max;
         for (OsmPrimitive osm : getCurrentDataSet().getSelected()) {
             if (osm instanceof Way) {
@@ -823,18 +841,12 @@ private void confirmOrUndoMovement(MouseEvent e) {
             }
         }
         if (limit < 0) {
-            ExtendedDialog ed = new ExtendedDialog(
-                    Main.parent,
-                    tr("Move elements"),
-                    new String[]{tr("Move them"), tr("Undo move")});
-            ed.setButtonIcons(new String[]{"reorder", "cancel"});
+            ExtendedDialog ed = new ConfirmMoveDialog();
             ed.setContent(
                     /* for correct i18n of plural forms - see #9110 */
                     trn("You moved more than {0} element. " + "Moving a large number of elements is often an error.\n" + "Really move them?",
                         "You moved more than {0} elements. " + "Moving a large number of elements is often an error.\n" + "Really move them?",
                         max, max));
-            ed.setCancelButton(2);
-            ed.toggleEnable("movedManyElements");
             ed.showDialog();
 
             if (ed.getValue() != 1) {
@@ -848,6 +860,17 @@ private void confirmOrUndoMovement(MouseEvent e) {
         getCurrentDataSet().fireSelectionChanged();
     }
 
+    static class ConfirmMoveDialog extends ExtendedDialog {
+        public ConfirmMoveDialog() {
+            super(Main.parent,
+                    tr("Move elements"),
+                    new String[]{tr("Move them"), tr("Undo move")});
+            setButtonIcons(new String[]{"reorder", "cancel"});
+            setCancelButton(2);
+            toggleEnable("movedManyElements");
+        }
+    }
+
     /**
      * Merges the selected nodes to the one closest to the given mouse position if the control
      * key is pressed. If there is no such node, no action will be done and no error will be
