Index: trunk/src/org/openstreetmap/josm/actions/search/SearchAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/search/SearchAction.java	(revision 12658)
+++ trunk/src/org/openstreetmap/josm/actions/search/SearchAction.java	(revision 12659)
@@ -4,5 +4,4 @@
 import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
 import static org.openstreetmap.josm.tools.I18n.tr;
-import static org.openstreetmap.josm.tools.I18n.trc;
 import static org.openstreetmap.josm.tools.I18n.trn;
 
@@ -25,5 +24,4 @@
 import java.util.List;
 import java.util.Map;
-import java.util.Objects;
 import java.util.Set;
 import java.util.function.Predicate;
@@ -50,5 +48,7 @@
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.search.SearchParseError;
+import org.openstreetmap.josm.data.osm.search.SearchSetting;
 import org.openstreetmap.josm.data.osm.search.SearchCompiler;
+import org.openstreetmap.josm.data.osm.search.SearchMode;
 import org.openstreetmap.josm.gui.ExtendedDialog;
 import org.openstreetmap.josm.gui.MainApplication;
@@ -86,45 +86,4 @@
 
     private static final String SEARCH_EXPRESSION = "searchExpression";
-
-    /**
-     * Search mode.
-     */
-    public enum SearchMode {
-        /** replace selection */
-        replace('R'),
-        /** add to selection */
-        add('A'),
-        /** remove from selection */
-        remove('D'),
-        /** find in selection */
-        in_selection('S');
-
-        private final char code;
-
-        SearchMode(char code) {
-            this.code = code;
-        }
-
-        /**
-         * Returns the unique character code of this mode.
-         * @return the unique character code of this mode
-         */
-        public char getCode() {
-            return code;
-        }
-
-        /**
-         * Returns the search mode matching the given character code.
-         * @param code character code
-         * @return search mode matching the given character code
-         */
-        public static SearchMode fromCode(char code) {
-            for (SearchMode mode: values()) {
-                if (mode.getCode() == code)
-                    return mode;
-            }
-            return null;
-        }
-    }
 
     private static final LinkedList<SearchSetting> searchHistory = new LinkedList<>();
@@ -446,11 +405,11 @@
 
         if (inSelection.isSelected()) {
-            initialValues.mode = SearchAction.SearchMode.in_selection;
+            initialValues.mode = SearchMode.in_selection;
         } else if (replace.isSelected()) {
-            initialValues.mode = SearchAction.SearchMode.replace;
+            initialValues.mode = SearchMode.replace;
         } else if (add.isSelected()) {
-            initialValues.mode = SearchAction.SearchMode.add;
+            initialValues.mode = SearchMode.add;
         } else {
-            initialValues.mode = SearchAction.SearchMode.remove;
+            initialValues.mode = SearchMode.remove;
         }
 
