Index: src/org/openstreetmap/josm/data/Preferences.java
===================================================================
--- src/org/openstreetmap/josm/data/Preferences.java	(revision 170)
+++ src/org/openstreetmap/josm/data/Preferences.java	(revision 171)
@@ -102,6 +102,5 @@
 	protected void save() {
 		try {
-			final PrintWriter out = new PrintWriter(new FileWriter(
-					getPreferencesDir() + "preferences"));
+			final PrintWriter out = new PrintWriter(new FileWriter(getPreferencesDir() + "preferences"), false);
 			for (final Entry<String, String> e : properties.entrySet())
 				if (!e.getValue().equals(""))
Index: src/org/openstreetmap/josm/gui/preferences/AdvancedPreference.java
===================================================================
--- src/org/openstreetmap/josm/gui/preferences/AdvancedPreference.java	(revision 170)
+++ src/org/openstreetmap/josm/gui/preferences/AdvancedPreference.java	(revision 171)
@@ -49,5 +49,5 @@
 		for (String s : new TreeSet<String>(orig.keySet()))
 			model.addRow(new String[]{s, Main.pref.get(s)});
-		
+
 		JButton add = new JButton(tr("Add"));
 		p.add(Box.createHorizontalGlue(), GBC.std().fill(GBC.HORIZONTAL));
@@ -65,7 +65,7 @@
 				if (answer == JOptionPane.OK_OPTION)
 					model.addRow(new String[]{key.getText(), value.getText()});
-            }
+			}
 		});
-		
+
 		JButton edit = new JButton(tr("Edit"));
 		p.add(edit, GBC.std().insets(5,5,5,0));
@@ -73,7 +73,7 @@
 			public void actionPerformed(ActionEvent e) {
 				edit(gui, list);
-            }
+			}
 		});
-		
+
 		JButton delete = new JButton(tr("Delete"));
 		p.add(delete, GBC.std().insets(0,5,0,0));
@@ -86,12 +86,12 @@
 				while (list.getSelectedRow() != -1)
 					model.removeRow(list.getSelectedRow());
-            }
+			}
 		});
-		
+
 		list.addMouseListener(new MouseAdapter(){
 			@Override public void mouseClicked(MouseEvent e) {
 				if (e.getClickCount() == 2)
 					edit(gui, list);
-            }
+			}
 		});
 	}
@@ -107,16 +107,16 @@
 		}
 		for (Entry<String, String> e : orig.entrySet())
-			Main.pref.put(e.getKey(), e.getValue());
+			Main.pref.put(e.getKey(), null);
 	}
 
 
 	private void edit(final PreferenceDialog gui, final JTable list) {
-	    if (list.getSelectedRowCount() != 1) {
-	    	JOptionPane.showMessageDialog(gui, tr("Please select the row to edit."));
-	    	return;
-	    }
-	    String v = JOptionPane.showInputDialog(tr("New value for {0}", model.getValueAt(list.getSelectedRow(), 0)), model.getValueAt(list.getSelectedRow(), 1));
-	    if (v != null)
-	    	model.setValueAt(v, list.getSelectedRow(), 1);
-    }
+		if (list.getSelectedRowCount() != 1) {
+			JOptionPane.showMessageDialog(gui, tr("Please select the row to edit."));
+			return;
+		}
+		String v = JOptionPane.showInputDialog(tr("New value for {0}", model.getValueAt(list.getSelectedRow(), 0)), model.getValueAt(list.getSelectedRow(), 1));
+		if (v != null)
+			model.setValueAt(v, list.getSelectedRow(), 1);
+	}
 }
Index: src/org/openstreetmap/josm/tools/SearchCompiler.java
===================================================================
--- src/org/openstreetmap/josm/tools/SearchCompiler.java	(revision 170)
+++ src/org/openstreetmap/josm/tools/SearchCompiler.java	(revision 171)
@@ -119,4 +119,11 @@
 		@Override public String toString() {return "modified";}
 	}
+	
+	private static class Selected extends Match {
+		@Override public boolean match(OsmPrimitive osm) {
+			return osm.selected;
+		}
+		@Override public String toString() {return "selected";}
+	}
 
 	private static class Incomplete extends Match {
@@ -124,5 +131,5 @@
 			return osm instanceof Way && ((Way)osm).isIncomplete();
 		}
-		@Override public String toString() {return "modified";}
+		@Override public String toString() {return "incomplete";}
 	}
 	
@@ -204,4 +211,6 @@
 			else if (value.equals("incomplete"))
 				c = new Incomplete();
+			else if (value.equals("selected"))
+				c = new Selected();
 			else
 				c = new Any(value);
@@ -211,5 +220,13 @@
 		if (key.equals("type"))
 			c = new ExactType(value);
-		else if (key.equals("id")) {
+		else if (key.equals("property")) {
+			String realKey = "", realValue = value;
+			int eqPos = value.indexOf("=");
+			if (eqPos != -1) {
+				realKey = value.substring(0,eqPos);
+				realValue = value.substring(eqPos+1);
+			}
+			c = new KeyValue(realKey, realValue, notValue);
+		} else if (key.equals("id")) {
 			try {
 				c = new Id(Long.parseLong(value));