@@ -850,157 +809,4 @@
 
     /**
-     * This class defines a set of parameters that is used to
-     * perform search within the search dialog.
-     */
-    public static class SearchSetting {
-        public String text;
-        public SearchMode mode;
-        public boolean caseSensitive;
-        public boolean regexSearch;
-        public boolean mapCSSSearch;
-        public boolean allElements;
-
-        /**
-         * Constructs a new {@code SearchSetting}.
-         */
-        public SearchSetting() {
-            text = "";
-            mode = SearchMode.replace;
-        }
-
-        /**
-         * Constructs a new {@code SearchSetting} from an existing one.
-         * @param original original search settings
-         */
-        public SearchSetting(SearchSetting original) {
-            text = original.text;
-            mode = original.mode;
-            caseSensitive = original.caseSensitive;
-            regexSearch = original.regexSearch;
-            mapCSSSearch = original.mapCSSSearch;
-            allElements = original.allElements;
-        }
-
-        @Override
-        public String toString() {
-            String cs = caseSensitive ?
-                    /*case sensitive*/  trc("search", "CS") :
-                        /*case insensitive*/  trc("search", "CI");
-            String rx = regexSearch ? ", " +
-                            /*regex search*/ trc("search", "RX") : "";
-            String css = mapCSSSearch ? ", " +
-                            /*MapCSS search*/ trc("search", "CSS") : "";
-            String all = allElements ? ", " +
-                            /*all elements*/ trc("search", "A") : "";
-            return '"' + text + "\" (" + cs + rx + css + all + ", " + mode + ')';
-        }
-
-        @Override
-        public boolean equals(Object other) {
-            if (this == other) return true;
-            if (other == null || getClass() != other.getClass()) return false;
-            SearchSetting that = (SearchSetting) other;
-            return caseSensitive == that.caseSensitive &&
-                    regexSearch == that.regexSearch &&
-                    mapCSSSearch == that.mapCSSSearch &&
-                    allElements == that.allElements &&
-                    mode == that.mode &&
-                    Objects.equals(text, that.text);
-        }
-
-        @Override
-        public int hashCode() {
-            return Objects.hash(text, mode, caseSensitive, regexSearch, mapCSSSearch, allElements);
-        }
-
-        /**
-         * <p>Transforms a string following a certain format, namely "[R | A | D | S][C?,R?,A?,M?] [a-zA-Z]"
-         * where the first part defines the mode of the search, see {@link SearchMode}, the second defines
-         * a set of attributes within the {@code SearchSetting} class and the second is the search query.
-         * <p>
-         * Attributes are as follows:
-         * <ul>
-         *     <li>C - if search is case sensitive
-         *     <li>R - if the regex syntax is used
-         *     <li>A - if all objects are considered
-         *     <li>M - if the mapCSS syntax is used
-         * </ul>
-         * <p>For example, "RC type:node" is a valid string representation of an object that replaces the
-         * current selection, is case sensitive and searches for all objects of type node.
-         * @param s A string representation of a {@code SearchSetting} object
-         *          from which the object must be built.
-         * @return A {@code SearchSetting} defined by the input string.
-         */
-        public static SearchSetting readFromString(String s) {
-            if (s.isEmpty())
-                return null;
-
-            SearchSetting result = new SearchSetting();
-
-            int index = 1;
-
-            result.mode = SearchMode.fromCode(s.charAt(0));
-            if (result.mode == null) {
-                result.mode = SearchMode.replace;
-                index = 0;
-            }
-
-            while (index < s.length()) {
-                if (s.charAt(index) == 'C') {
-                    result.caseSensitive = true;
-                } else if (s.charAt(index) == 'R') {
-                    result.regexSearch = true;
-                } else if (s.charAt(index) == 'A') {
-                    result.allElements = true;
-                } else if (s.charAt(index) == 'M') {
-                    result.mapCSSSearch = true;
-                } else if (s.charAt(index) == ' ') {
-                    break;
-                } else {
-                    Logging.warn("Unknown char in SearchSettings: " + s);
-                    break;
-                }
-                index++;
-            }
-
-            if (index < s.length() && s.charAt(index) == ' ') {
-                index++;
-            }
-
-            result.text = s.substring(index);
-
-            return result;
-        }
-
-        /**
-         * Builds a string representation of the {@code SearchSetting} object,
-         * see {@link #readFromString(String)} for more details.
-         * @return A string representation of the {@code SearchSetting} object.
-         */
-        public String writeToString() {
-            if (text == null || text.isEmpty())
-                return "";
-
-            StringBuilder result = new StringBuilder();
-            result.append(mode.getCode());
-            if (caseSensitive) {
-                result.append('C');
-            }
-            if (regexSearch) {
-                result.append('R');
-            }
-            if (mapCSSSearch) {
-                result.append('M');
-            }
-            if (allElements) {
-                result.append('A');
-            }
-            result.append(' ')
-                  .append(text);
-            return result.toString();
-        }
-    }
-
-    /**
      * {@link ActionParameter} implementation with {@link SearchSetting} as value type.
      * @since 12547 (moved from {@link ActionParameter})
Index: trunk/src/org/openstreetmap/josm/data/osm/Filter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/Filter.java	(revision 12658)
+++ trunk/src/org/openstreetmap/josm/data/osm/Filter.java	(revision 12659)
@@ -4,8 +4,8 @@
 import java.util.Objects;
 
-import org.openstreetmap.josm.actions.search.SearchAction.SearchMode;
-import org.openstreetmap.josm.actions.search.SearchAction.SearchSetting;
 import org.openstreetmap.josm.data.Preferences.pref;
 import org.openstreetmap.josm.data.Preferences.writeExplicitly;
+import org.openstreetmap.josm.data.osm.search.SearchMode;
+import org.openstreetmap.josm.data.osm.search.SearchSetting;
 
 /**
Index: trunk/src/org/openstreetmap/josm/data/osm/FilterMatcher.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/FilterMatcher.java	(revision 12658)
+++ trunk/src/org/openstreetmap/josm/data/osm/FilterMatcher.java	(revision 12659)
@@ -6,7 +6,7 @@
 import java.util.List;
 
-import org.openstreetmap.josm.actions.search.SearchAction.SearchMode;
 import org.openstreetmap.josm.data.osm.search.SearchParseError;
 import org.openstreetmap.josm.data.osm.search.SearchCompiler;
+import org.openstreetmap.josm.data.osm.search.SearchMode;
 import org.openstreetmap.josm.data.osm.search.SearchCompiler.Match;
 import org.openstreetmap.josm.data.osm.search.SearchCompiler.Not;
Index: trunk/src/org/openstreetmap/josm/data/osm/search/SearchCompiler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/search/SearchCompiler.java	(revision 12658)
+++ trunk/src/org/openstreetmap/josm/data/osm/search/SearchCompiler.java	(revision 12659)
@@ -24,5 +24,4 @@
 
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.actions.search.SearchAction;
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.coor.LatLon;
@@ -62,5 +61,5 @@
  *   fact expression
  *   fact
- * 
+ *
  * fact =
  *  ( expression )
@@ -71,5 +70,5 @@
  *  term
  *  </pre>
- * 
+ *
  * @author Imi
  * @since 12656 (moved from actions.search package)
@@ -1647,5 +1646,5 @@
      * @see #compile(String)
      */
-    public static Match compile(SearchAction.SearchSetting setting) throws SearchParseError {
+    public static Match compile(SearchSetting setting) throws SearchParseError {
         if (setting.mapCSSSearch) {
             return compileMapCSS(setting.text);
Index: trunk/src/org/openstreetmap/josm/data/osm/search/SearchMode.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/search/SearchMode.java	(revision 12659)
+++ trunk/src/org/openstreetmap/josm/data/osm/search/SearchMode.java	(revision 12659)
@@ -0,0 +1,44 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data.osm.search;
+
+/**
+ * Search mode.
+ * @since 12659 (extracted from {@code SearchAction})
+ */
+public enum SearchMode {
+    /** replace selection */
+    replace('R'),
+    /** add to selection */
+    add('A'),
+    /** remove from selection */
+    remove('D'),
+    /** find in selection */
+    in_selection('S');
+
+    private final char code;
+
+    SearchMode(char code) {
+        this.code = code;
+    }
+
+    /**
+     * Returns the unique character code of this mode.
+     * @return the unique character code of this mode
+     */
+    public char getCode() {
+        return code;
+    }
+
+    /**
+     * Returns the search mode matching the given character code.
+     * @param code character code
+     * @return search mode matching the given character code
+     */
+    public static SearchMode fromCode(char code) {
+        for (SearchMode mode: values()) {
+            if (mode.getCode() == code)
+                return mode;
+        }
+        return null;
+    }
+}
Index: trunk/src/org/openstreetmap/josm/data/osm/search/SearchSetting.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/search/SearchSetting.java	(revision 12659)
+++ trunk/src/org/openstreetmap/josm/data/osm/search/SearchSetting.java	(revision 12659)
@@ -0,0 +1,162 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data.osm.search;
+
+import static org.openstreetmap.josm.tools.I18n.trc;
+
+import java.util.Objects;
+
+import org.openstreetmap.josm.tools.Logging;
+
+/**
+ * This class defines a set of parameters that is used to
+ * perform search within the search dialog.
+ * @since 12659 (extracted from {@code SearchAction})
+ */
+public class SearchSetting {
+    public String text;
+    public SearchMode mode;
+    public boolean caseSensitive;
+    public boolean regexSearch;
+    public boolean mapCSSSearch;
+    public boolean allElements;
+
+    /**
+     * Constructs a new {@code SearchSetting}.
+     */
+    public SearchSetting() {
+        text = "";
+        mode = SearchMode.replace;
+    }
+
+    /**
+     * Constructs a new {@code SearchSetting} from an existing one.
+     * @param original original search settings
+     */
+    public SearchSetting(SearchSetting original) {
+        text = original.text;
+        mode = original.mode;
+        caseSensitive = original.caseSensitive;
+        regexSearch = original.regexSearch;
+        mapCSSSearch = original.mapCSSSearch;
+        allElements = original.allElements;
+    }
+
+    @Override
+    public String toString() {
+        String cs = caseSensitive ?
+                /*case sensitive*/  trc("search", "CS") :
+                    /*case insensitive*/  trc("search", "CI");
+        String rx = regexSearch ? ", " +
+                        /*regex search*/ trc("search", "RX") : "";
+        String css = mapCSSSearch ? ", " +
+                        /*MapCSS search*/ trc("search", "CSS") : "";
+        String all = allElements ? ", " +
+                        /*all elements*/ trc("search", "A") : "";
+        return '"' + text + "\" (" + cs + rx + css + all + ", " + mode + ')';
+    }
+
+    @Override
+    public boolean equals(Object other) {
+        if (this == other) return true;
+        if (other == null || getClass() != other.getClass()) return false;
+        SearchSetting that = (SearchSetting) other;
+        return caseSensitive == that.caseSensitive &&
+                regexSearch == that.regexSearch &&
+                mapCSSSearch == that.mapCSSSearch &&
+                allElements == that.allElements &&
+                mode == that.mode &&
+                Objects.equals(text, that.text);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(text, mode, caseSensitive, regexSearch, mapCSSSearch, allElements);
+    }
+
+    /**
+     * <p>Transforms a string following a certain format, namely "[R | A | D | S][C?,R?,A?,M?] [a-zA-Z]"
+     * where the first part defines the mode of the search, see {@link SearchMode}, the second defines
+     * a set of attributes within the {@code SearchSetting} class and the second is the search query.
+     * <p>
+     * Attributes are as follows:
+     * <ul>
+     *     <li>C - if search is case sensitive
+     *     <li>R - if the regex syntax is used
+     *     <li>A - if all objects are considered
+     *     <li>M - if the mapCSS syntax is used
+     * </ul>
+     * <p>For example, "RC type:node" is a valid string representation of an object that replaces the
+     * current selection, is case sensitive and searches for all objects of type node.
+     * @param s A string representation of a {@code SearchSetting} object
+     *          from which the object must be built.
+     * @return A {@code SearchSetting} defined by the input string.
+     */
+    public static SearchSetting readFromString(String s) {
+        if (s.isEmpty())
+            return null;
+
+        SearchSetting result = new SearchSetting();
+
+        int index = 1;
+
+        result.mode = SearchMode.fromCode(s.charAt(0));
+        if (result.mode == null) {
+            result.mode = SearchMode.replace;
+            index = 0;
+        }
+
+        while (index < s.length()) {
+            if (s.charAt(index) == 'C') {
+                result.caseSensitive = true;
+            } else if (s.charAt(index) == 'R') {
+                result.regexSearch = true;
+            } else if (s.charAt(index) == 'A') {
+                result.allElements = true;
+            } else if (s.charAt(index) == 'M') {
+                result.mapCSSSearch = true;
+            } else if (s.charAt(index) == ' ') {
+                break;
+            } else {
+                Logging.warn("Unknown char in SearchSettings: " + s);
+                break;
+            }
+            index++;
+        }
+
+        if (index < s.length() && s.charAt(index) == ' ') {
+            index++;
+        }
+
+        result.text = s.substring(index);
+
+        return result;
+    }
+
+    /**
+     * Builds a string representation of the {@code SearchSetting} object,
+     * see {@link #readFromString(String)} for more details.
+     * @return A string representation of the {@code SearchSetting} object.
+     */
+    public String writeToString() {
+        if (text == null || text.isEmpty())
+            return "";
+
+        StringBuilder result = new StringBuilder();
+        result.append(mode.getCode());
+        if (caseSensitive) {
+            result.append('C');
+        }
+        if (regexSearch) {
+            result.append('R');
+        }
+        if (mapCSSSearch) {
+            result.append('M');
+        }
+        if (allElements) {
+            result.append('A');
+        }
+        result.append(' ')
+              .append(text);
+        return result.toString();
+    }
+}
Index: trunk/src/org/openstreetmap/josm/gui/MainApplication.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MainApplication.java	(revision 12658)
+++ trunk/src/org/openstreetmap/josm/gui/MainApplication.java	(revision 12659)
@@ -73,4 +73,5 @@
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.osm.search.SearchMode;
 import org.openstreetmap.josm.data.validation.OsmValidator;
 import org.openstreetmap.josm.gui.ProgramArguments.Option;
@@ -1024,5 +1025,5 @@
             tasks.add(MainApplication.worker.submit(() -> {
                 for (String s : selectionArguments) {
-                    SearchAction.search(s, SearchAction.SearchMode.add);
+                    SearchAction.search(s, SearchMode.add);
                 }
             }));
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java	(revision 12658)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java	(revision 12659)
@@ -44,5 +44,4 @@
 import org.openstreetmap.josm.actions.relation.EditRelationAction;
 import org.openstreetmap.josm.actions.relation.SelectInRelationListAction;
-import org.openstreetmap.josm.actions.search.SearchAction.SearchSetting;
 import org.openstreetmap.josm.data.SelectionChangedListener;
 import org.openstreetmap.josm.data.coor.LatLon;
@@ -58,4 +57,5 @@
 import org.openstreetmap.josm.data.osm.event.DatasetEventManager;
 import org.openstreetmap.josm.data.osm.event.DatasetEventManager.FireMode;
+import org.openstreetmap.josm.data.osm.search.SearchSetting;
 import org.openstreetmap.josm.data.osm.event.NodeMovedEvent;
 import org.openstreetmap.josm.data.osm.event.PrimitivesAddedEvent;
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 12658)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 12659)
@@ -60,5 +60,4 @@
 import org.openstreetmap.josm.actions.relation.SelectMembersAction;
 import org.openstreetmap.josm.actions.relation.SelectRelationAction;
-import org.openstreetmap.josm.actions.search.SearchAction.SearchSetting;
 import org.openstreetmap.josm.command.ChangeCommand;
 import org.openstreetmap.josm.command.ChangePropertyCommand;
@@ -78,4 +77,5 @@
 import org.openstreetmap.josm.data.osm.event.DatasetEventManager.FireMode;
 import org.openstreetmap.josm.data.osm.search.SearchCompiler;
+import org.openstreetmap.josm.data.osm.search.SearchSetting;
 import org.openstreetmap.josm.data.osm.event.SelectionEventManager;
 import org.openstreetmap.josm.data.preferences.StringProperty;
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/properties/RecentTagCollection.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/properties/RecentTagCollection.java	(revision 12658)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/properties/RecentTagCollection.java	(revision 12659)
@@ -8,7 +8,7 @@
 import java.util.Map;
 
-import org.openstreetmap.josm.actions.search.SearchAction;
 import org.openstreetmap.josm.data.osm.Tag;
 import org.openstreetmap.josm.data.osm.search.SearchParseError;
+import org.openstreetmap.josm.data.osm.search.SearchSetting;
 import org.openstreetmap.josm.data.osm.search.SearchCompiler;
 import org.openstreetmap.josm.data.preferences.CollectionProperty;
@@ -82,9 +82,9 @@
     }
 
-    public void setTagsToIgnore(SearchAction.SearchSetting tagsToIgnore) throws SearchParseError {
+    public void setTagsToIgnore(SearchSetting tagsToIgnore) throws SearchParseError {
         setTagsToIgnore(tagsToIgnore.text.isEmpty() ? SearchCompiler.Never.INSTANCE : SearchCompiler.compile(tagsToIgnore));
     }
 
-    public SearchAction.SearchSetting ignoreTag(Tag tagToIgnore, SearchAction.SearchSetting settingToUpdate) throws SearchParseError {
+    public SearchSetting ignoreTag(Tag tagToIgnore, SearchSetting settingToUpdate) throws SearchParseError {
         final String forTag = SearchCompiler.buildSearchStringForTag(tagToIgnore.getKey(), tagToIgnore.getValue());
         settingToUpdate.text = settingToUpdate.text.isEmpty()
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java	(revision 12658)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java	(revision 12659)
@@ -70,4 +70,5 @@
 import org.openstreetmap.josm.data.osm.Tag;
 import org.openstreetmap.josm.data.osm.search.SearchParseError;
+import org.openstreetmap.josm.data.osm.search.SearchSetting;
 import org.openstreetmap.josm.data.osm.search.SearchCompiler;
 import org.openstreetmap.josm.data.preferences.BooleanProperty;
@@ -130,5 +131,5 @@
             Collections.<String>emptyList());
     public static final StringProperty PROPERTY_TAGS_TO_IGNORE = new StringProperty("properties.recent-tags.ignore",
-            new SearchAction.SearchSetting().writeToString());
+            new SearchSetting().writeToString());
 
     /**
@@ -163,5 +164,5 @@
 
     final RecentTagCollection recentTags = new RecentTagCollection(MAX_LRU_TAGS_NUMBER);
-    SearchAction.SearchSetting tagsToIgnore;
+    SearchSetting tagsToIgnore;
 
     /**
@@ -330,6 +331,6 @@
 
     void loadTagsToIgnore() {
-        final SearchAction.SearchSetting searchSetting = Utils.firstNonNull(
-                SearchAction.SearchSetting.readFromString(PROPERTY_TAGS_TO_IGNORE.get()), new SearchAction.SearchSetting());
+        final SearchSetting searchSetting = Utils.firstNonNull(
+                SearchSetting.readFromString(PROPERTY_TAGS_TO_IGNORE.get()), new SearchSetting());
         if (!Objects.equals(tagsToIgnore, searchSetting)) {
             try {
@@ -338,5 +339,5 @@
             } catch (SearchParseError parseError) {
                 warnAboutParseError(parseError);
-                tagsToIgnore = new SearchAction.SearchSetting();
+                tagsToIgnore = new SearchSetting();
                 recentTags.setTagsToIgnore(SearchCompiler.Never.INSTANCE);
             }
@@ -1024,5 +1025,5 @@
             @Override
             public void actionPerformed(ActionEvent e) {
-                final SearchAction.SearchSetting newTagsToIngore = SearchAction.showSearchDialog(tagsToIgnore);
+                final SearchSetting newTagsToIngore = SearchAction.showSearchDialog(tagsToIgnore);
                 if (newTagsToIngore == null) {
                     return;
Index: trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/Roles.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/Roles.java	(revision 12658)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/Roles.java	(revision 12659)
@@ -13,8 +13,8 @@
 import javax.swing.JPanel;
 
-import org.openstreetmap.josm.actions.search.SearchAction;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Tag;
 import org.openstreetmap.josm.data.osm.search.SearchParseError;
+import org.openstreetmap.josm.data.osm.search.SearchSetting;
 import org.openstreetmap.josm.data.osm.search.SearchCompiler;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetItem;
@@ -78,5 +78,5 @@
         public void setMember_expression(String memberExpression) throws SAXException {
             try {
-                final SearchAction.SearchSetting searchSetting = new SearchAction.SearchSetting();
+                final SearchSetting searchSetting = new SearchSetting();
                 searchSetting.text = memberExpression;
                 searchSetting.caseSensitive = true;
Index: trunk/test/unit/org/openstreetmap/josm/actions/CreateMultipolygonActionTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/actions/CreateMultipolygonActionTest.java	(revision 12658)
+++ trunk/test/unit/org/openstreetmap/josm/actions/CreateMultipolygonActionTest.java	(revision 12659)
@@ -12,5 +12,4 @@
 import org.junit.Test;
 import org.openstreetmap.josm.TestUtils;
-import org.openstreetmap.josm.actions.search.SearchAction.SearchSetting;
 import org.openstreetmap.josm.command.SequenceCommand;
 import org.openstreetmap.josm.data.osm.DataSet;
@@ -19,4 +18,5 @@
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.data.osm.search.SearchParseError;
+import org.openstreetmap.josm.data.osm.search.SearchSetting;
 import org.openstreetmap.josm.data.osm.search.SearchCompiler;
 import org.openstreetmap.josm.io.OsmReader;
Index: trunk/test/unit/org/openstreetmap/josm/actions/JoinAreasActionTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/actions/JoinAreasActionTest.java	(revision 12658)
+++ trunk/test/unit/org/openstreetmap/josm/actions/JoinAreasActionTest.java	(revision 12659)
@@ -25,4 +25,5 @@
 import org.openstreetmap.josm.data.osm.RelationMember;
 import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.data.osm.search.SearchMode;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.layer.Layer;
@@ -84,10 +85,10 @@
             for (String ref : new String[]{"A", "B", "C", "D", "E"}) {
                 System.out.print("Joining ways " + ref);
-                Collection<OsmPrimitive> found = SearchAction.searchAndReturn("type:way ref="+ref, SearchAction.SearchMode.replace);
+                Collection<OsmPrimitive> found = SearchAction.searchAndReturn("type:way ref="+ref, SearchMode.replace);
                 assertEquals(2, found.size());
 
                 MainApplication.getMenu().joinAreas.join(Utils.filteredCollection(found, Way.class));
 
-                Collection<OsmPrimitive> found2 = SearchAction.searchAndReturn("type:way ref="+ref, SearchAction.SearchMode.replace);
+                Collection<OsmPrimitive> found2 = SearchAction.searchAndReturn("type:way ref="+ref, SearchMode.replace);
                 assertEquals(1, found2.size());
                 System.out.println(" ==> OK");
Index: trunk/test/unit/org/openstreetmap/josm/actions/search/SearchActionTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/actions/search/SearchActionTest.java	(revision 12658)
+++ 	(revision )
@@ -1,32 +1,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.actions.search;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.openstreetmap.josm.TestUtils;
-import org.openstreetmap.josm.actions.search.SearchAction.SearchMode;
-import org.openstreetmap.josm.data.osm.search.SearchCompiler;
-import org.openstreetmap.josm.testutils.JOSMTestRules;
-
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
-
-/**
- * Unit tests for class {@link SearchCompiler}.
- */
-public class SearchActionTest {
-
-    /**
-     * Setup rules.
-     */
-    @Rule
-    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
-    public JOSMTestRules test = new JOSMTestRules();
-
-    /**
-     * Unit test of {@link SearchMode} enum.
-     */
-    @Test
-    public void testEnumSearchMode() {
-        TestUtils.superficialEnumCodeCoverage(SearchMode.class);
-    }
-}
Index: trunk/test/unit/org/openstreetmap/josm/data/osm/FilterTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/data/osm/FilterTest.java	(revision 12658)
+++ trunk/test/unit/org/openstreetmap/josm/data/osm/FilterTest.java	(revision 12659)
@@ -16,7 +16,7 @@
 import org.junit.Rule;
 import org.junit.Test;
-import org.openstreetmap.josm.actions.search.SearchAction.SearchMode;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.Filter.FilterPreferenceEntry;
+import org.openstreetmap.josm.data.osm.search.SearchMode;
 import org.openstreetmap.josm.data.osm.search.SearchParseError;
 import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
Index: trunk/test/unit/org/openstreetmap/josm/data/osm/search/SearchCompilerTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/data/osm/search/SearchCompilerTest.java	(revision 12658)
+++ trunk/test/unit/org/openstreetmap/josm/data/osm/search/SearchCompilerTest.java	(revision 12659)
@@ -19,5 +19,4 @@
 import org.junit.Test;
 import org.openstreetmap.josm.TestUtils;
-import org.openstreetmap.josm.actions.search.SearchAction.SearchSetting;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.DataSet;
Index: trunk/test/unit/org/openstreetmap/josm/data/osm/search/SearchModeTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/data/osm/search/SearchModeTest.java	(revision 12659)
+++ trunk/test/unit/org/openstreetmap/josm/data/osm/search/SearchModeTest.java	(revision 12659)
@@ -0,0 +1,30 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data.osm.search;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
+import org.openstreetmap.josm.testutils.JOSMTestRules;
+
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
+/**
+ * Unit tests for class {@link SearchMode}.
+ */
+public class SearchModeTest {
+
+    /**
+     * Setup rules.
+     */
+    @Rule
+    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
+    public JOSMTestRules test = new JOSMTestRules();
+
+    /**
+     * Unit test of {@link SearchMode} enum.
+     */
+    @Test
+    public void testEnumSearchMode() {
+        TestUtils.superficialEnumCodeCoverage(SearchMode.class);
+    }
+}
Index: trunk/test/unit/org/openstreetmap/josm/gui/dialogs/properties/RecentTagCollectionTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/gui/dialogs/properties/RecentTagCollectionTest.java	(revision 12658)
+++ trunk/test/unit/org/openstreetmap/josm/gui/dialogs/properties/RecentTagCollectionTest.java	(revision 12659)
@@ -11,7 +11,7 @@
 import org.junit.Rule;
 import org.junit.Test;
-import org.openstreetmap.josm.actions.search.SearchAction;
 import org.openstreetmap.josm.data.osm.Tag;
 import org.openstreetmap.josm.data.osm.search.SearchParseError;
+import org.openstreetmap.josm.data.osm.search.SearchSetting;
 import org.openstreetmap.josm.data.preferences.CollectionProperty;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
@@ -63,5 +63,5 @@
         recentTags.add(bar);
         recentTags.add(baz);
-        final SearchAction.SearchSetting searchSetting = new SearchAction.SearchSetting();
+        final SearchSetting searchSetting = new SearchSetting();
         recentTags.ignoreTag(baz, searchSetting);
         recentTags.ignoreTag(new Tag("something", "else"), searchSetting);
